MCP server providing exact calculations via Linux/Python tools for arithmetic, dates, units, statistics, hashing, regex, networking, and more where LLMs systematically fail.
Four read-only utility tools with clear, actionable descriptions (avg 156 chars). All tools have input schemas with typed parameters and descriptions. Naming is verb-forward (calculate, solve_equation, date_diff, date_add). However, schemas lack explicit output documentation, error handling guidance is absent, and parameter constraints (e.g., date format validation, expression syntax rules) are described informally rather than via JSON Schema patterns/enums. No tool annotations (readOnlyHint present but not declared). Composition is sound, each tool does one thing. Missing: recovery guidance for invalid inputs, pagination (not applicable here), and structured error responses.
Calculates mathematical expressions exactly without LLM hallucination. Supports: +, -, *, /, **, %, //, parentheses, sqrt(), sin(), cos(), log(), factorial() etc. Also supports percentages: '15% of 239.99' or '239.99 * 0.15'. Example: calculate("sqrt(2) * pi") → 4.442882938...
Adds or subtracts time from a date. Format base_date: YYYY-MM-DD. Negative values for subtraction. Example: date_add('2026-01-01', months=3, days=-5)
Calculates the exact difference between two dates. Format: YYYY-MM-DD. Returns exact total days and a calendar delta. Example: date_diff('1990-05-15', '2026-03-29')
Solves algebraic equations exactly via SymPy. Examples: 'x**2 - 4 = 0', 'x**3 - 6*x**2 + 11*x - 6 = 0', '2*x + 5 = 13'
No output schema documentation. Tools return results but LLMs cannot infer structure (e.g., does calculate() return a number, string, or object with value+unit?). Downstream tool chaining is impossible without guessing.
Input validation constraints are informal. 'YYYY-MM-DD format' is stated in description text, not enforced via JSON Schema pattern or enum. Invalid dates (e.g., '2026-13-45') will fail at runtime with no recovery guidance.
No error handling or recovery guidance. If calculate() receives 'sqrt(-1)' or solve_equation() has no real solutions, the tool will error. Descriptions do not explain what happens or how to recover.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 66 | 2026-07-28+ | v2 |
Tool annotations missing. All four tools are read-only (no side effects), but readOnlyHint is not declared in the tool definition. LLMs cannot infer safety without explicit annotation.
Parameter descriptions lack format/constraint details. 'expression' in calculate() does not specify supported operators, functions, or syntax rules. LLMs will guess and pass invalid expressions.