A CLI for Anthropic using MCP as the protocol for tool calling
Three arithmetic tools with basic but incomplete definitions. All tools have names starting with action verbs (add, multiply, divide), which is correct. Tool descriptions are present but minimal (10-20 chars), falling below the 34-char minimum observed in production (p10 baseline). Parameter descriptions vary: 'add' has good descriptions ('First number to add', 'Second number to add'), but 'multiply' and 'divide' have vague/single-word descriptions ('number', 'amount to multiply by'). All three tools have proper input schemas with type definitions and min/max constraints (-1000 to 1000), which is a strength. However, output schemas are not documented, the code returns plain text in a content array, but there is no formal schema declaration visible to LLMs. Error handling is absent: the 'divide' tool does not check for division by zero, and no error recovery guidance is provided. Security is basic but acceptable for read-only arithmetic operations (all marked READ_ONLY). No pagination, batching, or composition considerations apply to these trivial tools, but the pattern shows no awareness of the broader tool-design rubric.
Add two numbers
Divide two numbers
Multiply two numbers
Minimal and vague parameter descriptions. 'multiply' uses 'number' and 'amount to multiply by'; 'divide' uses 'number' and 'amount to divide by'. These do not clearly disambiguate the roles of parameters and waste cognitive effort from LLMs.
Tool descriptions are 10 - 20 characters, well below production baseline (p10=34 chars, avg=194 chars). 'Add two numbers', 'Multiply two numbers', 'Divide two numbers' lack context for when or why to select each tool and do not explain the return format.
No error handling for divide-by-zero. The 'divide' tool accepts any b value in [-1000, 1000], including 0, but does not validate or provide recovery guidance. LLMs will encounter runtime failures with no actionable next step.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 50 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 44 | - | v1 |
Output schema not documented. The code returns {content: [{type: 'text', text: string}]}, but this structure is not visible in tool definitions. LLMs cannot predict the return shape and may fail to extract results.
Tool names lack verb_noun clarity beyond the base action. 'add', 'multiply', 'divide' are correct action verbs, but do not convey the domain (arithmetic, numbers). In a large tool palette, 'add' is ambiguous, add to cart? Add user to group? Add label to issue?