Updated

For agents

One call per place. Sized for your context. Guide: /llms.txt

line ≈321 tokens, 7 forecastsMET Norway alone 20,159 tokens, 1 forecast

Measured on a fixed NYC example; the live body below can differ.

curl · line
curl "https://groundhog.markets/api/v1/blend?place=new-york-city"
curl · week
curl "https://groundhog.markets/api/v1/blend?place=new-york-city&size=week"
Claude Code
claude mcp add --transport http groundhog https://groundhog.markets/mcp
Cursor · mcp.json
{
  "mcpServers": {
    "groundhog": {
      "url": "https://groundhog.markets/mcp"
    }
  }
}
200 · text/markdown · 570 B · live NYC body
New York City, NY, US (KNYC), Wed 2026-10-28 (tomorrow): high 62.0°F, low 46.0°F; median of 9 forecasts, 5 model groups; highs 60.0–62.4. Rain <2% (n 4: ENS, GEFS, GEPS members' share, raw; NBM calibrated <2%), 0.00 in. Now 52°F at KNYC 01:51Z (maint). Alerts: none. As of 02:03Z. Page: https://groundhog.markets/p/new-york-city. Credits: NOAA/NWS (public domain); MET Norway, DWD, GEFS via dynamical.org, GeoNames (CC BY 4.0); ECCC (Open Licence); based on ECMWF data (CC BY 4.0; ECMWF accepts no liability); modified by groundhog. Full: groundhog.markets/credits

Other clients

ClientSetup
Claude Desktop, claude.aiSettings → Connectors → Add custom connector → https://groundhog.markets/mcp
VS Code · .vscode/mcp.json{"servers":{"groundhog":{"type":"http","url":"https://groundhog.markets/mcp"}}}
Windsurf · mcp_config.json{"mcpServers":{"groundhog":{"serverUrl":"https://groundhog.markets/mcp"}}}
Any MCP clientStreamable HTTP: POST JSON-RPC 2.0 to https://groundhog.markets/mcp, no session. No key.

Sizes

sizeWhatBytesTokensJSON tokens
lineOne day: median high and low, n, groups, highs range, rain, now, alerts, compact credits616 B≈321≈761
weekOne row per day: median, ranges, n, rain, plus alerts and compact credits936 B≈566≈1,931
tableEach source per day, then median, ranges, n, rain, now, alerts, full credits2.9 KB≈1,567≈6,954
series72 h every 3 h: a fixed source set, ENS p10/p90, median, n, full credits2.8 KB≈1,564≈2,175
metnoMET Norway alone: its JSON for 1 place, 1 forecast39.4 KB20,159 (measured)—
rawEvery source yourself: 391 requests, 11 hosts90.9 MB——

Bytes and tokens of the New York City example bodies. Tokens: Claude Opus 5.5 count_tokens. line and week carry one compact credit line; table and series the full lines.

Endpoints

MethodPathReturns
GET/api/v1/blendThe blend at a size (main call)
GET/api/v1/blend?variable=rainRain: members' share of 0.01 in or more and heavier, amounts by source, so far today, month to date
GET/api/v1/blend?size=runsTrading fields: each source's newest runs by day, run_utc, fetched_at; NBM XND, P12, Q12
GET/api/v1/nbm?stn=NBM text columns of one run + the day view
GET/api/v1/historyAs-issued history: daily, nbm, obs; run, lead, asof (no look-ahead)
GET/api/v1/history/filesBulk history files, gzip TSV per day and month
GET/api/v1/places?q=Find a place: slug, name, tier, stations
GET/api/v1/sourcesSources: group, licence, runs, status, credit
GET/api/v1/statusFreshness per source, jobs, version
GET/api/v1/markets?place=Weather markets: station, rule, so far, ours, result. No prices
GET/api/v1/receiptsOur settle value vs the venue's result, last 30 days
GET/api/v1/schema.jsonJSON Schema of every JSON body
GET/api/v1Every endpoint, one line each
GET/openapi.jsonOpenAPI 3.1
GET/mcp/server-cardMCP server card
GET/creditsEvery full credit line, text/plain
POST/mcpMCP, stateless JSON-RPC 2.0
GET/llms.txtAgent guide, under 5 KB
GET/llms-full.txtThe guide plus params, fields, examples, errors
GET/p/new-york-city.mdA place page as Markdown
GET/agents.md, /sources.md, /about.mdThese pages as Markdown
GET/health{"ok":true}, no auth

Params

ParamValuesDefault
placeslug · name · City, ST · ICAO · lat,lon; repeat up to 10× (line, week)required
datetoday · tomorrow · +N (%2BN or N in a URL) · YYYY-MM-DDtoday before 15:00 local, else tomorrow
days1–7line 1 · week, table 7
sizeline · week · table · series · runsline
formatmd · tsv · jsonline md, else tsv
unitsF · C°F in the US, else °C
hours, step24–168 · 1, 3, 6 (series)72 · 3
include_6h0 · 1 (alias alt)0: 6‑hourly max/min left out while ≥ 4 others remain
all0 · 1 (table)0; 1 adds twin and stale rows
creditscompact · full · shortline, week compact; else full
runs1–4 (size=runs)1
variabletemp · raintemp
win, stnlst · cal (rain) · a settle station of the place, e.g. KORDlst at US daily-rain settle stations, else cal · every one (≤ 2)

Any other param → 400 bad_param, with the valid list in the body.

MCP

Streamable HTTP at /mcp. Tool output is the REST body. Errors come back as tool results with isError: true.

ToolArgsReturns
forecastplace (string or array ≤ 10), date?, days?, size?, format?, units?, hours?, step?, include_6h?, credits?The REST body, byte for byte
placesq, limit? (≤ 10)Slugs; full blend or grid only
sources—Licence, latest run, age, status
marketsplace? (string or array ≤ 10), family?, date?, size?, format?, credits?Station, rule, so far, ours, result; no args: the market cities
receiptsdays?, venue?, family?Our value vs the venue's result, every miss
search, fetchquery · idPlaces by name; a place's 7-day forecast
historykind?, place? | stn?, from, to?, source?, run? | lead? + cycle? | asof?, format?As-issued rows with fetched_at and origin
Sent on initialize (284 chars)
Weather for any place: forecast (size=line, week or table; date=today, tomorrow or +N; variable=rain for rain) and markets(place) for each weather market's station, rule and number so far. Units are in every answer. Keep the Credits line and link the Page URL when you repeat numbers.

HTTP

Auth
None: no key. 120 units/min per client (1 per place, 2 per lat,lon).
Limit
120 units/min: 1 per place, 2 per lat,lon or grid-only place. RateLimit-* headers show what is left.
ETag
Weak W/"…"; If-None-Match → 304. Helps polling scripts; LLM fetch tools ignore it.
Cache-Control
private, max-age=60 · gzip over 1 KB
Notes
Delays, partial coverage and resolution notes are in the body, never only in headers.
400 bad_param
Unknown or malformed param. Lists the valid ones.
404 unknown_place
No match. Lists what to try.
422 out_of_range
Date or hours outside the forecast.
429 rate_limited
Over 120 units/min. The retry time is in the body.
503 warming_up
First boot. The retry time is in the body.
503 overloaded
Too many requests in flight. Retry in 5 s.
# error unknown_place: No place 'Nwe York'. Try: new-york-city, newark, york
# error rate_limited: retry in 20 s