Frappe MCP Server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| FRAPPE_URL | Yes | Base URL of your Frappe site (e.g. https://erp.example.com) | |
| FRAPPE_API_KEY | Yes | Frappe API key | |
| FRAPPE_TIMEOUT | No | Request timeout in seconds (default: 30) | 30 |
| FRAPPE_API_SECRET | Yes | Frappe API secret | |
| FRAPPE_VERIFY_SSL | No | Set to false to skip TLS verification (default: true) | true |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| frappe_pingA | Check connectivity to the configured Frappe/ERPNext site. Returns a pong response confirming the server is reachable, authenticated, and responsive. Use this as a health-check before making other calls to verify the connection is working. |
| frappe_get_docA | Retrieve a single document (doctype record) by its doctype and document name. Returns all fields and values of the document. Common use cases: fetch a Sales Invoice by its number, get Customer details, load an Item record, or retrieve any saved document by its unique name. |
| frappe_search_docsA | Search or list documents of a given DocType with optional filters, field selection, pagination (default 20, max 200), and ordering. Returns a paginated list of matching documents. Use filters to narrow results by status, date range, amount, or any document field. |
| frappe_create_docA | Create a new document of the specified DocType with the provided field values. The data object should contain field names as keys and their respective values. Frappe auto-generates document names (via naming series) for new records. Returns the created document including its system-assigned name and all field values. |
| frappe_update_docA | Update specific fields of an existing document identified by its doctype and name. Only the fields provided in the data object are modified; all other fields remain unchanged. Returns the updated document with all current values. Use for changing status, updating contact information, modifying amounts, or adjusting any document field. |
| frappe_delete_docA | Permanently delete a document by its doctype and name. This action is irreversible — the document and all its associated data are removed from the system. Use with caution. For audit purposes, consider updating the document status to 'Cancelled' instead where applicable (e.g., for Sales Invoices, Sales Orders). |
| frappe_run_methodA | Call a whitelisted server-side Python method on the Frappe site remotely. Use this for operations not covered by the standard CRUD tools — such as getting the logged user, computing stock balances, running reports, triggering workflows, or invoking custom API methods. The target method must be decorated with @frappe.whitelist() on the server. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 7 tools
Each tool has a clearly distinct purpose: ping for health-check, CRUD tools for document lifecycle, and a custom method runner. There is no ambiguity between them.
All tool names follow a consistent frappe_verb_noun pattern (e.g., frappe_get_doc, frappe_create_doc) with lowercase and underscores, making it predictable for an LLM.
With 7 tools, the set is well-scoped for interacting with a Frappe/ERPNext system. It covers essential operations without being overwhelming or too sparse.
The set provides full CRUD, health-check, and a generic method runner for custom operations. Minor gaps like listing doctypes or bulk operations can be handled via the method runner, but dedicated tools would be slightly more convenient.