MCP server that fetches weather data for given cities
Single tool 'fetch-weather' has a basic definition with minimal quality gaps but critical shortcomings in parameter documentation and output schema specification. The tool name does not follow verb_noun convention (missing 'get_' prefix), description is generic and under-optimized for LLM selection, and parameter descriptions are minimal. No output schema is documented. Tool definition is directly visible in main.ts, so inference penalty does not apply.
tool to fetch the weather for a given city
Tool name 'fetch-weather' does not follow verb_noun convention. Should be 'get_weather' or 'fetch_weather_by_city' to clearly signal the action and match LLM parsing expectations.
Tool description is 46 characters, generic, and lacks context for LLM selection. Does not explain WHAT the tool does in detail, WHEN to use it, or WHAT it returns. Should be 50-200 characters and include return type hints.
Input parameter 'city' has a 36-character description that is adequate but minimal. No constraint documentation (e.g., expected format, min/max length, handling of multi-word cities, handling of ambiguous city names). No guidance on what happens if city is not found.
No documented output schema. Tool returns structured JSON via the MCP tool response format (content array with text type), but the actual weather data structure (fields, types, units, format) is never documented. LLM cannot reliably extract or chain results.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 37 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 31 | - | v1 |
Error handling is minimal. When city not found, returns a plain text message. No guidance on what the LLM should do next (retry with different spelling, list available cities, etc.). No distinction between retryable vs unrecoverable errors.
Tool makes external API calls (geocoding and weather APIs) with no documented timeout, rate limit, or failure modes. No guidance for LLM on expected latency, failure causes, or recovery steps.
No parameter validation documented. Tool accepts any string for 'city' without constraints. LLM cannot infer valid city formats, special characters handling, or length limits.