A Go implementation of the Model Context Protocol (MCP) server with support for tools, resources, and prompts
mcp-go provides a framework for building MCP servers with basic tool support. However, tool definitions are severely underdeveloped. Of 7 tools, 2 lack descriptions entirely (notify, test-tool). Most descriptions are minimal (10-30 chars), well below the 50-200 char LLM-optimized baseline. Parameter descriptions are sparse or missing. Tool names lack action verbs (getTinyImage, longRunningOperation). No output schemas documented. Error handling is absent. The framework itself is sound (proper JSON Schema support, functional options pattern), but example tools demonstrate poor definition practices that would not pass production code review.
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' should be 'get_image' or 'fetch_image'; 'longRunningOperation' should be 'run_long_operation' or 'execute_async_task'. Verb-first naming helps LLMs infer intent.
Descriptions are too short (10-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 any prerequisites.
No output schemas documented. LLMs cannot plan downstream tool calls or extract return values. Framework supports output documentation but examples do not use it.
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/make_authenticated_request lacks context. 'duration' and 'steps' in longRunningOperation lack units, ranges, or constraints.