A weather MCP server that provides weather alerts and forecasts using the National Weather Service API
Two tools with clear verb-noun naming (get-alerts, get-forecast) and documented input schemas using Zod. Descriptions are present but minimal (10-40 chars). Parameters have type constraints (length, min/max) and descriptions. Output is unstructured text rather than typed objects. No error recovery guidance, no pagination support, no output schema documentation. Schemas are visible and properly constrained, but descriptions lack context on WHEN to use each tool or what the LLM should do with results.
Get weather alerts for a state
Get weather forecast for a location
Descriptions are too brief (10-40 chars). 'Get weather alerts for a state' lacks context on when to use this vs forecast, what the output contains, or what the LLM should do with results. Baseline for A+ tools is 50-200 chars with WHEN/WHY guidance.
Output is unstructured text (single 'text' field). LLMs cannot extract structured data (alert severity, forecast temperature as numbers) for downstream reasoning or chaining. Should return typed objects with fields like alerts: [{event, severity, headline}] and forecast: [{period, temperature, windSpeed}].
No error recovery guidance. When NWS API fails (e.g. 'Failed to retrieve alerts data'), the response gives no hint what the LLM should do next: retry? Try a different state? Ask the user? Errors should guide recovery.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 48 | 2026-07-28+ | v2 |
No output schema documentation. LLMs cannot plan downstream operations or extract fields without knowing the response structure. Document: get-alerts returns {content: [{type: 'text', text: string}]}, get-forecast returns same. Better: return typed objects.
No pagination or result limits. If a state has 100+ active alerts, all are returned as one text blob, wasting tokens and degrading LLM reasoning. Should support limit/offset and return structured list with count.