One API. Every weather model.
Every model considered. The right forecast returned.
$ pip install meteorouter · $ npx meteorouter-mcp
One request
Point, area or place. Any variable, any horizon. model: auto does the rest.
# one request, any model · area on your grid curl https://api.meteorouter.com/v1/forecast \ -H "Authorization: Bearer $METEOROUTER_KEY" \ -d '{ "bbox": [13.9, 46.4, 14.7, 46.9], "output_resolution": "5km", "variables": ["t2m", "ghi", "wind10m"], "horizon": "72h", "model": "auto" }'
// claude_desktop_config.json · cursor · any MCP client { "mcpServers": { "meteorouter": { "command": "npx", "args": ["-y", "meteorouter-mcp"], "env": { "METEOROUTER_KEY": "mr_..." } // optional, keyless sandbox without it } } } // exposes one tool get_weather(place | lat,lon | bbox, when, variables?, budget?)
from meteorouter import Client mr = Client() fc = mr.forecast( lat=46.62, lon=14.31, variables=["t2m", "ghi", "wind10m"], horizon="72h", model="auto", # or "ecmwf/aifs", "cheapest", "ensemble" ) fc.to_dataframe()
{
"routed_to": "ecmwf/aifs-single",
"fallbacks": ["dwd/icon-eu", "noaa/gfs"],
"run": "2026-10-18T00Z",
"latency_ms": 212,
"cost_usd": 0.00031,
"data": {
"time": ["2026-10-18T01:00Z", …],
"t2m": [9.4, 9.1, 8.7, …],
"ghi": [0, 0, 0, …, 412, …],
"wind10m": [2.1, 2.4, …]
}
}
01 / Integrate
/v1/describe, /llms.txt, /openapi.json. Learn the whole API in one request.
One tool, get_weather. Forecasts, nowcasts and history.
1 000 point-hours a day without signing up. Keys add volume and paid models.
"place": "Klagenfurt", "when": "tomorrow afternoon". The response echoes what was understood.
Units, source model, confidence, next update and a one-line summary.
Typed JSON with suggested_fix, retry_after and a budget cap per call.
02 / Routing
Every model is scored against observations, daily, per region and lead time. The request goes to the one that is winning.
skill, latency, cost or auto.
Late run or outage, the next ranked model answers. The response says which.
t2m is °C at 2 m, whichever model it came from.
03 / Models
Physics and AI, global and regional. Price per 1 000 point-hours, skill over the last 30 days.
ECMWF's AI forecast. Currently the most routed-to global model on meteorouter.
| Model | Type | Grid | Horizon | Update | Latency | Skill | Price |
|---|---|---|---|---|---|---|---|
| ECMWF IFS (open feed)ecmwf/ifs-open | nwp non-hourly | 0.25° | 240 h | 6 h | 180 ms | 0.90 | $0.40 |
| ECMWF AIFSecmwf/aifs-single | ai | 28 km | 360 h | 6 h | 210 ms | 0.91 | $0.22 |
| ECMWF ENSecmwf/ens | nwp 51 mem | 9 km | 360 h | 6 h | 640 ms | 0.89 | $1.60 |
| NOAA GFSnoaa/gfs | nwp | 13 km | 384 h | 6 h | 150 ms | 0.79 | $0.05 |
| NOAA HRRRnoaa/hrrr | nwp CONUS | 3 km | 48 h | 1 h | 160 ms | 0.86 | $0.12 |
| DWD ICON-EUdwd/icon-eu | nwp Europe | 7 km | 120 h | 3 h | 170 ms | 0.88 | $0.08 |
| DWD ICON-D2dwd/icon-d2 | nwp DACH | 2 km | 48 h | 3 h | 170 ms | 0.89 | $0.10 |
| Météo-France AROMEmeteofrance/arome | nwp France | 1.3 km | 51 h | 3 h | 190 ms | 0.90 | $0.14 |
| UKMO Globalukmo/global | nwp | 10 km | 168 h | 6 h | 200 ms | 0.85 | $0.30 |
| GraphCastgoogle/graphcast | ai | 28 km | 240 h | 6 h | 190 ms | 0.84 | $0.06 |
| GenCastgoogle/gencast | ai 50 mem | 28 km | 360 h | 12 h | 420 ms | 0.90 | $0.45 |
| FourCastNetnvidia/fourcastnet | ai | 28 km | 240 h | 6 h | 160 ms | 0.80 | $0.04 |
| Auroramicrosoft/aurora | ai | 11 km | 240 h | 6 h | 230 ms | 0.87 | $0.12 |
| FuXifudan/fuxi | ai | 28 km | 360 h | 6 h | 200 ms | 0.83 | $0.05 |
| Satellite nowcastmeteorouter/sat-nowcast | nowcast Europe | 3 km | 6 h | 15 min | 120 ms | 0.93 | $0.18 |
| Blend ensemblemeteorouter/blend | blend | native | 360 h | 1 h | 350 ms | 0.94 | $0.35 |
Skill = 1 − normalized RMSE vs observations, rolling 30 d, all regions. Per-region and per-variable scores are in the model page.
04 / Modes
model takes a provider ID or one of these.
Best balance of skill, latency and cost. The default.
Most accurate here, now. Price ignored.
Fastest healthy provider.
Cheapest model above a skill bar you set.
Top models blended, with spread.
05 / Pricing
You pay for what you ask for, not for what the model computes.
One location, one variable, one output hour = 1 point-hour, whatever grid the model runs on.
Billed on the output_resolution you choose, 1 km to 0.25°, whichever model answered.
Billed on the output hours you ask for, not the model's native step.
06 / Principles
Every model that exists and every model that ships next, behind one endpoint you never replace.
New models are added the week they ship, scored, and routed to when they win.
Model IDs are the providers’ own names. Leave any time.
Every response says which model answered, why, and what it cost.
Skill is measured against stations and satellites, never against another model.
Interpolated to your point, never to a coarser common grid.
v1 never changes shape. Fields are added, never removed.