# open-meteo-mcp-server MCP server

Global weather via Open-Meteo: forecast, ERA5 archive, marine, air quality, geocoding, elevation.

## Links
- Registry page: https://www.getdrio.com/mcp/io-github-cyanheads-open-meteo-mcp-server
- Repository: https://github.com/cyanheads/open-meteo-mcp-server

## Install
- Command: `npx -y @cyanheads/open-meteo-mcp-server`
- Endpoint: https://open-meteo.caseyjhand.com/mcp
- Auth: Not captured

## Setup notes
- Package: Npm @cyanheads/open-meteo-mcp-server v0.1.4
- Environment variable: MCP_LOG_LEVEL (default info)
- Environment variable: CANVAS_PROVIDER_TYPE (default none)
- Package: Npm @cyanheads/open-meteo-mcp-server v0.1.4
- Environment variable: MCP_HTTP_HOST (default 127.0.0.1)
- Environment variable: MCP_HTTP_PORT (default 3010)
- Environment variable: MCP_HTTP_ENDPOINT_PATH (default /mcp)
- Environment variable: MCP_AUTH_MODE (default none)
- Environment variable: MCP_LOG_LEVEL (default info)
- Environment variable: CANVAS_PROVIDER_TYPE (default none)
- Remote endpoint: https://open-meteo.caseyjhand.com/mcp

