Weather for agents.

Weather MCP is a free public MCP server: 12 weather models queried side by side, with formally verified statistics across them — spread, agreement, percentiles. Uncertainty as data, not vibes.

Endpoint

https://weather.sillsengineering.com/mcp
free no auth no API key 2 tools 12 models 19 variables

Connect

claude mcp add --transport http weather https://weather.sillsengineering.com/mcp

claude.ai & Claude Desktop: Settings → Connectors → Add custom connector → paste the URL. Any other MCP client: streamable HTTP, no auth fields.

Two tools: describe (the catalog of models and variables) and query (the data — raw series or server-side reductions across models, time, or ensemble members). Connect and call describe; agents can read the full contract at /llms.txt.

See it work

“I’m racing at Arenal Bay tomorrow afternoon. Will the sea breeze fill in — and how confident should I be?”

The agent calls query once, asking four independent models the same question:

{
  "models": ["gfs_global", "icon_global",
             "ecmwf_ifs025", "meteofrance_arome_france_hd"],
  "variables": ["wind_speed_10m"],
  "location": { "lat": 39.50, "lon": 2.75 },
  "time": { "start": "2026-07-24", "end": "2026-07-24" },
  "wind_speed_unit": "kn",
  "timezone": "Europe/Madrid",
  "reduce": { "op": "spread", "over": "model" }
}

What comes back — and why the shape of it matters:

GFS ICON ECMWF IFS AROME HD
Wind speed at 10 m from four weather models, Arenal Bay, 24 July 2026 Four model forecasts track within one knot of each other through the morning, then diverge sharply after midday: at 11:00 the spread between highest and lowest model is 1.0 knots, and by 13:00 it is 5.8 knots, with GFS at 11.7 knots and ICON at 5.9 knots. 0 3 6 9 12 knots 11:00 · within 1.0 kn 13:00 · 5.8 kn apart AROME ECMWF ICON GFS 06 08 10 12 14 16 18 20 22 cross-model agreement — 0 = models disagree, 1 = locked together
Wind at 10 m, Arenal Bay (39.50, 2.75), 06:00–22:00 local, 24 July 2026 — a real response from the endpoint above, not a mock-up. The shaded band is the gap between the highest and lowest model at each hour; the two bright bars are that gap at 11:00 and 13:00.
show the numbers
localGFSICONECMWFAROMEspreadagreement
06:002.42.94.11.92.20.56
07:000.43.13.62.53.20.36
08:000.41.92.72.42.30.54
09:001.01.81.62.71.70.66
10:002.33.62.53.71.40.72
11:005.44.84.45.21.00.80
12:009.64.65.77.35.00.00
13:0011.75.96.88.55.80.00
14:0010.27.27.810.83.60.28
15:0012.07.18.611.14.90.02
16:0011.57.89.010.63.70.26
17:0011.37.59.08.03.80.24
18:0011.27.98.47.43.80.24
19:009.17.07.46.62.50.50
20:007.56.46.69.02.60.48
21:005.75.86.23.52.70.46
22:004.75.56.57.22.50.50

The answer the agent can now give:

“The sea breeze does fill in, but the models split exactly when it matters. All morning they sit within 1.0 kn of each other. By 13:00 they’re 5.8 kn apart — GFS says 11.7 kn, ICON says 5.9 kn, with ECMWF and AROME in between; agreement falls from 0.80 to 0.00. So: plan for 6–12 kn after midday and rig for the light end, then recheck once the next run lands. This is a real disagreement about sea-breeze timing, not noise.”

A single-answer weather API would have averaged those four models to “about 9 knots” and told you nothing about the part that decides your afternoon. The spread is the signal — and the reductions computing it (spread, agreement, median, p10/p90) are formally verified with Kani, so agreement is proven to land in 0–1 for every possible input, not just the ones someone tested.