My first Model Context Protocol (MCP) server — a local Node.js tool that connects Claude to a deterministic calculator.
Single tool 'calculate' has a basic schema with Zod validation but critical gaps in descriptions. Tool description is generic (11 words, 34 chars, below 50-char baseline). All three parameters (operation, a, b) lack descriptions entirely (0 chars each), violating the 100% A+ baseline. No output schema documented. No error handling guidance (e.g., division by zero). Parameter descriptions are required by pattern:tool-description and baseline data shows 100% of A+ tools have param annotations averaging 72 chars. This server provides none.
Performs basic math operations
All three parameters lack descriptions (operation, a, b have null/empty descriptions). LLMs cannot infer parameter meaning from names alone.
Tool description is 34 characters ('Performs basic math operations'), below 50-char minimum and lacks WHEN/WHY context. Does not state what the tool returns or when to use it instead of alternatives.
No output schema documented. LLMs cannot plan downstream calls or extract structured data from the response.
No error handling guidance for edge cases (e.g., division by zero returns Infinity or NaN). LLM receives no recovery path.
Tool name 'calculate' is generic and does not start with a clear action verb. 'perform_calculation' or 'compute_math' would be more explicit.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 40 | 2026-07-28+ | v2 |