Weather MCP Server

Give your AI assistant real weather data โ 17 tools, zero API keys, zero signup, zero cost.
Weather MCP is a Model Context Protocol server that connects AI assistants (Claude, Cursor, Cline, Zed, and any other MCP client) to live weather data: forecasts, current conditions, alerts, air quality, marine conditions, lightning, radar, rivers, wildfires, and 85+ years of historical weather. It's built entirely on free public data sources โ NOAA, Open-Meteo, MET Norway, USGS, NIFC, NASA FIRMS, RainViewer, and Blitzortung.org โ so there is nothing to sign up for and no key to paste in. (A few optional keys unlock extras โ see Optional API keys โ but no tool ever requires one.)
claude mcp add weather -- npx -y @dangahagan/weather-mcp@latest
That's the whole install for Claude Code. For any other MCP client, add this to its MCP config:
{
"mcpServers": {
"weather": {
"command": "npx",
"args": ["-y", "@dangahagan/weather-mcp@latest"]
}
}
}
Then just ask:
"What's the weather in Tokyo this weekend?"
"Is there any lightning near the lake right now?"
"How does today compare to normal for this time of year?"
"Are there wildfires within 50 miles of my cabin?"
"Will there be a full moon this weekend?"
"Is this a record high for today?"
"How bad is the pollen in Berlin today?"
"What was the weather in Paris on June 6, 1944?"
๐ See it in action โ real prompts like these with the answers they produced, and the raw server output behind them.
๐ฆ Listed in the Official MCP Registry as io.github.dgahagan/weather-mcp.
โ
The official package is @dangahagan/weather-mcp, published from this repository via npm trusted publishing. Every release carries a signed provenance attestation tying the tarball to the exact commit and workflow that built it โ verify any version without installing it:
npm view @dangahagan/weather-mcp@latest dist.attestations
Republished copies of this server exist under other npm scopes. They are MIT-licensed forks, which the license permits, but they are not maintained here and are usually many versions behind. This issue tracker covers @dangahagan/weather-mcp only โ for anything installed from another scope, please report it to that package's publisher.
Why this server?
There are excellent commercial weather MCPs backed by paid APIs and full-time teams. If you need SLA-backed data, minute-level nowcasting, or premium global station coverage, they're worth a look โ this project won't pretend otherwise.
Choose this one if you want:
- Genuinely free โ every data source is a free public API. No trial that expires, no credit card, no rate-limited "free tier" bait.
- No API keys โ install to first forecast in under a minute. Nothing to configure, nothing to leak into a repo. (Four optional keys add extras if you want them; the default configuration needs none.)
- Fully open source โ MIT licensed, readable TypeScript, 4,656 tests. Audit it, fork it, fix it.
- Privacy-respecting โ your queries go directly from your machine to public weather APIs. No middleman server, and no telemetry unless you opt in.
- Breadth โ 17 tools covering weather, safety hazards (lightning, floods, wildfires), marine conditions, air quality, and historical data back to 1940. Most weather MCPs stop at forecasts.
The tradeoff is honest: US data (NOAA) is richer than international data (Open-Meteo), some tools are US-only, and free APIs come with fair-use rate limits. See Coverage & Limitations.
Tools
All 17 tools, documented in detail in docs/TOOLS.md:
| Tool | What it does | Coverage |
|---|
get_forecast | Daily/hourly forecasts up to 16 days by coordinates, saved location, or city name, plus a 2-hour, 15-minute precipitation nowcast in North America and Central Europe (granularity="minutely") (NOAA publishes 7 days daily and ~6.5 days hourly in the US, and says so when you ask for more; source="openmeteo" reaches the full range); sunrise/sunset, UV, precipitation probability, optional climate-normals comparison, optional moon phase & twilight almanac, optional five-model agreement comparison When the National Weather Service has a life-threatening alert active for a point in the United States or an NWS-served territory, its warning is surfaced at the top of the response before the report โ absence of the banner is not an all-clear, so call get_alerts for the authoritative answer | ๐ Global |
get_current_conditions | Current weather: temperature, wind, humidity, pressure; NOAA station observations in the US (plus heat index/wind chill, snow depth, optional NOAA fire-weather indices), Open-Meteo model data elsewhere (with an optional computed Fosberg fire-weather index), or real airport station observations worldwide with source="metar" (the optional Fosberg index is then computed from the station's own observation). Always states the observation's age, and automatically falls back to a fresher nearby station when the nearest one has gone dark. In extreme conditions automatically adds frostbite time-to-onset (computed wind chill) or heat-stress context (estimated WBGT) When the National Weather Service has a life-threatening alert active for a point in the United States or an NWS-served territory, its warning is surfaced at the top of the response before the report โ absence of the banner is not an all-clear, so call get_alerts for the authoritative answer | ๐ Global |
get_alerts | Active watches, warnings, and advisories sorted by severity; official national warnings for the US (NOAA), Canada (ECCC), 38 European countries (MeteoAlarm), India (NDMA SACHET), the Philippines (PAGASA), Indonesia (BMKG), and Japan (JMA) | ๐บ๐ธ ๐จ๐ฆ ๐ช๐บ ๐ฎ๐ณ ๐ต๐ญ ๐ฎ๐ฉ ๐ฏ๐ต |
get_historical_weather | Hourly/daily observations from 1940 to present | ๐ Global |
get_weather_summary | One-call overview combining current conditions, forecast, and alerts (optionally air quality and lightning); a life-threatening NWS alert is surfaced once above the whole summary, not once per section | ๐ Global |
search_location | Geocode place names to coordinates ("Paris" โ 48.85, 2.35) | ๐ Global |
get_air_quality | AQI (US/European scales), pollutants, UV index, health guidance; current pollen levels for European locations (or worldwide with an optional key); optional day-grouped forecast up to 7 days with per-day peak AQI and UV | ๐ Global |
get_marine_conditions | Wave height, swell, ocean currents, sea state on WMO Code Table 3700 (Douglas sea scale) with a severity marker and legend โ includes Great Lakes and major US bays; forecast up to 16 days | ๐ Global |
get_weather_imagery | Precipitation radar (static or 2-hour animated loops) + GOES satellite imagery; composite: true returns a finished radar map over a base map as an image | ๐ Global |
get_lightning_activity | Real-time strike detection with 4-level proximity safety assessment | ๐ Global |
get_river_conditions | US: NWPS gauge levels, flood stages, streamflow, rise/fall trends, forecast series. Great Britain: Environment Agency observed river levels against each gauge's published typical range. Elsewhere: GloFAS modeled discharge snapped to the nearest river channel, with ensemble forecast | ๐ Global |
get_wildfire_info | US: named incidents with containment, size, and safety guidance from the nearest uncontained fire. Elsewhere: NASA FIRMS satellite heat detections (VIIRS, near real-time), clustered with distance, bearing, and intensity | ๐ Global |
check_service_status | Checks that NOAA and Open-Meteo are reachable, lists the upstreams it does not check, plus cache statistics | โ |
save_location | Save places as aliases ("home", "cabin") with optional activity tags | โ |
list_saved_locations | List all saved locations | โ |
get_saved_location | Details for one saved location | โ |
remove_saved_location | Delete a saved location | โ |
Default preset: with no configuration, the server exposes the basic preset โ get_weather_summary (one call covers most "what's the weather?" questions), plus forecast, current_conditions, alerts, search_location, and check_service_status. Enable everything with one environment variable โ see Tool Selection.
Consistent location input: every location-based tool accepts the same three forms โ latitude+longitude, a saved location_name (e.g. "home"), or a free-text city_name (e.g. "Bend, Oregon", geocoded automatically). When a name is used, the response echoes the resolved place and coordinates.