The server has one well-defined tool with proper schema, description, and parameter annotations. The tool uses modern FastMCP patterns with context support for progress and logging. However, the server is feature-limited (only 1 tool), lacks error handling guidance, does not implement destructive/idempotent/readOnly annotations in the tool definition, and the simple arithmetic operation does not reflect real-world tool complexity. The code is clean and follows conventions, but scoring reflects conservative calibration, a single basic tool with good fundamentals lands in the B range.
Add two numbers
Tool lacks risk/permission annotation metadata in MCP server definition. The 'add' tool is marked as READ_ONLY in the metadata but this is not declared in the FastMCP @mcp.tool() decorator via destructiveHint, readOnlyHint, or idempotentHint annotations.
No error handling or recovery guidance implemented. The tool lacks input validation (e.g., bounds checks on integer parameters), error classification, or actionable error messages. If invalid input is passed, the tool will either silently fail or raise an unhandled exception.
Output schema is not explicitly documented. The tool returns a raw integer (a + b) with no structured schema definition. While mathematically correct, production tools should return typed objects with documented fields for clarity and composability.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 66 | 2026-07-28+ | v2 |
Progress and logging calls in tool implementation refer to context methods that may not be invoked in all calling scenarios. The tool calls ctx.report_progress() and ctx.info() if ctx is not None, but without protocol-level Multi Round-Trip Request (MRTR) support for input elicitation, these calls may be silently ignored.