A weather MCP server that provides weather alerts and forecasts using the National Weather Service API
Server provides 2 well-named tools with good descriptions and basic input schemas. Both tools follow verb_noun naming conventions (get_alerts, get_forecast) which is excellent for LLM clarity. Descriptions are present and adequate (70-80 chars each), meeting the 10-1024 char baseline. However, schemas lack critical details: no enum constraints on state parameter, no min/max bounds on latitude/longitude, and output schemas are completely undocumented. Error handling exists but is generic (returns 'Unable to fetch...' without recovery guidance). The tools are simple READ_ONLY operations with async httpx calls, showing competent implementation, but lack the structured output documentation and parameter constraints that production-grade tools require.
Get weather alerts for a US state.
Get weather forecast for a location.
Input schemas lack constraints on numeric and string parameters. State parameter accepts any string instead of enum of valid US state codes (AL, AK, AZ, ... WY). Latitude/longitude have no min/max bounds (should be -90 to 90 and -180 to 180 respectively).
Output schemas are completely undocumented. Both tools return free-text strings rather than structured objects. LLMs cannot determine what fields to parse, limiting downstream tool composition and forcing string parsing instead of direct field access.
Error handling is generic and non-actionable. Responses like 'Unable to fetch alerts or no alerts found' and 'Unable to fetch forecast data' provide no recovery guidance. Per pattern:recovery-guide, errors must tell the LLM what to do next (e.g., 'Invalid coordinates provided. Ensure latitude is -90 to 90, longitude is -180 to 180').
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 53 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 44 | - | v1 |
Parameter descriptions lack format/constraint details. The state parameter description says 'Two-letter US state code (e.g. CA, NY)' but does not enforce uppercase or provide the full enum list. Latitude/longitude descriptions lack range specifications.
No validation of inputs inside tool handlers. LLMs can pass invalid state codes, out-of-range coordinates, or malformed values. Tools should validate early and return clear error messages identifying the constraint violated.