A simple MCP server demonstrating tools, resources, and prompts with a calculator tool, greeting resource, and code review prompt
The server defines 1 tool (add) with basic but incomplete quality. The tool has a clear action verb name ('add'), a functional description, and visible parameter schemas with types and descriptions. However, the descriptions are minimal (10-20 chars per param, 31 chars for tool), output schema is not documented, and there is no error handling, input validation, or recovery guidance. The server also exposes 1 resource and 1 prompt, but these are not tools and fall outside the tool evaluation scope. The tool definitions are directly visible in server.py via @mcp.tool() decorator, so no inference penalty applies. Overall quality is fair but below production grade.
Add two numbers together.
Tool description is too short (31 characters). Baseline for good descriptions is 50-200 chars. Current description lacks context on when to use, prerequisites, or return type.
Parameter descriptions are minimal (8-16 characters). Baseline is 50+ chars. Descriptions do not state format, range, or constraints. E.g., 'First number.' does not specify if negative integers are allowed, range limits, or use cases.
Output schema is not documented. The tool returns an int, but LLMs cannot infer semantics (is it the sum? an error code?). Pattern baseline requires documented return types for 100% of A+ tools.
No error handling or recovery guidance. If inputs are invalid (e.g., non-integers passed), LLM receives no actionable error. Pattern requires: 'Invalid input: expected integers. Got X and Y.'
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 50 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 43 | - | v1 |
No input validation. Unbounded int parameters can accept very large values, causing potential overflow or performance issues. Baseline pattern requires min/max constraints for numeric parameters.