A Model Context Protocol server providing tools to perform calculations
Single-tool server with basic but incomplete quality. The 'calculate' tool has a clear name and reasonable description, but lacks critical schema documentation, output structure specification, and error handling guidance. Input schema is present (expression: string) but output schema is entirely undocumented, LLMs cannot plan downstream operations or extract structured results. Error handling is minimal (SympifyError caught but response is unstructured text). The tool is read-only (correctly annotated), but parameter constraints are missing, no guidance on expression format, complexity limits, or examples. Descriptions lack the specificity required for reliable LLM tool selection per pattern:tool-description. Overall, this is a functional but underdeveloped tool that would benefit from structured output documentation and richer error guidance.
Returns the result of a mathematical expression.
No output schema documentation. Tool returns free-text string 'Result: {result}' without specifying the structure or fields LLMs should expect. This violates pattern:tool and pattern:response-shaper, agents cannot reliably parse the response or chain it to other tools.
Parameter description lacks constraints. The 'expression' parameter has minimal guidance: 'Python arithmetic expression to evaluate'. No specification of allowed syntax, complexity limits, variable support, or format examples. Per pattern:constrained-input, LLMs need explicit format guidance to avoid invalid expressions.
Error responses are unstructured and non-actionable. The tool returns 'Error: Invalid mathematical expression.', no guidance on what the LLM should do next (retry with simplification, ask user for clarification, try a different expression format). Per pattern:recovery-guide, errors must include recovery steps.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 46 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 47 | - | v1 |
Tool description is generic and lacks decision guidance. At 62 characters ('Returns the result of a mathematical expression.'), it states WHAT but not WHEN to use this vs alternatives or what prerequisites exist. Per pattern:tool-description baseline (p90=392 chars), descriptions should be 10-1024 chars and include context for LLM selection.
No validation examples or edge-case handling documented. Tool accepts arbitrary Python expressions evaluated via sympy.sympify(), but no documentation of which functions/syntax are supported, what limits exist (expression length, recursion depth), or how sympy interprets common cases (1/0, infinity, undefined variables).