Your DRF API as MCP tools — 1,800 endpoints become 16 dispatchers, permissioned by Django.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Live working demo of frisian-mcp. Three capability groups: crm (contacts, companies, deals, tasks, memos), ops (automation, infrastructure, notifications, security, compliance), platform (analytics, data, reporting, integrations, users). All reads and writes are real and persistent.
Operation to perform. Omit or use 'help' to list all available actions and their required parameters.
Action-specific parameters. crm: {resource, action}; ops: {group, action}; platform: {group, action}. 'mode', 'page', 'page_size' and 'filter_keys' are top-level ONLY on a continuation call (i.e. alongside a 'continuation_token'); otherwise they are ordinary action parameters and belong here.
From a probe response. Send at the TOP LEVEL, not inside 'params'.
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Live working demo of frisian-mcp. Three capability groups: crm (contacts, companies, deals, tasks, memos), ops (automation, infrastructure, notifications, security, compliance), platform (analytics, data, reporting, integrations, users). All reads and writes are real and persistent.
| Argument | Type | Description |
|---|---|---|
| mode | string | |
| page | integer | |
| action | string | Operation to perform. Omit or use 'help' to list all available actions and their required parameters. |
| params | object | Action-specific parameters. crm: {resource, action}; ops: {group, action}; platform: {group, action}. 'mode', 'page', 'page_size' and 'filter_keys' are top-level ONLY on a continuation call (i.e. alongside a 'continuation_token'); otherwise they are ordinary action parameters and belong here. |
| page_size | integer | |
| filter_keys | array | |
| continuation_token | string | From a probe response. Send at the TOP LEVEL, not inside 'params'. |
{
"type": "object",
"properties": {
"mode": {
"enum": [
"summary",
"paginated",
"filtered",
"full"
],
"type": "string"
},
"page": {
"type": "integer",
"default": 1
},
"action": {
"enum": [
"crm",
"ops",
"platform"
],
"type": "string",
"description": "Operation to perform. Omit or use 'help' to list all available actions and their required parameters."
},
"params": {
"type": "object",
"description": "Action-specific parameters. crm: {resource, action}; ops: {group, action}; platform: {group, action}. 'mode', 'page', 'page_size' and 'filter_keys' are top-level ONLY on a continuation call (i.e. alongside a 'continuation_token'); otherwise they are ordinary action parameters and belong here.",
"additionalProperties": true
},
"page_size": {
"type": "integer"
},
"filter_keys": {
"type": "array",
"items": {
"type": "string"
}
},
"continuation_token": {
"type": "string",
"description": "From a probe response. Send at the TOP LEVEL, not inside 'params'."
}
}
}Start here — frisian-mcp documentation and server guide. Actions: about (server identity and links), getting_started (step-by-step adoption guide), integrations (Django/DRF config reference), security (auth model, OAuth, API keys, tiers), demo (explore the live demo endpoints), documents (browse all documentation articles), rag (semantic and full-text doc search).
| Argument | Type | Description |
|---|---|---|
| mode | string | |
| page | integer | |
| action | string | Operation to perform. Omit or use 'help' to list all available actions and their required parameters. |
| params | object | Action-specific parameters. about: {version}; getting_started: {version}; integrations: {version}; security: {version}; demo: {surface}; documents: {sub_action, slug, id, category, limit, offset}; rag: {query, limit, offset, category}. 'mode', 'page', 'page_size' and 'filter_keys' are top-level ONLY on a continuation call (i.e. alongside a 'continuation_token'); otherwise they are ordinary action parameters and belong here. |
| page_size | integer | |
| filter_keys | array | |
| continuation_token | string | From a probe response. Send at the TOP LEVEL, not inside 'params'. |
Installation guides for frisian-mcp integrations (Django framework tier). Actions: nautobot, netbox, paperless, edx. Each action returns the files changed to make the integration work, organised by version. Pass query for semantic search within the section.
| Argument | Type | Description |
|---|---|---|
| mode | string | |
| page | integer | |
| action | string | Operation to perform. Omit or use 'help' to list all available actions and their required parameters. |
| params | object | Action-specific parameters. nautobot: (no params); netbox: (no params); paperless: (no params); edx: (no params). 'mode', 'page', 'page_size' and 'filter_keys' are top-level ONLY on a continuation call (i.e. alongside a 'continuation_token'); otherwise they are ordinary action parameters and belong here. |
| page_size | integer | |
| filter_keys | array | |
| continuation_token | string | From a probe response. Send at the TOP LEVEL, not inside 'params'. |
{
"type": "object",
"properties": {
"mode": {
"enum": [
"summary",
"paginated",
"filtered",
"full"
],
"type": "string"
},
"page": {
"type": "integer",
"default": 1
},
"action": {
"enum": [
"nautobot",
"netbox",
"paperless",
"edx"
],
"type": "string",
"description": "Operation to perform. Omit or use 'help' to list all available actions and their required parameters."
},
"params": {
"type": "object",
"description": "Action-specific parameters. nautobot: (no params); netbox: (no params); paperless: (no params); edx: (no params). 'mode', 'page', 'page_size' and 'filter_keys' are top-level ONLY on a continuation call (i.e. alongside a 'continuation_token'); otherwise they are ordinary action parameters and belong here.",
"additionalProperties": true
},
"page_size": {
"type": "integer"
},
"filter_keys": {
"type": "array",
"items": {
"type": "string"
}
},
"continuation_token": {
"type": "string",
"description": "From a probe response. Send at the TOP LEVEL, not inside 'params'."
}
}
}Troubleshooting guides for frisian-mcp integrations (Django framework tier). Actions: nautobot, netbox, paperless, edx. Each action returns diagnostic guides and relevant files for that integration. Pass query for semantic search within the section.
| Argument | Type | Description |
|---|---|---|
| mode | string | |
| page | integer | |
| action | string | Operation to perform. Omit or use 'help' to list all available actions and their required parameters. |
| params | object | Action-specific parameters. nautobot: (no params); netbox: (no params); paperless: (no params); edx: (no params). 'mode', 'page', 'page_size' and 'filter_keys' are top-level ONLY on a continuation call (i.e. alongside a 'continuation_token'); otherwise they are ordinary action parameters and belong here. |
| page_size | integer | |
| filter_keys | array | |
| continuation_token | string | From a probe response. Send at the TOP LEVEL, not inside 'params'. |
{
"type": "object",
"properties": {
"mode": {
"enum": [
"summary",
"paginated",
"filtered",
"full"
],
"type": "string"
},
"page": {
"type": "integer",
"default": 1
},
"action": {
"enum": [
"nautobot",
"netbox",
"paperless",
"edx"
],
"type": "string",
"description": "Operation to perform. Omit or use 'help' to list all available actions and their required parameters."
},
"params": {
"type": "object",
"description": "Action-specific parameters. nautobot: (no params); netbox: (no params); paperless: (no params); edx: (no params). 'mode', 'page', 'page_size' and 'filter_keys' are top-level ONLY on a continuation call (i.e. alongside a 'continuation_token'); otherwise they are ordinary action parameters and belong here.",
"additionalProperties": true
},
"page_size": {
"type": "integer"
},
"filter_keys": {
"type": "array",
"items": {
"type": "string"
}
},
"continuation_token": {
"type": "string",
"description": "From a probe response. Send at the TOP LEVEL, not inside 'params'."
}
}
}{
"type": "object",
"properties": {
"mode": {
"enum": [
"summary",
"paginated",
"filtered",
"full"
],
"type": "string"
},
"page": {
"type": "integer",
"default": 1
},
"action": {
"enum": [
"about",
"getting_started",
"integrations",
"security",
"demo",
"documents",
"rag"
],
"type": "string",
"description": "Operation to perform. Omit or use 'help' to list all available actions and their required parameters."
},
"params": {
"type": "object",
"description": "Action-specific parameters. about: {version}; getting_started: {version}; integrations: {version}; security: {version}; demo: {surface}; documents: {sub_action, slug, id, category, limit, offset}; rag: {query, limit, offset, category}. 'mode', 'page', 'page_size' and 'filter_keys' are top-level ONLY on a continuation call (i.e. alongside a 'continuation_token'); otherwise they are ordinary action parameters and belong here.",
"additionalProperties": true
},
"page_size": {
"type": "integer"
},
"filter_keys": {
"type": "array",
"items": {
"type": "string"
}
},
"continuation_token": {
"type": "string",
"description": "From a probe response. Send at the TOP LEVEL, not inside 'params'."
}
}
}