Skip to main content
Glama
README.md
# Weather MCP

MCP server with 12 weather tools — conditions, forecasts, alerts, NWP model imagery, NEXRAD radar, and 205 meteorological calculations. Built for Claude Code.

Data tools work immediately with just `requests`. Image rendering and calculations use optional Rust-backed packages for professional-grade output.

## Quick Start

```bash
git clone https://github.com/FahrenheitResearch/weather-mcp
cd weather-mcp
pip install requests mcp
```

Add to your Claude Code MCP config (`~/.claude/settings.json`):

```json
{
  "mcpServers": {
    "weather": {
      "command": "python",
      "args": ["/full/path/to/weather-mcp/server.py"]
    }
  }
}
```

Restart Claude Code. You now have 7 weather data tools available immediately.

## Tools

### Data (Python — always available)
| Tool | What it does |
|------|-------------|
| `wx_conditions` | Current obs: temperature, wind, sky, dewpoint |
| `wx_forecast` | NWS 7-day or hourly forecast |
| `wx_alerts` | Active warnings/watches with **GeoJSON polygons** for map overlays |
| `wx_metar` | Raw/decoded METAR for any ICAO station |
| `wx_brief` | Conditions + forecast + alerts in one call |
| `wx_global` | Non-US locations via Open-Meteo |
| `wx_severe` | SPC Day 1 outlook + active watches |

### Images (Rust — optional)
| Tool | What it does |
|------|-------------|
| `wx_model_image` | NWP field rendered as PNG — 22+ products, 3 models, batch support |
| `wx_radar_image` | NEXRAD Level 2 reflectivity (1024px, 200km, dark background) |
| `wx_storm_image` | Radar with storm cell analysis |

### Calculations (Rust — optional)
| Tool | What it does |
|------|-------------|
| `wx_calc` | Any of 205 meteorological functions (dewpoint, CAPE, LCL, Fosberg FWI, etc.) |
| `wx_sounding` | Model sounding at a point — 40 levels + all derived parameters |

## Optional: Image & Calculation Packages

```bash
# Model imagery + soundings
pip install metrust cfrust rusbie rustweather

# Radar (build from source)
cd /path/to/rustdar
cargo build --release --bin radar-render
# Set path if not at ~/rustdar/
export RADAR_RENDER_PATH=/path/to/radar-render
```

## What Can I Build With This?

Just tell Claude Code what you want. Examples:

- **"Build me a fire weather dashboard with Red Flag Warning overlays"** — Claude Code will use `wx_alerts(event_type="Red Flag Warning")` and overlay the GeoJSON polygons on your map
- **"Show me the HRRR CAPE forecast for Oklahoma"** — `wx_model_image(var="cape", lat=35.5, lon=-97.5, radius_km=300)`
- **"Calculate the Fosberg Fire Weather Index for 95°F, 8% RH, 25 mph wind"** — `wx_calc(function="fosberg_fire_weather_index", ...)`
- **"What's the severe weather outlook?"** — `wx_severe()`
- **"Build a weather app with current conditions and radar"** — Claude Code chains `wx_conditions` + `wx_radar_image`

## Credits

- **Color tables**: [Solarpower07](https://github.com/Solarpower07)
- **Meteorological calculations**: metrust — 205 functions verified against MetPy
- **GRIB decoding**: cfrust (pure Rust, replaces eccodes)
- **NWP downloads**: rusbie (byte-range .idx filtering)