A Go implementation of the Model Context Protocol (MCP) server framework
Critical gaps across all dimensions. 8 tools with 5 unique names (3 'hello' duplicates, 2 'time' duplicates) signal poor composition and naming discipline. Descriptions are present but generic (10-80 chars, below 194-char baseline). Schemas visible in code but lack depth: parameters have types and descriptions, but no enums for constrained inputs (e.g., 'operation' in calculate should be enum). No output schemas documented. Error handling absent, no recovery guidance, no categorization. No tool annotations (readOnlyHint/destructiveHint).
Performs basic mathematical operations
Get the weather forecast for temperature, wind speed and relative humidity
Says hello to the provided name
Say hello to a person
Say hello to a person
Say hello to a person
Returns the current time
Returns the current time in the specified format
Duplicate tool names (3× 'hello', 2× 'time') violate single-responsibility principle. LLMs cannot distinguish between variants; registration will silently overwrite earlier definitions.
No output schemas documented. Tool responses return generic ToolResponse with Content array, but LLMs cannot infer what fields to expect (e.g., does get_weather return JSON object or plain text? What fields?). Breaks downstream tool chaining.
No error handling or recovery guidance. Tools return errors via Go error interface, but no categorization (retryable vs fatal), no actionable messages, no suggestions for next steps. LLMs cannot self-correct.
Missing enums for constrained inputs. 'operation' parameter in calculate accepts 'add|subtract|multiply|divide' but is declared as free-form string, not enum. Invites hallucinated values.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 41 | 2026-07-28+ | v2 |
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). All tools marked READ_ONLY in metadata but no formal annotation in schema. Agents cannot infer safety properties.