A simple MCP server providing calculator tools without authentication
The server exposes two simple tools with basic schema definitions and minimal descriptions. Both tools have explicit JSON Schema definitions via Zod, which is positive. However, descriptions are extremely terse (12-46 characters), well below the 50-200 character LLM-optimized baseline for A+ tools. Parameter descriptions exist but lack depth on constraints, error conditions, or usage context. The tools follow a simple verb_noun pattern ('add', 'calculate') but lack the comprehensive context needed for production-grade agent planning. Error handling is minimal, the 'calculate' tool handles division by zero inline but returns plain text rather than structured error guidance. No evidence of parameter type sufficiency documentation, rate limiting, or recovery guidance. The 'calculate' tool shows compound functionality (multiple operations in one tool) which is acceptable for a simple utility but could be more composable. Output is always plain text content, which is simple but not machine-optimized for downstream tool chaining. Overall, this is a functional but minimal implementation that would benefit from richer descriptions and structured error handling.
Simple addition tool
Calculator tool with multiple operations
Tool descriptions are critically terse (12-46 characters), far below the 50-200 character LLM-optimized baseline. 'Simple addition tool' and 'Calculator tool with multiple operations' lack context on when to use each tool, what they return, or dependencies.
Parameter descriptions are missing or minimal. While Zod schema declares types (number, enum), LLMs cannot infer semantic context from type alone. The 'operation' enum parameter lacks guidance on when each option is appropriate or what result format to expect.
Error handling returns plain text ('Error: Cannot divide by zero') without structured guidance. The LLM receives a string but has no way to classify it as retryable, user-fixable, or fatal. Missing pattern: recovery-guide.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 53 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 28 | - | v1 |
Output schema is undocumented. Tools return { content: [{ type: 'text', text: string }] } but the tool definition provides no schema for this response structure. LLMs cannot plan downstream operations or validate outputs.
No parameter constraints documented. Numeric parameters ('a', 'b') lack min/max bounds. The 'operation' enum is properly constrained, but descriptions do not explain the constraint or valid values in text form.