A Flask-based MCP server that handles tool registration and invocation, integrating with LLM APIs to execute mathematical calculations and weather queries
Two tools with basic schemas and descriptions, but significant gaps in parameter documentation, output schema specification, and error handling guidance. Tool names lack action verbs (calculator, get_weather). Descriptions are present but generic (10-50 chars). Parameter descriptions exist but lack format/constraint details. No documented output schemas, pagination support, or recovery guidance. Error handling is minimal. This server falls in the 'poor' category with major issues typical of early-stage implementations.
Perform mathematical calculations
Get the current weather in a specific location
Tool 'calculator' lacks action verb in name. Should be 'evaluate_expression' or 'compute_math' to signal intent clearly to LLMs.
No output schemas documented for either tool. LLMs cannot plan downstream calls or extract results reliably without knowing return structure (e.g., does calculator return {result: number} or {value: string, error: string}?).
Parameter 'expression' in calculator lacks format/constraint documentation. Should specify: 'A mathematical expression using +, -, *, /, (), and numbers. Max 500 chars. Example: 2 * (3 + 4)'.
Error handling in mcp_handler.py catches exceptions but returns generic 'Error executing {tool_name}' messages. LLMs cannot self-correct without actionable guidance (e.g., 'Invalid expression: division by zero. Retry with a different denominator.').
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 34 | 2026-07-28+ | v2 |
Tool descriptions are too short (10-50 chars). Baseline for A+ tools is 194 chars. Descriptions should explain WHAT, WHEN to use, and WHAT it returns. E.g., 'Evaluate mathematical expressions with +, -, *, /, and parentheses. Returns the numeric result or an error message if the expression is invalid.'