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. No composition guidance or chaining IDs. Schemas are visible and properly typed, preventing a lower score, but the overall quality is below community median.
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.').
No parameter descriptions. Parameters 'a', 'b', and 'operation' lack explanations. LLMs cannot infer that 'operation' is an enum of arithmetic operations or that 'a' and 'b' are operands. Add descriptions like 'First operand (numeric value)' and 'Arithmetic operation to perform: add, subtract, multiply, or divide'.
No output schema documented. Callers cannot predict the response structure. Document that both tools return {content: [{type: 'text', text: string}]} and clarify whether numeric results are returned as strings or numbers.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 40 | 2026-07-28+ | v2 |
Weak tool naming. 'add' and 'calculate' are generic and lack action clarity. Rename to 'perform_addition' or 'add_numbers' and 'perform_arithmetic' or 'calculate_result' to signal intent more clearly to LLMs.
Error handling is unstructured. The divide-by-zero check returns plain text 'Error: Cannot divide by zero' instead of a structured error response. Should return {error: {code: 'DIVISION_BY_ZERO', message: 'Cannot divide by zero. Ensure the divisor (b) is non-zero.'}} to guide LLM recovery.