## Tools
- openmeteo_geocode (Openmeteo Geocode) - Resolve a place name to ranked coordinate matches with country, region, elevation, timezone, and population. Required prerequisite for name-based queries — all weather tools take latitude/longitude, not place names. Search by a bare place name (city, region, or landmark); never fold a qualifier into it — pass "Baoding", not "Baoding Hebei", and "Paris", not "Paris, France". To disambiguate places that share a name, set the country input (ISO 3166-1 alpha-2, e.g. "US") and/or read the admin1 and country fields on each ranked result — admin1 is a result field for choosing among matches, not a search input. Returns up to 10 matches ranked by population/relevance. Endpoint: https://open-meteo.caseyjhand.com/mcp
- openmeteo_get_elevation (Openmeteo Get Elevation) - Terrain elevation from the Copernicus Digital Elevation Model (~90m resolution) for one or more coordinate pairs. Accepts up to 100 pairs per call. Useful for geographic context, elevation-adjusted weather interpretation, or route planning. Endpoint: https://open-meteo.caseyjhand.com/mcp
- openmeteo_get_forecast (Openmeteo Get Forecast) - Weather forecast for coordinates: hourly and/or daily variables for up to 16 days ahead, with optional past_days (up to 92) for recent history. Use past_days instead of openmeteo_get_historical for dates within the last 1–5 days, since ERA5 has a variable lag. Returns per-timestamp records — each hourly entry contains a "time" field (ISO 8601) plus one key per requested variable; each daily entry contains a "time" field (YYYY-MM-DD) plus requested variables. Common hourly variables: temperature_2m, precipitation, wind_speed_10m, relative_humidity_2m, cloud_cover, uv_index, apparent_temperature, precipitation_probability, weather_code, surface_pressure, visibility, wind_direction_10m, wind_gusts_10m, dew_point_2m. Common daily variables: temperature_2m_max, temperature_2m_min, precipitation_sum, wind_speed_10m_max, sunrise, sunset, uv_index_max, precipitation_hours, weather_code. At least one of hourly_variables or daily_variables is required. Endpoint: https://open-meteo.caseyjhand.com/mcp
- openmeteo_get_historical (Openmeteo Get Historical) - Historical weather from the ERA5 reanalysis archive (1940–present). Requires start_date and end_date (ISO 8601 date, e.g., "2024-07-01"). ERA5 has a variable lag of up to ~5 days — for dates within the last week, use openmeteo_get_forecast with past_days instead. Uses the same variable names as the forecast API for direct comparison. Large date ranges (multi-year hourly) produce thousands of records — these spill to DataCanvas for SQL querying when canvas is enabled. At least one of hourly_variables or daily_variables is required. Endpoint: https://open-meteo.caseyjhand.com/mcp
- openmeteo_get_marine (Openmeteo Get Marine) - Marine weather forecast for a coastal or ocean coordinate: wave height, wave period, wave direction, wind-wave height, swell height, sea-surface temperature. Forecast horizon up to 7 days. Returns per-timestamp records — each entry contains a "time" field plus one key per requested variable. Best for open-ocean and coastal exposed points — sheltered inland waters return near-zero wave values. Common hourly variables: wave_height, wave_direction, wave_period, wind_wave_height, wind_wave_direction, wind_wave_period, swell_wave_height, swell_wave_direction, swell_wave_period. Common daily: wave_height_max, wave_direction_dominant, wave_period_max. Note: ocean_current_velocity is null for non-open-ocean coordinates. Endpoint: https://open-meteo.caseyjhand.com/mcp
- openmeteo_get_air_quality (Openmeteo Get Air Quality) - Modeled CAMS (Copernicus Atmosphere Monitoring Service) air quality forecast: PM2.5, PM10, nitrogen dioxide, sulphur dioxide, ozone, carbon monoxide, dust, pollen, and European/US AQI indices. This is modeled grid data, not measured station readings — for measured data, use openaq-mcp-server. Forecast only (no historical archive). Common variables: pm2_5, pm10, carbon_monoxide, nitrogen_dioxide, sulphur_dioxide, ozone, dust, european_aqi, us_aqi, alder_pollen, birch_pollen, grass_pollen, mugwort_pollen, olive_pollen, ragweed_pollen. Endpoint: https://open-meteo.caseyjhand.com/mcp
- openmeteo_get_ensemble (Openmeteo Get Ensemble) - Probabilistic ensemble weather forecast — up to 51 ensemble members, up to 16 days ahead with optional past_days (0–92). Each member's values appear as separate columns named with a member suffix (e.g. temperature_2m_member01, temperature_2m_member02). Use the spread across members to compute exceedance probabilities, quantify forecast uncertainty, and build decision thresholds. Available models: "ecmwf_ifs025" (51 members, global, 0.25°), "gfs025" (31 members, global, 0.25°), "icon_seamless" (40 members, global/Europe blend), "gem_global" (21 members, global, 0.25°). Omit models to use the API default blend. Large multi-member, multi-day pulls produce thousands of records and spill to DataCanvas when canvas is enabled. At least one of hourly_variables or daily_variables is required. Endpoint: https://open-meteo.caseyjhand.com/mcp
- openmeteo_get_flood (Openmeteo Get Flood) - GloFAS (Global Flood Awareness System) river discharge forecast and historical reanalysis. Returns daily ensemble river discharge (m³/s) for the river nearest to the given coordinates — no river ID needed, the API snaps to the nearest stream. Forecast horizon up to 210 days ahead; reanalysis history back to 1984-01-01. Use start_date/end_date for historical pulls and forecast_days for future forecasts; both can be combined. Available daily variables: "river_discharge" (ensemble mean), "river_discharge_mean", "river_discharge_min", "river_discharge_max", "river_discharge_median", "river_discharge_p25" (25th percentile), "river_discharge_p75" (75th percentile). Returns null for coordinates far from any river or in areas without GloFAS coverage. Endpoint: https://open-meteo.caseyjhand.com/mcp
- openmeteo_get_climate (Openmeteo Get Climate) - Long-range climate projections from bias-corrected daily CMIP6 models, covering 1950-01-01 to 2050-12-31 at any coordinate. Answers "what will conditions look like through 2050?" — the future-projection counterpart to openmeteo_get_historical (ERA5, what happened). Daily resolution only. Available models: "CMCC_CM2_VHR4", "FGOALS_f3_H", "HiRAM_SIT_HR", "MRI_AGCM3_2_S", "EC_Earth3P_HR", "MPI_ESM1_2_XR", "NICAM16_8S". With 2+ models each variable appears once per model with the model name as suffix (e.g. temperature_2m_max_CMCC_CM2_VHR4); a single or omitted model returns plain variable names. Not all models carry all variables — missing combinations return null. Multi-decade daily pulls across several models produce thousands of records and spill to DataCanvas for SQL querying when canvas is enabled. Endpoint: https://open-meteo.caseyjhand.com/mcp
- openmeteo_dataframe_query (Openmeteo Dataframe Query) - Run a read-only SQL SELECT against tables staged on a DataCanvas by openmeteo_get_historical, openmeteo_get_ensemble, or openmeteo_get_climate. Pass the canvas_id returned when any of those tools spills (truncated: true), and reference the exact table_name those tools return alongside it. Call openmeteo_dataframe_describe to list staged tables and their columns when you need to discover names. Endpoint: https://open-meteo.caseyjhand.com/mcp
- openmeteo_dataframe_describe (Openmeteo Dataframe Describe) - List the tables and their columns on a DataCanvas staged by openmeteo_get_historical, openmeteo_get_ensemble, or openmeteo_get_climate. Call this first to discover table names before querying with openmeteo_dataframe_query. Endpoint: https://open-meteo.caseyjhand.com/mcp

## Resources
Not captured

## Prompts
Not captured

## Metadata
- Owner: io.github.cyanheads
- Version: 0.1.4
- Runtime: Npm
- Transports: STDIO, HTTP
- License: Not captured
- Language: Not captured
- Stars: Not captured
- Updated: Jun 4, 2026
- Source: https://registry.modelcontextprotocol.io
