Frappe MCP Server


mcp-name: io.github.muthanii/frappe_mcp
A Model Context Protocol (MCP) server for Frappe Framework.
Connect Claude Desktop, VS Code Copilot, and other MCP clients to any Frappe/ERPNext site
via its REST API.
Where to get it
Features
- Document CRUD — get, create, update, delete Frappe doctypes
- Search — full-text and filtered document search
- Remote method calls — invoke any server-side Python method
- Authentication — API key + secret (token-based auth)
- Docker-first — single
docker run command, no Python install needed
Quick start
With uvx (no install):
FRAPPE_URL=https://your-site.com \
FRAPPE_API_KEY=your-api-key \
FRAPPE_API_SECRET=your-api-secret \
uvx frappe-mcp-server
With pip:
pip install frappe-mcp-server
frappe-mcp-server
With Docker (Docker Hub):
docker run -i --rm \
-e FRAPPE_URL=https://your-site.com \
-e FRAPPE_API_KEY=your-api-key \
-e FRAPPE_API_SECRET=your-api-secret \
muthanii/frappe-mcp
With Docker (GHCR):
docker run -i --rm \
-e FRAPPE_URL=https://your-site.com \
-e FRAPPE_API_KEY=your-api-key \
-e FRAPPE_API_SECRET=your-api-secret \
ghcr.io/muthanii/frappe-mcp
Every tool ships MCP tool annotations and a declared outputSchema, so a client can tell read tools from destructive ones before calling them.
| Tool | Description | Access | Destructive | Idempotent |
|---|
frappe_ping | Check connectivity and credentials | read-only | no | yes |
frappe_get_doc | Retrieve a single document by doctype + name | read-only | no | yes |
frappe_search_docs | Search/list documents with filters | read-only | no | yes |
frappe_create_doc | Create a new document | write | no | no |
frappe_update_doc | Update an existing document | write | yes | yes |
frappe_delete_doc | Delete a document — irreversible | write | yes | no |
frappe_run_method | Call a whitelisted server-side method | write | yes | no |
frappe_run_method is marked destructive because its effect is determined entirely by the method you name.
Configuration
| Environment variable | Required | Description |
|---|
FRAPPE_URL | Yes | Base URL of your Frappe site (e.g. https://erp.example.com) |
FRAPPE_API_KEY | Yes | Frappe API key |
FRAPPE_API_SECRET | Yes | Frappe API secret |
FRAPPE_VERIFY_SSL | No | Set to false to skip TLS verification (default: true) |
FRAPPE_TIMEOUT | No | Request timeout in seconds (default: 30) |
MCP client config
Add this to your claude_desktop_config.json or Copilot config.
Via uvx:
{
"mcpServers": {
"frappe": {
"command": "uvx",
"args": ["frappe-mcp-server"],
"env": {
"FRAPPE_URL": "https://your-site.com",
"FRAPPE_API_KEY": "your-api-key",
"FRAPPE_API_SECRET": "your-api-secret"
}
}
}
}
Via Docker:
{
"mcpServers": {
"frappe": {
"command": "docker",
"args": [
"run", "-i", "--rm",
"-e", "FRAPPE_URL",
"-e", "FRAPPE_API_KEY",
"-e", "FRAPPE_API_SECRET",
"muthanii/frappe-mcp"
],
"env": {
"FRAPPE_URL": "https://your-site.com",
"FRAPPE_API_KEY": "your-api-key",
"FRAPPE_API_SECRET": "your-api-secret"
}
}
}
}
Local development
pip install -e .
frappe-mcp
License
MIT — see LICENSE.
