groundhog.markets MCP
An official MCP server providing free, keyless access to global weather forecasts, market rules for Kalshi and Polymarket, and historical data. It aggregates median forecasts from multiple sources like NOAA and ECMWF for over 800 locations, supporting tools for forecasting, market tracking, and data retrieval via Streamable HTTP.
Endpoint and access
No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.
https://groundhog.markets/mcpWhat you can do with it
- Retrieve median daily high and low weather forecasts for specific locations
- Access weather market rules and settlement data for Kalshi and Polymarket
- Query historical weather observations and model runs without look-ahead bias
- Search for places and retrieve source licensing information
Source and maintenance
Protocol and capabilities
- Server
- groundhog 1.2.0
- MCP protocol
- 2025-06-18
- Tools
- 8 advertised
- Resources
- Not advertised
- Resource templates
- Not advertised
- Prompts
- Not advertised
{
"tools": {
"listChanged": false
}
}Server-provided instructions
Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.
Tools
8 advertised
forecast — Forecast blend
Daily high/low for any place from every free forecast: median, spread, rain, current obs and active alerts, with credits and the page URL. line ≈321 tok, week ≈566, table ≈1,567, series ≈1,564. Keep the credits and link the page when you repeat numbers. size=runs: one place, each source's newest runs by day with run_utc and fetched_at; NBM adds XND, P12, Q12. variable=rain: members' share of 0.01 in or more and heavier (n = model families), NBM calibrated, amounts by source, so far today, month to date; rain line ≈647 tok, table ≈1,955.
{
"type": "object",
"required": [
"place"
],
"properties": {
"all": {
"type": "boolean",
"description": "table: also twin and stale rows"
},
"stn": {
"type": "string",
"description": "rain: a settle station of the place, e.g. KORD"
},
"win": {
"enum": [
"lst",
"cal"
],
"type": "string",
"description": "rain: lst = the climate day at a daily-rain settle station, cal = calendar day"
},
"date": {
"type": "string",
"description": "today | tomorrow | +N (0-7) | YYYY-MM-DD, each place's local date. Default: today before 15:00 local, else tomorrow."
},
"days": {
"type": "integer",
"maximum": 7,
"minimum": 1,
"description": "week/table days (default 7)"
},
"runs": {
"type": "integer",
"maximum": 4,
"minimum": 1,
"description": "size=runs: newest runs per source (1)"
},
"size": {
"enum": [
"line",
"week",
"table",
"series",
"runs"
],
"type": "string",
"description": "default line; runs = each source's newest runs by day (trading fields)"
},
"step": {
"enum": [
1,
3,
6
],
"type": "integer",
"description": "series step hours (temp 3, rain 6)"
},
"hours": {
"type": "integer",
"maximum": 168,
"minimum": 24,
"description": "series hours (72)"
},
"place": {
"anyOf": [
{
"type": "string"
},
{
"type": "array",
"items": {
"type": "string"
},
"maxItems": 10,
"minItems": 1
}
],
"description": "Slug, name, 'City, ST', 'City, Country', ICAO or 'lat,lon'. An array (up to 10) for line/week."
},
"units": {
"enum": [
"F",
"C"
],
"type": "string",
"description": "default F in the US, else C; rain in inches with F, mm with C"
},
"format": {
"enum": [
"md",
"tsv",
"json"
],
"type": "string",
"description": "line md, others tsv"
},
"credits": {
"enum": [
"compact",
"full",
"short"
],
"type": "string"
},
"variable": {
"enum": [
"temp",
"rain"
],
"type": "string",
"description": "temp (default) or rain"
},
"include_6h": {
"type": "boolean",
"description": "temp only: also count 6-hourly (~) days"
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}places — Find a place
Find a place slug by name, City, ST, airport code or lat,lon; says full blend or grid only.
{
"type": "object",
"required": [
"q"
],
"properties": {
"q": {
"type": "string"
},
"limit": {
"type": "integer",
"maximum": 10,
"minimum": 1
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}sources — Sources
Open sources groundhog uses: licence, latest run, age, status.
{
"type": "object",
"properties": {},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}markets — Weather markets
Weather markets in a place (Kalshi, Polymarket high/low/rain): settlement station and rule, the number so far under that rule, our value and the official result once settled, forecast daily max/min at the station. No prices. Needs place or family. line ≈526 tok, table ≈1,757; every city ≈36,291. With neither: the list of market cities.
{
"type": "object",
"properties": {
"date": {
"type": "string",
"description": "today | tomorrow | yesterday | YYYY-MM-DD, each place's local date (default today)"
},
"size": {
"enum": [
"line",
"table"
],
"type": "string",
"description": "line (default with place) | table (default without)"
},
"place": {
"anyOf": [
{
"type": "string"
},
{
"type": "array",
"items": {
"type": "string"
},
"maxItems": 10,
"minItems": 1
}
],
"description": "Slug, name, 'City, ST' or ICAO; an array for up to 10 places"
},
"family": {
"enum": [
"high",
"low",
"rain",
"all"
],
"type": "string",
"description": "high | low | rain | all (default all); alone: every market city"
},
"format": {
"enum": [
"md",
"tsv",
"json"
],
"type": "string",
"description": "line md, table tsv"
},
"credits": {
"enum": [
"compact",
"full",
"short"
],
"type": "string"
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}receipts — Market receipts
How often our settle value matched the venue's result, with every miss. No prices.
{
"type": "object",
"properties": {
"days": {
"type": "integer",
"maximum": 30,
"minimum": 1,
"description": "last N days (30)"
},
"venue": {
"enum": [
"kalshi",
"polymarket"
],
"type": "string"
},
"family": {
"enum": [
"high",
"low",
"rain",
"all"
],
"type": "string"
},
"format": {
"enum": [
"md",
"tsv",
"json"
],
"type": "string",
"description": "default tsv"
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}search — Search places
Search places by name, City, ST, airport code or lat,lon. Returns {results: [{id, title, url, text}]}; pass an id to fetch.
{
"type": "object",
"required": [
"query"
],
"properties": {
"query": {
"type": "string"
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}fetch — Fetch a place
The 7-day forecast of a place id from search: {id, title, text, url, metadata}. Keep the credits and link the url when you repeat numbers.
{
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string"
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}history — As-issued history
As-issued history for backtests (no look-ahead): kind=daily (every source's daily hi/lo/rain per run at a place), nbm (NBM text columns: TXN, XND, P12, Q12; view=day = the books' day view) or obs (settlement truth: CLI, routine-METAR max/min). from/to (<= 366 days, 1 unit per 31 days); run=ISO | lead=N (+cycle=H: the run issued N days before) | asof=ISO (what was known then). Rows carry fetched_at and origin (bf:* = backfilled). TSV by default.
{
"type": "object",
"required": [
"from"
],
"properties": {
"to": {
"type": "string",
"description": "last target date (default from)"
},
"els": {
"type": "string",
"description": "kind=nbm: elements, comma list (TXN,XND,P12,Q12,TMP)"
},
"run": {
"type": "string",
"description": "one run, YYYY-MM-DDTHH:MMZ"
},
"stn": {
"type": "string",
"description": "ICAO (kind=nbm, obs)"
},
"asof": {
"type": "string",
"description": "newest run fetched by this UTC time (no look-ahead)"
},
"from": {
"type": "string",
"description": "first target date YYYY-MM-DD"
},
"kind": {
"enum": [
"daily",
"nbm",
"obs"
],
"type": "string",
"description": "daily (default) | nbm | obs"
},
"lead": {
"type": "integer",
"maximum": 15,
"minimum": 0,
"description": "the run issued N UTC days before each date"
},
"prod": {
"enum": [
"nbe",
"nbs"
],
"type": "string",
"description": "kind=nbm: nbe (default) | nbs"
},
"view": {
"enum": [
"raw",
"day"
],
"type": "string",
"description": "kind=nbm: raw (default) | day"
},
"cycle": {
"type": "integer",
"maximum": 23,
"minimum": 0,
"description": "with lead: only runs at H UTC"
},
"place": {
"type": "string",
"description": "slug, name or ICAO (kind=daily; nbm/obs: its station)"
},
"format": {
"enum": [
"tsv",
"json"
],
"type": "string",
"description": "tsv (default) | json"
},
"source": {
"type": "string",
"description": "kind=daily: source ids, comma list (e.g. nbm,gfs,ifs)"
},
"product": {
"enum": [
"CLI",
"METAR_R",
"ASOS"
],
"type": "string",
"description": "kind=obs"
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}Prompts
Not advertised
Resources
Not advertised
30-day availability
Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.
- Successful checks
- 1 of 1 (100%)
- Average latency
- 467 ms
- 95th percentile latency
- 467 ms
Maintenance history
Public check and source-refresh events. Editorial and ownership records remain private.
- · probe · passed · 467 ms · metadata changed · 8 tool(s)
Connect from your client
Each snippet registers the same endpoint; pick the client you use.
Claude Code
claude mcp add --transport http groundhog-markets-mcp https://groundhog.markets/mcpCodex
codex mcp add groundhog-markets-mcp --url https://groundhog.markets/mcpCursor
{
"mcpServers": {
"groundhog-markets-mcp": {
"url": "https://groundhog.markets/mcp"
}
}
}Cline
{
"mcpServers": {
"groundhog-markets-mcp": {
"type": "streamableHttp",
"url": "https://groundhog.markets/mcp",
"disabled": false
}
}
}VS Code
{
"servers": {
"groundhog-markets-mcp": {
"type": "http",
"url": "https://groundhog.markets/mcp"
}
}
}Gemini CLI
gemini mcp add --transport http groundhog-markets-mcp https://groundhog.markets/mcpClaude Desktop
{
"mcpServers": {
"groundhog-markets-mcp": {
"url": "https://groundhog.markets/mcp"
}
}
}Windsurf
{
"mcpServers": {
"groundhog-markets-mcp": {
"serverUrl": "https://groundhog.markets/mcp"
}
}
}Let your agent find its tools
Find servers like groundhog.markets MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.
Other data and analytics servers
Do you run groundhog.markets MCP?
Prove ownership with a DNS record, a well-known file, or your Official MCP Registry entry, and your edits publish immediately. Proofs are re-checked weekly; admins can still hide or remove a listing.