A Model Context Protocol server that provides weather data, forecasts, alerts, and weather-related calculations for specified cities and regions.
Weather MCP has 8 tools with consistent naming (verb_noun pattern: GetCurrentWeather, GetWeatherForecast, etc.) and reasonable descriptions (100-150 chars, within baseline 194 avg). All tools are READ_ONLY and have basic input schemas with type declarations. However, output schemas are completely undocumented, tools return formatted strings rather than structured JSON, forcing LLMs to parse unstructured text. Parameter descriptions are minimal (10-30 chars) and lack constraints (e.g., GetWeatherForecast 'days' parameter has no min/max in schema, only in description). Error handling is present but generic ('❌ Error: ...'). No pagination, no field-level documentation, no guidance on when to use CompareWeather vs calling GetCurrentWeather twice.
Calculate the heat index (apparent temperature) from temperature and humidity values.
Compare current weather conditions between two cities side by side.
Convert temperature between Celsius, Fahrenheit, and Kelvin units.
Get current weather conditions for a specified city. Returns temperature, humidity, pressure, wind conditions, and more.
Get sunrise and sunset times for a specified city.
Get active weather alerts and warnings for a specified region or city.
Get weather forecast for the next 1-5 days for a specified city. Includes high/low temperatures, conditions, and precipitation chances.
No output schemas documented. All tools return formatted strings (e.g., '🌦️ 5-Day Weather Forecast...') instead of structured JSON. LLMs cannot parse unstructured text reliably and waste tokens on string parsing.
Parameter constraints missing from schemas. GetWeatherForecast 'days' parameter has no min/max in JSON Schema (only in description text). LLMs cannot read description text to infer constraints, they need formal schema constraints (minimum, maximum, enum).
Parameter descriptions are too brief (10-30 chars). Baseline is 72 chars. E.g., 'The name of the city' lacks context on format (e.g., 'City name (e.g., New York, London), required, 2-50 characters').
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 60 | <=2025-11-25 | v2 |
Get historical weather data for a city within a specified date range (simulated data for demonstration).
No pagination or result limits documented. GetWeatherHistory returns up to 10 items but cap is hardcoded in code, not declared in schema. Large result sets risk context window exhaustion.
Error messages are generic and non-actionable. E.g., '❌ Error retrieving current weather for {city}: {ex.Message}' does not guide LLM on recovery (retry? call search_cities? invalid input?).