Enterprise AI Assistant with MCP + Guardrails for e-commerce analytics. Exposes database tools for natural language querying, chart generation, and report generation via the Model Context Protocol.
This server has three well-intentioned tools with reasonable names and basic descriptions, but falls short of production quality due to incomplete schemas, missing parameter documentation, and vague error handling. The naming follows verb_noun convention (query_database, generate_chart, generate_report), which is good. For example, 'chart_type' and 'report_type' have examples but no formal enum definitions. Descriptions are present but generic (10-150 chars on average), lacking the LLM-optimized clarity needed for reliable tool selection. Error handling returns success/error flags and basic messages, but does not provide recovery guidance or categorize errors. The three tools are well-separated by concern (query, chart, report), which follows the single-responsibility pattern. Output schemas are partially visible in code returns but not formally documented in MCP schema. The server uses STDIO transport, which is a hard compliance penalty.
Query the database and generate a chart from the results in one step.
Query the database and generate a markdown report with business insights in one step.
Convert a natural language question about the e-commerce database into SQL, execute it, and return the results.
No enum constraints on chart_type and report_type parameters. Descriptions include examples ('bar', 'line', 'pie') but no formal JSON Schema enum definition. This invites LLMs to hallucinate invalid values like 'donut' or 'heatmap'.
Example values embedded in parameter descriptions ('top 10 products by revenue', 'monthly sales trend', 'monthly revenue trends'). Replace with formal constraints and enum values.
Output schemas not formally documented. Code shows return dicts with 'success', 'error', 'sql', 'rows', 'chart_base64', 'markdown' fields, but MCP tool schema does not include outputSchema. LLMs cannot plan downstream calls or extract fields reliably.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 0 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 39 | - | v1 |
Error responses lack recovery guidance. When query_database fails, it returns {'success': False, 'error': '...'} but does not suggest next steps (e.g., 'Try a simpler question' or 'Check table schema first').
Parameter 'max_rows' lacks minimum/maximum constraints in schema. Unbounded integers let LLMs pass absurd values (0, 1,000,000) that break queries or timeouts. Add minValue and maxValue to schema.
Chart title, x_label, y_label parameters in generate_chart have no constraints or descriptions beyond 'Chart title', 'X-axis label', 'Y-axis label'. What length limits? What characters are forbidden? LLMs have no guidance.
Tool descriptions do not explain WHEN to use each tool or how they differ. The three tools all query the database but generate different outputs. A description should say 'Use query_database for raw data, generate_chart for visualization, generate_report for business insights.' Without this, LLMs may pick the wrong tool.