MCP server: One MCP server.

Frappe MCP Server

@muthaniiMCP server · External

Interact with Frappe/ERPNext sites — document CRUD, search, and whitelisted method calls

ERPv1.2.0MITPython
Freeno charge per call

Runs on your machine from its package; the steps are below.

What it does

  1. Reads
  2. Writes
  3. High impact

At most: creates or changes data: records, files, settings.

What it costs

Free

Odel charges nothing per call. The publisher may charge for its own service.

Runs locally over stdio

This server isn't hosted — your MCP client launches it from a package registry. Use one of the commands below, or drop the config into your client (e.g. Claude Desktop).

PyPIfrappe-mcp-serverv1.2.0

Run

uvx frappe-mcp-server

MCP client config

{
  "mcpServers": {
    "frappe-mcp-server": {
      "command": "uvx",
      "args": [
        "frappe-mcp-server"
      ]
    }
  }
}
Dockerdocker.io/muthanii/frappe-mcp:1.2.0

Run

docker run -i --rm docker.io/muthanii/frappe-mcp:1.2.0

MCP client config

{
  "mcpServers": {
    "frappe-mcp-server": {
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "docker.io/muthanii/frappe-mcp:1.2.0"
      ]
    }
  }
}
Dockerghcr.io/muthanii/frappe-mcp:1.2.0

Run

docker run -i --rm ghcr.io/muthanii/frappe-mcp:1.2.0

MCP client config

{
  "mcpServers": {
    "frappe-mcp-server": {
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "ghcr.io/muthanii/frappe-mcp:1.2.0"
      ]
    }
  }
}
README3 min read

PyPI Python Docker Hub Docker pulls GHCR MCP Registry License

frappe_mcp 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

DistributionReferencePage
PyPIfrappe-mcp-serverpypi.org/project/frappe-mcp-server
Docker Hubmuthanii/frappe-mcphub.docker.com/r/muthanii/frappe-mcp
GitHub Container Registryghcr.io/muthanii/frappe-mcpghcr package
MCP Registryio.github.muthanii/frappe_mcpregistry API
Glama—glama.ai/mcp/servers/muthanii/frappe_mcp
Source—github.com/muthanii/frappe_mcp

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):

bash
FRAPPE_URL=https://your-site.com \
FRAPPE_API_KEY=your-api-key \
FRAPPE_API_SECRET=your-api-secret \
  uvx frappe-mcp-server

With pip:

bash
pip install frappe-mcp-server
frappe-mcp-server

With Docker (Docker Hub):

bash
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):

bash
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

Available tools

Every tool ships MCP tool annotations and a declared outputSchema, so a client can tell read tools from destructive ones before calling them.

ToolDescriptionAccessDestructiveIdempotent
frappe_pingCheck connectivity and credentialsread-onlynoyes
frappe_get_docRetrieve a single document by doctype + nameread-onlynoyes
frappe_search_docsSearch/list documents with filtersread-onlynoyes
frappe_create_docCreate a new documentwritenono
frappe_update_docUpdate an existing documentwriteyesyes
frappe_delete_docDelete a document — irreversiblewriteyesno
frappe_run_methodCall a whitelisted server-side methodwriteyesno

frappe_run_method is marked destructive because its effect is determined entirely by the method you name.

Configuration

Environment variableRequiredDescription
FRAPPE_URLYesBase URL of your Frappe site (e.g. https://erp.example.com)
FRAPPE_API_KEYYesFrappe API key
FRAPPE_API_SECRETYesFrappe API secret
FRAPPE_VERIFY_SSLNoSet to false to skip TLS verification (default: true)
FRAPPE_TIMEOUTNoRequest timeout in seconds (default: 30)

MCP client config

Add this to your claude_desktop_config.json or Copilot config.

Via uvx:

json
{
  "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:

json
{
  "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

bash
pip install -e .
frappe-mcp

License

MIT — see LICENSE.


frappe_mcp MCP server

Similar modules

Browse ERP