Server Configuration
Describes the environment variables required to run the server.
Name | Required | Description | Default |
---|---|---|---|
No arguments |
Schema
Prompts
Interactive templates invoked by user choice
Name | Description |
---|---|
No prompts |
Resources
Contextual data attached and managed by the client
Name | Description |
---|---|
No resources |
Tools
Functions exposed to the LLM to take actions
Name | Description |
---|---|
ping | A simple tool to check if the server is responding. |
version | Get version information for the Frappe MCP server. |
validate_auth | Validate API credentials and return authentication status. |
create_document | Create a new document in Frappe.
Args:
doctype: DocType name
values: Document field values. Required fields must be included.
For Link fields, provide the exact document name.
For Table fields, provide an array of row objects.
|
get_document | Retrieve a document from Frappe.
Args:
doctype: DocType name
name: Document name (case-sensitive)
|
update_document | Update an existing document in Frappe.
Args:
doctype: DocType name
name: Document name (case-sensitive)
values: Field values to update
|
delete_document | Delete a document from Frappe.
Args:
doctype: DocType name
name: Document name (case-sensitive)
|
list_documents | List documents from Frappe with filters.
Args:
doctype: DocType name
filters: Filter string (optional). Uses custom syntax to bypass MCP validation issues.
fields: Comma-separated field names (optional). E.g. "name,customer,total"
limit: Maximum number of records to return (optional). E.g. "20"
order_by: Field to order by (optional, can include 'desc' like 'creation desc')
Filter Syntax:
- Simple equality: "field:value" -> {"field": "value"}
- Operators: "field:operator:value" -> {"field": ["operator", value]}
- Multiple filters: "field1:value1,field2:operator:value2"
Supported Operators:
- Equality: = (default), !=
- Comparison: <, >, <=, >=
- Pattern: like, not_like (use % for wildcards)
- Lists: in, not_in (separate values with |)
- Null checks: is:null, is:not_null, is_not:null
- Ranges: between (separate values with |)
Examples:
- list_documents("Bank Transaction", "status:Unreconciled") -> List unreconciled transactions
- list_documents("Task", "status:in:Open|Working", "name,subject", "10") -> List open tasks with specific fields
- list_documents("User", "name:like:%admin%") -> List users with 'admin' in name
|
call_method | Execute a whitelisted Frappe method.
Args:
method: Method name to call (whitelisted)
params: Parameters to pass to the method (optional)
|
count_documents | Count documents in Frappe with optional filters.
This tool addresses the filtering limitation that existed in previous implementations
by using Frappe's native count functionality via the REST API with a custom filter language.
Args:
doctype: DocType name
filters: Filter string (optional). Uses custom syntax to bypass MCP validation issues.
Filter Syntax:
- Simple equality: "field:value" -> {"field": "value"}
- Operators: "field:operator:value" -> {"field": ["operator", value]}
- Multiple filters: "field1:value1,field2:operator:value2"
Supported Operators:
- Equality: = (default), !=
- Comparison: <, >, <=, >=
- Pattern: like, not_like (use % for wildcards)
- Lists: in, not_in (separate values with |)
- Null checks: is:null, is:not_null, is_not:null
- Ranges: between (separate values with |)
Examples:
- "status:Unreconciled" -> Status equals Unreconciled
- "amount:>:100" -> Amount greater than 100
- "name:like:%admin%" -> Name contains 'admin'
- "status:in:Open|Working|Pending" -> Status in list
- "date:between:2025-01-01|2025-12-31" -> Date in range
- "phone:is:not_null" -> Phone is not null
Tool Examples:
- count_documents("User") -> Count all users
- count_documents("Bank Transaction", "status:Unreconciled") -> Count unreconciled transactions
- count_documents("Bank Transaction", "unallocated_amount:>:0") -> Count with unallocated amount
- count_documents("Task", "status:in:Open|Working|Pending") -> Count tasks with multiple statuses
- count_documents("User", "name:like:%admin%") -> Count users with 'admin' in name
- count_documents("Payment Entry", "posting_date:between:2025-01-01|2025-12-31") -> Count in date range
- count_documents("Contact", "phone:is:not_null") -> Count contacts with phone numbers
|
test_hardcoded_filter | Test hardcoded filter to verify Frappe API filtering works. This bypasses all parameter validation issues. |
get_doctype_schema | Get the complete schema for a DocType including field definitions, validations, and linked DocTypes.
Use this to understand the structure of a DocType before creating or updating documents.
Args:
doctype: DocType name
|
get_field_options | Get available options for a Link or Select field.
For Link fields, returns documents from the linked DocType.
For Select fields, returns the predefined options.
Args:
doctype: DocType name
fieldname: Field name
limit: Maximum number of options to return (default: 20)
|
get_doctype_list | Get a list of available DocTypes, optionally filtered by module.
Args:
module: Module name to filter by (optional)
limit: Maximum number of DocTypes to return (default: 50)
|
get_frappe_usage_info | Get combined information about a DocType or workflow, including schema metadata and usage guidance.
Args:
doctype: DocType name (optional if workflow is provided)
workflow: Workflow name (optional if doctype is provided)
|
run_query_report | Execute a Frappe query report with filters.
Args:
report_name: Name of the report to run
filters: Filter string (optional). Uses custom syntax to bypass MCP validation issues.
Filter Syntax: Use the same string-based syntax as count_documents and list_documents.
Examples: "status:Open", "date:>=:2025-01-01", "status:in:Open|Working"
|
get_report_meta | Get metadata for a specific report including columns and filters.
Args:
report_name: Name of the report to get metadata for
|
list_reports | Get a list of all available reports in the system.
Args:
module: Filter reports by module (optional)
limit: Maximum number of reports to return (default: 50)
|
run_doctype_report | Run a standard doctype report with filters and sorting.
Args:
doctype: DocType to generate report for
fields: Fields to include in report (optional)
filters: Filter string (optional). Uses custom syntax to bypass MCP validation issues.
limit: Maximum number of records (default: 100)
order_by: Field to order by (optional)
Filter Syntax: Use the same string-based syntax as count_documents and list_documents.
Examples: "status:Open", "date:>=:2025-01-01", "status:in:Open|Working"
|
get_financial_statements | Get standard financial reports (P&L, Balance Sheet, Cash Flow).
Args:
report_type: Type of financial statement
('Profit and Loss Statement', 'Balance Sheet', 'Cash Flow')
company: Company name
from_date: Start date (YYYY-MM-DD format, optional)
to_date: End date (YYYY-MM-DD format, optional)
periodicity: Periodicity (Monthly, Quarterly, Half-Yearly, Yearly)
|
get_report_columns | Get the column structure for a specific report.
Args:
report_name: Name of the report
filters: Filter string (optional). Uses custom syntax to bypass MCP validation issues.
Filter Syntax: Use the same string-based syntax as count_documents and list_documents.
Examples: "status:Open", "date:>=:2025-01-01", "status:in:Open|Working"
|