MCP server that provides weather forecast and alert data using the National Weather Service API
Two tools with basic verb-noun naming (get_forecast, get_alerts). Both have short descriptions (34-40 chars, below the 50-200 char baseline for LLM-optimized descriptions). get_forecast has a complete input schema with typed float parameters and descriptions; get_alerts has a string parameter with description. However, neither tool documents output schema, critical for LLM planning. No error handling guidance, no pagination support despite potential for large result sets, no structured output format specified. get_alerts implementation is incomplete (pass statement). No tool annotations (readOnlyHint, etc.) despite both being READ_ONLY. Descriptions lack context on when to use each tool or what data structure is returned.
Get weather alerts for a given area.
Get the weather forecast for a given location.
No output schema documented for either tool. LLMs cannot plan downstream calls or extract structured data without knowing return type (e.g., is forecast a string, object with periods array, or something else?).
Descriptions are 34-40 characters, below the 50-200 char baseline for LLM-optimized descriptions. 'Get the weather forecast for a given location' lacks context on when to use this vs get_alerts, what data is returned, or prerequisites.
get_alerts implementation is incomplete (pass statement). Tool is non-functional and will return None to LLM, breaking agent workflows.
No error handling guidance. get_forecast returns raw HTTP status errors ('Error: Unable to get forecast data (Status: 200)') without actionable recovery steps. LLM cannot determine if error is retryable or user-fixable.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 51 | <=2025-11-25 | v2 |
No tool annotations despite both tools being READ_ONLY. Missing readOnlyHint annotation prevents LLM from optimizing caching and retry logic.