An MCP server for integrating with ERPNext/Frappe systems, providing tools for document management, queries, and analysis
The Frappe MCP server exhibits significant quality gaps across naming, descriptions, parameter documentation, and output schema clarity. While tool names follow verb-noun conventions (get_, list_, create_, update_, delete_, search_), descriptions are sparse and many are generic. Critical issues: (1) Parameter descriptions are minimal or absent, most tools lack field-level documentation beyond basic type info. (2) Output schemas are not documented anywhere in the source code. (3) Three tools (calculate_project_metrics, project_risk_assessment, portfolio_dashboard) are marked as 'fabricated - not dispatchable' in test files, indicating incomplete implementation. (4) Error handling is not visible, no recovery guidance, error categorization, or actionable failure messages. (5) Many domain-specific tools (analyze_document, analyze_project_timeline, generate_project_report) have vague descriptions that do not explain when to use them or what they return. The server defines 16 tools total, but 3 appear non-functional and the remaining 13 have inconsistent quality. Average tool score: 38/100.
Analyze a document using AI-powered insights
Analyze project timeline and identify potential delays
Analyze budget variance for projects
Calculate key metrics for a project (fabricated - not dispatchable)
Create a new document of a specified doctype
Delete a document
Three tools marked as 'fabricated - not dispatchable' (calculate_project_metrics, project_risk_assessment, portfolio_dashboard), these are incomplete stubs and should be removed or completed before production.
Output schemas are not documented. Tools return data but LLMs cannot plan downstream calls without knowing response structure. No field descriptions, data types, or example shapes for any tool response.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 49 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 32 | 2024-11-05+ | v1 |
Generate a comprehensive report for a project
Retrieve a specific document by name from a given doctype
Get the current status of a project including timeline and budget information
Get resource allocation for a project
List documents of a specific doctype with optional filters
Get portfolio dashboard information (fabricated - not dispatchable)
Assess risks for a project (fabricated - not dispatchable)
Analyze resource utilization across projects
Search for documents across a doctype
Update an existing document
Parameter descriptions are minimal or missing. Most tools have only brief 1-2 line descriptions for parameters; they lack format constraints, allowed values, example values, or usage guidance. E.g., 'filters' param in list_documents says 'Optional filters to apply' with no explanation of filter syntax or structure.
No error handling documentation. Tools do not describe what errors can occur, how to recover from them, or what the LLM should do next. No actionable error messages visible in source code.
Domain-specific tools have vague descriptions. analyze_document says 'Analyze a document using AI-powered insights' but does not explain what insights are returned, when to call it vs other analysis tools, or what structure the response has. This forces LLMs to guess at tool purpose.
No pagination guidance. list_documents accepts a 'limit' parameter but does not document max values, default behavior, or whether pagination tokens/cursors are supported. Large result sets will blow context windows.
Missing permissions/scope declarations. Destructive tools (delete_document) and sensitive operations (create_document, update_document) do not declare what permissions they require or check. No indication of least-privilege controls.
delete_document and update_document lack confirmation/dry-run patterns. Destructive/irreversible operations should support confirmation to prevent accidental data loss via agent mistakes.
No field-level documentation for 'data' parameters. create_document and update_document accept a 'data' object but do not describe what fields it contains, required vs optional fields, or validation rules. LLMs must reverse-engineer the schema.