A Model Context Protocol server implementation in C# using ASP.NET Core with Server-Sent Events (SSE) transport, providing weather tools via the National Weather Service API.
Two tools with basic descriptions and minimal parameter documentation. GetAlerts and GetForecast have short, action-oriented names and descriptions (18-30 chars), but lack critical details: no output schema documentation, no parameter constraints (e.g., valid state codes, lat/lon ranges), no error handling guidance, and no indication of what fields are returned. Parameter descriptions are present but minimal (10-20 chars). No tool annotations (readOnlyHint, etc.) despite both being read-only. Schemas are inferred from method signatures rather than explicitly documented. This is typical community-grade work, functional but not production-ready.
Get weather alerts for a US state.
Get weather forecast for a location.
No output schema documented. Tools return unstructured strings; LLMs cannot parse fields or chain to downstream tools. GetAlerts returns formatted alert text; GetForecast returns formatted forecast text. No structured JSON response defined.
Parameter constraints missing. GetAlerts accepts any string for 'state' (no enum of valid US state codes). GetForecast accepts any double for latitude/longitude (no range validation: -90 to 90 for lat, -180 to 180 for lon). LLMs will pass invalid values.
No error handling guidance. If API call fails (invalid state, network error, malformed coordinates), no recovery hint provided. LLM receives raw exception or empty result with no actionable next step.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 39 | 2026-07-28+ | v2 |
Tool annotations missing. Both tools are read-only (Risk: READ_ONLY declared), but no readOnlyHint in schema. Agents cannot infer safety from tool definition alone.
Parameter descriptions too brief (10-20 chars). 'The US state to get alerts for' and 'Latitude of the location' lack context: what format? What happens if invalid? Baseline is 72 chars average for A+ tools.