Weather MCP Server that provides weather alerts and forecasts using the National Weather Service (NWS) API
The server defines 2 tools with basic structure, but exhibits significant quality gaps. Tool names follow verb-noun conventions (get-alerts, get-forecast), which is positive. However, descriptions are minimal (14-29 chars, well below the 50-200 char baseline for A+ tools), parameter descriptions are sparse or missing, and there is no documented output schema. Input schemas use Zod validation and include type constraints (lat/lon ranges, state length), which is a bright spot, but the lack of comprehensive parameter guidance and output documentation limits LLM ability to compose these tools effectively. Error handling is present but generic ('Failed to retrieve data'); it does not guide the agent toward recovery strategies. The server lacks tool annotations (readOnlyHint, idempotentHint), which would clarify intent. Overall, this is a functional but below-median implementation.
Get weather alerts for a state
Get weather forecast for a location
Tool descriptions are critically short (14 - 29 characters). Baseline for A+ tools is 50 - 200 chars. Minimal descriptions like 'Get weather alerts for a state' lack context for LLM selection: when should this be called vs. get-forecast? What data structure does it return? What are failure modes?
No output schema is documented. The code returns text-only responses with no explicit typed structure. LLMs cannot plan downstream tool chains or extract structured data (alert IDs, forecast periods as objects) without a formal output schema declaration.
Tool annotations (readOnlyHint, idempotentHint, destructiveHint) are absent. Both tools are read-only and safe to retry, but the code does not declare this. LLMs cannot confidently determine retry safety without explicit hints.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 42 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 45 | - | v1 |
Error messages are generic and not actionable. E.g., 'Failed to retrieve alerts data' does not tell the LLM why it failed (network error, invalid state code, API downtime) or what to do next. No recovery guidance is provided.
get-alerts parameter 'state' description is 39 chars but incomplete. It states format ('Two-letter state code') but does not clarify that only US states are valid, does not list examples or provide disambiguation, and does not explain what happens with invalid input.
get-forecast response formatting is plain text (newline-separated strings). Forecast periods are rendered as multi-line strings, not structured objects. An LLM cannot extract a specific forecast period, its temperature, or its wind data without parsing unstructured text, increasing error likelihood.
No pagination or result-limiting strategy. If alerts returns hundreds of active alerts for a large state, the response balloons and exhausts context. The tool description does not mention any cap or pagination support.