Enhanced Model Context Protocol server for Frappe Framework with comprehensive API operations for document management, schema introspection, and reporting
The Frappe MCP server demonstrates moderate definition quality with good tool coverage (12 tools) but significant gaps in parameter descriptions, output schemas, and error handling guidance. Tool names follow action-verb conventions well ('create_', 'get_', 'update_', 'delete_', 'run_'), but parameter documentation is inconsistent. Several tools lack comprehensive input descriptions, and output schemas are not documented in the provided source. The codebase shows good architectural separation (documents.py, reports.py, helpers.py) and security consciousness (credentials validation, secret injection via environment variables), but schema completeness and error recovery guidance are weak points. Baseline comparison: average tool description length is ~150-180 chars (within 194-char production median), but parameter descriptions vary from minimal ('Filter string (optional)') to absent. The server registers tools with FastMCP, confirming structured registration, but response schema documentation is not visible in the provided code.
Create a new document in Frappe.
Delete a document from Frappe. This tool handles document deletion with comprehensive error handling, providing detailed feedback about why deletions fail and actionable guidance for resolving common deletion blockers.
Retrieve a document from Frappe.
Get standard financial reports (P&L, Balance Sheet, Cash Flow).
Get metadata for a specific report including columns and filters.
Get a list of all available reports in the system.
Output schemas not documented in provided source code. Tools return data but LLMs cannot verify what fields to expect.
Filter parameter descriptions vague and lack format specification. 'Filter string (optional). Uses custom syntax to bypass MCP validation issues.' does not explain the syntax, expected format, or examples. LLMs cannot construct valid filters without clear constraints.
Error handling and recovery guidance absent. No tool descriptions state what errors might occur, whether they are retryable, or what the LLM should do next. Per pattern:recovery-guide, 'Error responses must tell the LLM what to do next', not present in visible code.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | B | 72 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 8 | - | v1 |
A simple tool to check if the server is responding.
Run a standard doctype report with filters and sorting.
Execute a Frappe query report with filters.
Update an existing document in Frappe.
Validate API credentials and return authentication status.
Get version information for the Frappe MCP server.
Destructive operations (delete_document) lack confirmation/dry-run support. Per pattern:confirmation-request, irreversible operations should support a confirmation step. No evidence of confirm_before_execute pattern in implementation.
Parameter 'values' in create_document and update_document is typed as generic 'object' with minimal guidance. Description mentions Link and Table field handling but lacks concrete examples of expected structure.
Report tools lack pagination documentation. list_reports accepts 'limit' parameter but no mention of 'offset', 'page', or 'next_cursor'. Per pattern:paginated-result, 'Tools returning lists should accept page/offset and limit parameters and return a total count or next_cursor.'
Tool composition dependencies not documented. No guidance on when to call get_report_meta before run_query_report, or when to call list_reports to discover available reports. Per pattern:tool-chain, 'Ensure tool A's output contains the IDs and references tool B needs.'