A Go SDK for building Model Context Protocol servers. Provides high-level APIs for registering tools, resources, and prompts with support for stdio transport.
The MCP SDK Go repository provides a framework for building MCP servers, but evaluation focuses on the single example tool 'calculate' defined in examples/client/cli-use/main.go. This tool has critical definition quality issues: (1) The input schema declares 'second' as type 'array' with description 'array of numbers', but the tool description says it 'calculates the sum of two numbers', a scalar operation, not an array operation. This is a fundamental schema-description mismatch. (2) The tool name 'calculate' is a generic verb that violates naming conventions, it should be 'sum_numbers' or 'add_numbers' to indicate the specific action. (3) Parameter 'first' is described minimally ('This is the first parameter') without explaining what values are valid, what range is accepted, or how it relates to the operation. (4) No output schema is documented anywhere in the source code. (5) No error handling guidance is visible. The tool appears to be a framework demo rather than a production-quality definition. The schema.go file shows the framework SUPPORTS annotations (readOnlyHint, destructiveHint, idempotentHint) and structured schemas, but the example tool does not use them effectively.
This tool calculates the sum of two numbers
Tool name 'calculate' is generic and non-descriptive. Should follow verb_noun pattern like 'sum_numbers' or 'add_numbers' to clearly convey the action.
Schema-description mismatch: tool description says 'sum of two numbers' (scalar operation) but input schema declares 'second' as type 'array' of numbers. This creates fundamental confusion about what the tool actually does.
Parameter descriptions are trivial ('This is the first parameter'). They do not explain valid values, ranges, formats, or constraints. According to baseline, 100% of A+ tools have substantive parameter descriptions averaging 72+ characters.
No output schema documented. The tool returns something, but there is no specification of the response structure, field names, or types. LLMs cannot plan downstream calls without knowing what to expect.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 10 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 19 | - | v1 |
No error handling guidance. Tool provides no documentation of failure modes, recovery steps, or error message format. If the tool fails, the LLM has no guidance on what to do next.
Tool annotations declared in schema (readOnlyHint, destructiveHint, idempotentHint) but not set on the example tool. The 'calculate' tool should explicitly set readOnlyHint=true since it has no side effects.