A Go implementation of the Model Context Protocol (MCP) server with support for tools, resources, and prompts
mcp-go demonstrates basic tool structure with schemas and descriptions present, but exhibits significant gaps in LLM-optimization and consistency. Tool names lack clear action verbs (e.g., 'notify', 'getTinyImage', 'test-tool' are vague). Descriptions are minimal (5-50 chars for most tools), well below the 50-200 char LLM-optimized baseline. Parameter descriptions are sparse or missing entirely. The 'notify' and 'test-tool' tools lack descriptions entirely. No output schemas documented. Error handling and recovery guidance absent. Tool composition is simplistic with no evidence of chaining support or idempotency guarantees.
Adds two numbers
Echoes back the input
Returns the MCP_TINY_IMAGE
Demonstrates a long running operation with progress updates
Makes an authenticated request
Missing tool descriptions (notify, test-tool) violate pattern:tool-description. LLMs cannot determine when to select these tools.
Tool names lack action verbs. 'getTinyImage', 'notify', 'test-tool' are vague; should be 'get_image', 'send_notification', 'run_test'. LLMs infer intent from names before reading descriptions.
Descriptions are too short (5-50 chars vs. 50-200 char baseline). 'Echoes back the input' and 'Adds two numbers' lack context for LLM selection. Should explain WHAT, WHEN, and WHY.
No output schemas documented. LLMs cannot plan downstream calls or extract return values. Pattern:tool requires documented return types.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 44 | <=2025-11-25 | v2 |
Parameter descriptions missing or minimal. 'message' param in 'echo' has description, but 'duration' and 'steps' in 'longRunningOperation' lack units/ranges. No validation guidance for LLMs.