open-meteo-mcp-server
Geocode places, fetch global weather forecasts, historical climate, marine conditions, air quality, and terrain elevation via MCP. STDIO or Streamable HTTP.
Install / Use
claude mcp add cyanheads -- npx -y github:cyanheads/open-meteo-mcp-serverIf the server publishes to npm under a different name, use that package instead — check the repo README.
MCP Server
Model Context Protocol server
Quality Score
Category
MarketingSupported Platforms
Tags
Our assessment of open-meteo-mcp-server
open-meteo-mcp-server scores 84/100 on our quality scale, 430th of 559 Marketing skills we index.
Its MCP Server is 18 KB long, well organised into 31 sections with 10 code examples: a thorough specification that gives an agent plenty to work with.
It has 10 GitHub stars, so there is little community track record yet; judge it on its content.
Maintenance, license and trust
- The repository was last updated yesterday, so open-meteo-mcp-server is actively maintained.
- It is released under the Apache-2.0 license, a permissive license that allows use, modification and commercial use with attribution.
- Its trust signals score 97/100, with no cautions. These come from repository metadata, not a code audit — read the skill file before letting an agent act on it.
open-meteo-mcp-server compared with similar skills
All 4 of these similar skills score higher than open-meteo-mcp-server; compare them before choosing.
| Skill | Score | Stars | Updated | Format |
|---|---|---|---|---|
| open-meteo-mcp-server (this skill)by cyanheads | 84 | 10 | 1d ago | MCP Server |
| Agent-Reachby Panniantong | 100 | 99.4k | 4d ago | CLAUDE.md |
| headroomby headroomlabs-ai | 100 | 76.0k | 1d ago | CLAUDE.md |
| CowAgentby zhayujie | 100 | 47.5k | today | CLAUDE.md |
| Scraplingby D4Vinci | 100 | 88.6k | today | MCP Server |
Frequently asked questions
- How do I install open-meteo-mcp-server?
- Run
claude mcp add cyanheads -- npx -y github:cyanheads/open-meteo-mcp-server. The install tabs above show the steps for each supported agent. - Which AI agents does open-meteo-mcp-server work with?
- It is written for Claude Code and Claude Desktop, as a MCP Server file. Other agents that read the same format can often use it too.
- Is open-meteo-mcp-server safe to use?
- It is Apache-2.0-licensed and scores 97/100 on trust signals. Skills are instructions an agent will follow, so read the file before installing it and do not approve commands you do not understand.
- Is open-meteo-mcp-server still maintained?
- The repository was last updated yesterday, so open-meteo-mcp-server is actively maintained.
Skill content
View source on GitHubPublic Hosted Server: https://open-meteo.caseyjhand.com/mcp
</div>Overview
Global weather from Open-Meteo: forecasts, history back to 1940, marine conditions, air quality, probabilistic ensembles, river discharge, and climate projections. Look up any place by name, pull hourly and daily variables, and run SQL over large results. No API key required.
Tools
| Tool | Description |
|:---|:---|
| openmeteo_search_locations | Resolve a place name to ranked coordinates with country, region, timezone, and population |
| openmeteo_get_forecast | Current conditions and hourly/daily forecast up to 16 days, with up to 92 past days |
| openmeteo_get_historical | Hourly/daily history from the reanalysis archive, 1940 to present |
| openmeteo_get_marine | Wave, swell, and sea-surface conditions: up to 8 forecast days or an archive range |
| openmeteo_get_air_quality | Modeled CAMS pollutants, pollen, and AQI: current, up to 7 forecast days, or an archive range |
| openmeteo_get_elevation | Copernicus DEM terrain elevation for up to 100 coordinate pairs |
| openmeteo_get_ensemble | Per-member ensemble forecast (up to 64 members, up to 35 days) for exceedance and uncertainty |
| openmeteo_get_flood | GloFAS river discharge forecast (up to 210 days) or reanalysis from 1984 |
| openmeteo_get_climate | Bias-corrected daily CMIP6 projections, 1950–2050, across up to 7 models |
| openmeteo_dataframe_describe | List the tables and columns staged on a DataCanvas |
| openmeteo_dataframe_query | Run a read-only SQL SELECT against staged tables |
| openmeteo_dataframe_drop | Remove one staged table or view from a DataCanvas (opt-in) |
Capability reference
openmeteo_search_locations <sub>tool</sub>
- A bare place
name("Paris", not "Paris, France"), with optionalcountry(ISO 3166-1 alpha-2) andlanguage(defaulten);count1–10, default 5 - Each result carries coordinates, an IANA
timezone,country/country_code,admin1/admin2,population, andfeature_code; no match fails asno_results - A
noticeflags a top match with null or sub-100,000 population, which often means a historic exonym ("Bangalore", "Calcutta") - A native-script query that misses under
enis retried once in the language its script implies;effective_languagenames it when the retry succeeds (上海→zh), and results come back localized
openmeteo_get_forecast <sub>tool</sub>
- At least one of
current_variables,hourly_variables, ordaily_variables(up to 50 each);forecast_days1–16 (default 7),past_days0–92 (default 0) - Per-timestamp
hourly/dailyrecords withhourly_units/daily_units;current_variablesadds acurrentobject from 15-minute data (interval900) pluscurrent_units - Prefer
past_daysoveropenmeteo_get_historicalfor the last ~5 days, where the archive's ERA5 components lag
openmeteo_get_historical <sub>tool</sub>
start_dateandend_daterequired (YYYY-MM-DD, from 1940-01-01), plus at least one ofhourly_variables/daily_variables, named as on the forecast tool- Omitting
modelsreads Best Match (IFS HRES + ERA5 + ERA5-Land, source varies by date); up to 8modelspin a source. The ERA5 family runs ~5 days behind,ecmwf_ifshas no delay, andcerracovers Europe only - Output echoes
modelsand the returneddate_range; with 2+ models each column carries a model-name suffix
openmeteo_get_marine <sub>tool</sub>
- One window per call:
forecast_days1–8 (upstream default 7) withpast_days0–92, or astart_date/end_datearchive range back to at least 2022. Mixing them fails asforecast_window_conflict, a lone date asdate_range_incomplete - At least one of
hourly_variables/daily_variables(wave height, period, and direction, swell, sea-surface temperature); sheltered water returns near-zero waves, a land point returns nulls (named in thenotice), andocean_current_velocityis null off the open ocean
openmeteo_get_air_quality <sub>tool</sub>
- One window per call:
forecast_days1–7 (upstream default 5) withpast_days0–92, or astart_date/end_datearchive range from August 2022 (us_aqistarts a day later). Sameforecast_window_conflictanddate_range_incompleterejections as the marine tool - At least one of
current_variables(acurrentobject,interval3600) orhourly_variables: PM2.5, PM10, NO2, SO2, O3, CO, dust, pollen, European and US AQI. Pollen is modeled for Europe only, in pollen season; elsewhere it comes back null and thenoticenames it data_source: "CAMS"marks every response as modeled grid data, not station measurements
openmeteo_get_elevation <sub>tool</sub>
- Parallel
latitudes[]/longitudes[]arrays of up to 100 pairs; unequal lengths fail ascoordinate_count_mismatch elevations[]in input order, each{ latitude, longitude, elevation_m }from the Copernicus DEM (~90 m);elevation_misnullwhere the DEM has no value (latitude 90), without failing the rest of the call
openmeteo_get_ensemble <sub>tool</sub>
- At least one of
hourly_variables/daily_variables;forecast_days1–35 (default 7),past_days0–92. Most models end within 16 days (ncep_gefs05runs to about day 34); past that, columns are null and thenoticesays where data ends modelstakes one ensemble name (e.g.ecmwf_ifs025_ensemble, 51 members;gem_global_ensemble, 21); omitted or blank selectsecmwf_ifs025_ensemble, echoed inmodel- Each variable returns per-member columns (
temperature_2m_member01, …) across up to 64 members;member_countexcludes the control run. A regional model queried outside its coverage fails as a non-retryable input error; switch to a global model
openmeteo_get_flood <sub>tool</sub>
daily_variablesrequired (up to 20), all in m³/s:river_dischargeplus the statisticsriver_discharge_mean/_median/_min/_max/_p25/_p75, which carry spread in forecast mode only (in reanalysis they repeatriver_discharge)- One mode per call:
forecast_days1–210, or astart_date/end_datereanalysis range from 1984-01-01. Mixing them fails asforecast_days_conflict, a lone date asdate_range_incomplete - Discharge comes from the largest modeled river within 5 km, not always the closest; vary the coordinate by ~0.1° when a value looks off. Null outside GloFAS coverage
openmeteo_get_climate <sub>tool</sub>
start_date/end_datewithin 1950-01-01 to 2050-12-31 anddaily_variablesrequired (the API is daily-only); up to 7 CMIP6models, e.g.CMCC_CM2_VHR4,MRI_AGCM3_2_S- With 2+ models each variable is suffixed with the model name; a single or omitted model returns plain names. A variable a model doesn't carry comes back null
openmeteo_dataframe_describe <sub>tool</sub>
- Takes the
canvas_ida spilled weather tool returned; lists each table'sname,kind,row_count, and columns (name, type, nullability), plus the canvasexpires_at - Fails as
canvas_not_enabledwhen canvas is off, orcanvas_not_foundwhen the ID is unknown or past its 24-hour sliding TTL
openmeteo_dataframe_query <sub>tool</sub>
canvas_idplus a read-onlySELECTagainst the stagedtable_name;rowsholds up to 100 rows, fewer when wide rows would pass the 80,000-character inline ceiling (values are never cut).row_countis the exact total; page withOFFSET <rows.length>under anORDER BY- If the count fails or runs past 5 seconds, rows still return,
row_countis a lower bound, andcount_errornames the reason (e.g.count_timeout) - Fails as
canvas_not_enabled,canvas_not_found,missing_table,system_catalog_access(system catalogs are blocked), orrow_too_large(the first row alone exceeds the ceiling: select fewer columns, or shorten values withleft(),substr(), orlist_slice())
openmeteo_dataframe_drop <sub>tool</sub>
- Off by default: listed as disabled until
OPENMETEO_DATAFRAME_DROP_ENABLED=true canvas_idplus the exacttable_namefromopenmeteo_dataframe_describe; removes that one table or view and returnsdroppedand theremaining_tables. A name that is not staged returnsdropped: false, so a repeated drop is safe- Fails as
canvas_not_enabled,canvas_not_found, orinvalid_table_name(not a plain SQL identifier, or a reserved keyword)
Features
Built on @cyanheads/mcp-ts-core: stdio and Streamable HTTP transports, pluggable auth (none / jwt / oauth), swappable storage (in-memory, filesystem, Supabase, Cloudflare KV/R2/D1), structured logging with optional OpenTelemetry tracing.
Open-Meteo-specific:
- No API key for non-commercial use; commercial use requires Open-Meteo's paid API tier
- Columnar API responses reshaped into per-timestamp records with
*_unitsmaps, on the same variable names across forecast and archive - DataCanvas spillover on the seven weather tools: with
CANVAS_PROVIDER_TYPE=duckdban over-budget result is staged as a DuckDB table (response carriescanvas_id,table_name,truncated: true); with the defaultnoneit returns a bounded preview andtruncated: true modelson the historical, ensemble, and climate tools is not an allowlist, so a model Open-Meteo adds later works without a server update
Agent-friendly output:
- Location-first workflow:
openmeteo_search_locationsreturns the IANAtimezonealongside coordinates, ready for any weather tool'stimezoneinput (defaultauto) - Typed rejecti
Truncated for display — read the full file on GitHub.
Related Skills
Agent-Reach
99.4kGive your AI agent eyes to see the entire internet. Read & search Twitter, Reddit, YouTube, GitHub, Bilibili, XiaoHongShu — one CLI, zero API fees.
headroom
76.0kCompress tool outputs, logs, files, and RAG chunks before they reach the LLM. 20% fewer tokens for coding agents, 60-95% fewer tokens for JSON, same answers. Library, proxy, MCP server.
CowAgent
47.5kOpen-source personal AI assistant & Agent Harness. Plans tasks, runs tools and skills, self-evolves with memory and knowledge. Multi-agent, multi-model, multi-channel. Lightweight, extensible, one-line install.
Scrapling
88.6k🕷️ A Web Scraping framework that handles everything from a single request to a full-scale crawl! Don't be shy, join here: https://discord.gg/EMgGbDceNQ and follow here for daily tips and tricks: https://x.com/Scrapling_dev
Languages
Trust signals
From repository metadata: license, adoption, age and documentation. Not a code audit — see the Safety scan above for what the skill file itself contains.
