Read-only MCP server over a small business database with customer and order information
Three well-designed read-only tools with clear naming, solid descriptions (150-200 chars each), and complete input schemas. All parameters are typed and described. Error handling is thoughtful, ToolError exceptions surface readable messages to the LLM, not tracebacks. Results are capped at MAX_ROWS=100 with truncation warnings. Output is formatted as readable text rather than structured JSON, which is appropriate for a read-only analytics server but limits downstream tool chaining. No tool annotations (readOnlyHint, etc.) present. Overall strong for a focused domain tool, but lacks some production patterns around output structure and composition.
Find customers by name, email address, or company name. Use this first when a question mentions a person or company, so you have their customer id for the other tools.
List individual orders placed within a date range.
Total completed revenue in a date range, broken down by a dimension. Refunded and pending orders are excluded from the totals.
Output format is unstructured text, not JSON. Downstream tools cannot parse results reliably. LLMs must extract data via text parsing, which is error-prone and wastes tokens.
No tool annotations (readOnlyHint, idempotentHint). LLMs cannot infer that these tools are safe to retry or that they do not modify state.
Output schema not documented. LLMs do not know what fields to expect from each tool, limiting their ability to chain results or extract specific data.
list_orders and revenue_summary accept date strings but do not validate format in the description. The check_date() function validates, but LLMs cannot see this validation logic.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 60 | <=2025-11-25 | v2 |
revenue_summary group_by parameter accepts free-form string with validation inside the tool. Should be declared as an enum: ['month', 'plan', 'product', 'country', 'customer'].