A remote MCP server providing calculator tools without authentication, deployed on Cloudflare Workers
Two tools with basic schemas and minimal descriptions. Both tools have input schemas with proper types (number, string, enum), but descriptions are extremely short (10-40 chars), falling well below the 50-200 char baseline for LLM-optimized descriptions. No output schemas documented. Error handling is minimal (divide-by-zero check in 'calculate' returns text, not structured error). Tool names lack action verbs ('add' and 'calculate' are weak; 'perform_addition' and 'perform_calculation' would be clearer). No parameter descriptions beyond type hints. Schemas are present but sparse.
Simple addition tool
Calculator tool with multiple operations
Tool descriptions are critically short (10-40 chars). 'Simple addition tool' and 'Calculator tool with multiple operations' lack context for LLM selection. Should explain WHAT the tool does, WHEN to use it, and what it returns (e.g., 'Adds two numbers and returns their sum as a numeric result. Use when you need basic arithmetic addition.').
Parameter descriptions are missing entirely. Zod schema defines types (number, enum) but LLMs cannot infer meaning from names alone. 'a' and 'b' are ambiguous, are they operands, indices, or something else? Add descriptions like 'First operand (numeric value)' and 'Second operand (numeric value)'.
Output schema is not documented. Callers cannot predict the response structure. Document that both tools return {content: [{type: 'text', text: string}]} and explain what the text field contains (numeric result or error message).
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 38 | 2026-07-28+ | v2 |
Tool names lack action verbs. 'add' and 'calculate' are weak; 'perform_addition' or 'compute_sum' and 'perform_arithmetic' would be clearer. Current names do not signal intent as strongly as verb_noun patterns (e.g., 'add_numbers', 'calculate_result').
Error handling is minimal and unstructured. 'calculate' returns a text error for divide-by-zero, but does not categorize it as retryable or user-fixable. Should return structured error with guidance: {error: 'division_by_zero', message: 'Cannot divide by zero. Check the divisor (b parameter) and retry.'}.