A Spring Boot-based MCP server that provides weather tools via stdio transport
This server has only 2 tools with minimal documentation. Both tools have basic input schemas with types and descriptions, but lack depth in tool-level descriptions. The descriptions are terse (getWeatherForecastByLocation: ~58 chars, getAlerts: ~78 chars) and do not explain WHEN to use each tool, what the output structure is, or how they chain together. No output schemas are documented. Error handling is not visible in the provided code. Parameter descriptions are minimal (latitude, longitude are self-explanatory but lack range/precision hints; 'state' parameter has a good example but no validation guidance). No tool-level composition guidance. Tools follow a reasonable verb_noun pattern but lack production-grade LLM-optimized descriptions. The WeatherService implementation is not fully visible, so output structure and error handling cannot be verified.
Get weather alerts for a US state. Input is Two-letter US state code (e.g. CA, NY)
Get weather forecast for a specific latitude/longitude
No output schemas documented. LLMs cannot infer what fields to expect from tool responses (e.g., does getWeatherForecastByLocation return temperature, precipitation, timestamp, location?). This forces LLMs to reason about unstructured output and breaks downstream tool chaining.
Tool descriptions are under 100 characters and lack actionable context. 'Get weather forecast for a specific latitude/longitude' does not explain WHEN to call this vs getAlerts, what precision is expected for coordinates, or what data is returned. Descriptions should be 50 - 200 chars and explain what, when, and why.
Parameter 'latitude' and 'longitude' lack range/precision constraints. Are valid ranges [-180, 180] and [-90, 90]? What decimal precision is expected? LLMs may pass invalid coordinates without guidance.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 38 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 37 | - | v1 |
Parameter 'state' in getAlerts has a helpful example ('CA, NY') but should be declared as an enum (all 50 US state codes) rather than a free-form string. Enums are self-documenting and prevent hallucinated state codes like 'XX' or 'California'.
No error handling guidance visible. What does the tool return if coordinates are invalid, a network call fails, or no alerts exist for a state? LLMs need to know if errors are retryable or if the call should be adjusted.
No composition guidance. The two tools appear to cover different domains (forecast by location vs alerts by state), but there is no documentation of how they relate, whether they can be chained, or which to call first for common user intents like 'give me weather and alerts for California'.