MCP server that retrieves current and forecast weather information for given locations using OpenWeatherMap API
The server has a single well-defined tool 'weather' with explicit schema, descriptions, and parameter types. However, several quality issues prevent a higher score: (1) Tool name 'weather' lacks a clear action verb (should be 'get_weather' or 'fetch_weather'); (2) Parameter descriptions include examples ('Saint Petersburg', 'en', 'es', 'zh_CN') which LLMs tend to reuse literally; (3) No output schema is documented, the tool returns templated text with no structured field definitions; (4) Default values for 'units' and 'lang' are present but not explicitly stated as optional in the schema annotations; (5) Error handling is minimal, no guidance for LLM recovery on API failures (invalid city, API key missing, rate limits); (6) No input validation of the 'units' enum is shown (only 'c', 'f', 'k' are valid, but the code does not validate this before calling the API). The tool definition itself is visible and properly registered in main.go, so it is not inferred.
Retrieves current and forecast weather information for a given location.
Tool name lacks action verb. 'weather' does not convey the action. Should be 'get_weather', 'fetch_weather', or 'query_weather' to align with LLM intent inference conventions.
Parameter descriptions embed example values ('Saint Petersburg', 'en', 'es', 'zh_CN') that LLMs often reuse literally in subsequent calls, causing hallucinated values outside valid ranges.
No output schema is documented. The tool returns free-form templated text with no structured field definitions. LLMs cannot reliably extract specific fields (temp, humidity, wind speed) for downstream reasoning.
Enum constraints for 'units' parameter not enforced in parameter definition. Only 'c', 'f', 'k' are valid, but the schema does not declare an enum; LLMs may pass invalid values.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 53 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 44 | - | v1 |
Error handling does not guide LLM recovery. No guidance on what to do if city is not found, API key is missing, or rate limits are hit. Raw error messages provide no actionable next steps.
API key (OWM_API_KEY) passed via environment variable is correct, but no error message documents this dependency. If the key is missing, the user will see a cryptic API error instead of 'OWM_API_KEY environment variable not set'.