Go MCP server framework with type-safe tool registration, functional options API, and simplified handler patterns
mcp-io has 3 tools with inconsistent quality. Two tools (geocode_city, get_weather) have detailed schemas and good descriptions with proper type information. However, the 'greet' tool has a trivial description ('say hi') that violates the 20-character minimum guidance and provides minimal LLM decision-making context. Input schemas are present and properly typed for all tools, but descriptions vary widely in usefulness. No error handling guidance is visible in the tool definitions. No pagination support for any list-returning operations. Parameter descriptions are present but sparse in some cases. The tool set lacks composition patterns, no tools reference output from other tools in their parameters, which limits chaining capability.
Convert a city name to geographic coordinates using a cache-first approach with fallback to OpenStreetMap geocoding
Fetch weather forecast data from NOAA for the given coordinates
say hi
Tool 'greet' has trivial description ('say hi'). Description is under 20 characters, violating minimum guidance. LLM cannot determine when/why to call this tool or how it differs from other tools.
No error handling or recovery guidance in any tool descriptions. Tools do not document what errors are retryable, what users can fix, or what indicates fatal failures. LLMs cannot self-correct on failures.
Parameter descriptions are minimal. 'city_name' in geocode_city says only 'US city name', does not specify format constraints, length limits, or what happens with ambiguous inputs (e.g., Springfield exists in 30+ states).
No pagination support visible in tools. get_weather accepts only lat/lon with no limit or offset parameters. If weather data returns large historical datasets, context window could be exhausted without pagination.
Inferred effective spec: 2026-07-28+.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 55 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 46 | - | v1 |
Tool composition is absent. geocode_city returns coordinates but get_weather expects those exact parameters, no explicit documentation linking them. Output field names do not guarantee chain compatibility.