An MCP server that provides weather alerts and forecasts for US locations using the National Weather Service API
Two tools with basic descriptions and minimal schema documentation. Tool names follow verb_noun convention (get_alerts, get_forecast), which is correct. However, descriptions are present but lack depth regarding when to use each tool and what makes them distinct. Input schemas are visible with type definitions (string, float) and basic parameter descriptions, but output schemas are completely undocumented, the tools return plain strings rather than structured objects, forcing LLMs to parse unstructured text. No error recovery guidance, no pagination support despite potentially large result sets, and no indication of what fields are returned or how to chain these tools with others. Parameter descriptions are minimal (10-30 chars), below the 72-char baseline for A+ tools. The server implements basic functionality but lacks production-grade documentation and structure.
Get weather alerts for a US state.
Get weather forecast for a location.
Output schemas completely undocumented. Tools return unstructured strings instead of structured JSON objects. LLMs must parse plain text to extract alert details, forecast periods, and related data, wasting tokens and increasing hallucination risk.
Tool descriptions are too brief (25-30 characters) and lack context for selection. No explanation of when to use get_alerts vs get_forecast, what makes them distinct, or what scenarios each solves. Descriptions should be 50-200 chars and answer WHAT, WHEN, and WHY.
No error recovery guidance. Code catches all exceptions and returns generic 'Unable to fetch...' messages. No indication of retryable vs fatal errors, no suggestions for next steps (e.g., 'Check state code format' or 'Verify coordinates are valid').
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 54 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 33 | - | v1 |
No input validation or constraint documentation. get_alerts accepts 'state' as any string with no validation that it is a valid 2-letter US code. get_forecast accepts any float for latitude/longitude with no range constraints documented.
Results are not paginated. get_alerts may return hundreds of alerts for large states but offers no limit or pagination. Returning all results wastes context window tokens and degrades LLM reasoning.
Parameter descriptions are extremely short (10-30 chars). 'Two-letter US state code (e.g. CA, NY)' is better, but still falls short of the 72-char baseline for A+ tools. Example values in descriptions risk LLM literal reuse.