An MCP server that provides weather alerts and forecast data from the National Weather Service (NWS) API
Two tools with basic schemas and descriptions, but significant gaps in parameter documentation and output structure. Both tools have descriptions (10-20 chars baseline met), and input schemas are present with Zod validation. However, parameter descriptions lack detail on constraints, error handling is minimal, and output schemas are not formally documented. No tool annotations (readOnlyHint, idempotentHint). Error responses are generic text without recovery guidance. Naming is clear (verb_noun pattern: get-alerts, get-forecast) but descriptions are terse. No pagination, no structured output documentation.
Get weather alerts for a state
Get weather forecast for a location
Parameter descriptions lack constraint details. 'state' param describes format (2-letter code) but does not explain validation or error cases. 'latitude'/'longitude' have min/max in schema but descriptions do not mention coordinate system, precision, or US-only limitation.
Output schemas are not documented. Tools return text content in unstructured format. LLMs cannot parse structured fields (e.g., alert severity, forecast temperature) for downstream reasoning or chaining. No documented return type schema.
Error handling is generic and non-actionable. Failures return plain text ('Failed to retrieve alerts data') without recovery guidance. LLM cannot determine if error is retryable, user-fixable, or fatal. No error classification or next-step hints.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 46 | 2026-07-28+ | v2 |
Tool descriptions are under 50 characters and lack context. 'Get weather alerts for a state' does not explain when to use this vs forecast, what data is returned, or prerequisites. Descriptions should be 50-200 chars with WHAT/WHEN/WHY guidance.
No tool annotations (readOnlyHint, idempotentHint). Both tools are read-only and idempotent, but this is not declared in the tool definition. LLMs cannot infer safety properties and may avoid retrying on transient failures.