MCP server giving AI assistants 17 weather tools with zero API keys: global forecasts, current conditions, alerts, air quality, marine conditions, lightning detection, radar imagery, river levels, wildfire tracking, and historical weather back to 1940. Built entirely on free public APIs (NOAA, Open-Meteo, USGS, NIFC).
Weather MCP demonstrates solid fundamentals: all 17 tools have explicit names, descriptions, and input schemas visible in src/config/tools.ts. Naming is consistent (get_*, save_*, list_*, remove_*) and verb-driven. Descriptions are present and adequate (50 - 150 chars typical), though some lack actionable context about when to use them vs. similar tools. Parameter schemas are well-formed with type annotations and brief descriptions. However, output schemas are not documented in the source, a significant gap for an LLM that must plan downstream calls. Error handling details are absent from the tool definitions. The 'location_name' vs 'city_name' vs 'latitude/longitude' pattern appears across many tools (redundancy issue). No tool annotations (readOnlyHint, destructiveHint, idempotentHint) are visible, missing an opportunity to clarify intent.
Check the status of weather services
Get air quality and pollen data for a location
Get weather alerts and warnings for a location
Get current weather conditions for a location
Get weather forecast for a location
Get historical weather data for a location
Get lightning activity and thunderstorm data for a location
Output schemas not documented. No tool provides structured descriptions of what fields the agent receives back from each call. This forces the LLM to guess what data is available for downstream decisions and chaining.
Redundant location parameters. Tools accept latitude/longitude, location_name, AND city_name. This triple-parameter pattern is confusing: the LLM must reason about which to use, and documentation does not clarify priority or mutual exclusivity. Consider accepting one preferred identifier (e.g., city_name as primary, with a search_location fallback for ambiguous names).
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | C | 65 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 41 | - | v1 |
Get marine and wave conditions for a location
Get river and streamflow conditions for a location
Get details of a saved location
Get weather radar and satellite imagery for a location
Get a comprehensive weather summary for a location
Get wildfire and fire detection data for a location
List all saved locations
Remove a saved location
Save a location for future reference
Search for a location by name and get coordinates
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). The MCP spec defines these fields to clarify tool intent. All 17 tools are missing them. Add readOnlyHint: true to all read-only tools, destructiveHint: true to remove_saved_location, and idempotentHint: true to stateless tools.
Error handling guidance absent. Tool definitions do not describe what errors might occur, what to do if a location is not found, or how to recover from service outages (relevant for check_service_status). Add recovery hints to descriptions.
Pagination and result limits not declared. Tools like search_location and list_saved_locations do not document max result counts or pagination behavior. If these tools can return many results, the LLM may not know to apply limits or expect truncation.