MCP server for analyzing sales data from CSV, providing tools to query total sales, top products, and regional breakdowns
The server has 5 tools with basic structure but significant gaps in production quality. Tools are named with verbs and most have descriptions, but descriptions are generic and lack LLM-optimization. Input schemas use Zod with some constraints (min/max), but output schemas are undocumented. Error handling is absent, no guidance on failures, retries, or recovery paths. The 'echo' tool appears to be a test utility and should not be in production. No tool annotations, no pagination guidance, no mention of when tools modify state vs. read-only operations (though Risk fields indicate all are READ_ONLY). Composition is reasonable (each tool does one thing), but the overall package lacks the rigor expected of production-grade tools.
Echo the provided message
Get total sales revenue broken down by all regions
Get the top products by revenue across all regions
Get top products by revenue for a specific region, or top products for each region if no region specified
Get total sales revenue, optionally filtered by region
Output schemas undocumented. Tools return JSON text wrapped in content arrays, but no formal schema describes the shape of that JSON to LLMs. For example, get_total_sales returns {region, totalRevenue} but this is invisible in tool metadata.
Descriptions are generic and lack LLM-optimization. 'Get total sales revenue, optionally filtered by region' (48 chars) is below the baseline average of 194 chars and omits key context: is this filtered by date range? What time zone? What currency? Are there prerequisites?
No error handling or recovery guidance. If readSales() fails (missing CSV, malformed data), tools return no guidance to the LLM. Should indicate whether the error is retryable or user-actionable.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 59 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 47 | - | v1 |
'echo' tool is a test utility and should not be included in production. Remove src/test.ts from the server deployment.
Parameter descriptions lack detail. 'Maximum number of products to return (1-50, defaults to 5)' is adequate but does not explain the sorting order, tie-breaking, or what 'top' means (by revenue, by volume, by margin?). Assumed revenue but should be explicit.
No tool annotations (readOnlyHint, idempotentHint, destructiveHint). Tools are marked READ_ONLY in the Risk field but not in the tool definition itself via MCP annotations. This breaks downstream agent safety reasoning.
No pagination support. Tools that return lists (top_products, sales_by_all_regions) do not offer limit/offset or cursor-based pagination. If data grows, results will bloat the context window.
get_top_products_by_region has ambiguous behavior. If region is omitted, it returns top products for EACH region. The description does not make this clear: 'Get top products by revenue for a specific region, or top products for each region if no region specified' is present but could be more prominent in the parameter description.