Hosted MCP server · #108 most used on Smithery

open-meteo-mcp-server

cyanheads/open-meteo-mcp-server

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

Uses
5.2k
Tools
11
Runs
Hosted
Listed
4mo ago

Get started

Add it to your agent

npx -y @smithery/cli@latest install cyanheads/open-meteo-mcp-server --client claude

Swap --client claude for cursor, vscode, windsurf or another client. The CLI asks for any required settings.

What it can do

11 tools

openmeteo_geocode4 paramsResolve a place name to ranked coordinate matches with country, region, elevation, timezone, and population. Required prerequisite for na…

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

ParameterTypeDescription
namestringPlace name to search — a bare city, region, or landmark ("Seattle", "Mount Rainier"). Do not fold in a region or country qualifier ("Baoding", not "Baoding Hebei"); use the country input to disambigua
countintegerMax results to return (1–10). Default 5. Return more when disambiguating common names like "Springfield" or "Portland".
countrystringISO 3166-1 alpha-2 country code (e.g. "US", "FR") to disambiguate places that share a name. Omit for a global search.
languagestringLanguage for matching and returning place names (ISO 639-1, e.g., "en", "de", "zh"). The API matches name against the localized index for this language, so set it to match the script of name — e.g. la
openmeteo_get_elevation2 paramsTerrain elevation from the Copernicus Digital Elevation Model (~90m resolution) for one or more coordinate pairs. Accepts up to 100 pairs…

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.

ParameterTypeDescription
latitudesarrayArray of latitudes in decimal degrees (up to 100). Must be same length as longitudes.
longitudesarrayArray of longitudes in decimal degrees (up to 100). Must be same length as latitudes.
openmeteo_get_forecast10 paramsWeather forecast for coordinates: hourly and/or daily variables for up to 16 days ahead, with optional past_days (up to 92) for recent hi…

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_

ParameterTypeDescription
latitudenumberLatitude in decimal degrees (e.g., 47.6062 for Seattle). Use openmeteo_geocode to resolve a place name to coordinates.
timezonestringIANA timezone (e.g., "America/Los_Angeles") or "auto" to use the location's local timezone. Default "auto". The timezone from openmeteo_geocode is ideal to pass here.
longitudenumberLongitude in decimal degrees (e.g., -122.3321 for Seattle).
past_daysintegerInclude this many days of past data before today (0–92). Use for recent history — ERA5 archive has a variable ~5-day lag. Default 0.
forecast_daysintegerNumber of forecast days (1–16). Default 7.
daily_variablesarrayDaily summary variables (e.g., ["temperature_2m_max", "temperature_2m_min", "precipitation_sum", "wind_speed_10m_max", "sunrise", "sunset", "uv_index_max"]). At least one of hourly_variables or daily_
wind_speed_unitstringWind speed unit: "kmh" (km/h), "mph", "ms" (m/s), or "kn" (knots). Default "kmh".
hourly_variablesarrayHourly variables to fetch (e.g., ["temperature_2m", "precipitation", "wind_speed_10m", "relative_humidity_2m", "cloud_cover", "uv_index", "apparent_temperature"]). At least one of hourly_variables or
temperature_unitstringTemperature unit. Default "celsius".
precipitation_unitstringPrecipitation unit: "mm" or "inch". Default "mm".
openmeteo_get_historical11 paramsHistorical weather from the ERA5 reanalysis archive (1940–present). Requires start_date and end_date (ISO 8601 date, e.g., "2024-07-01").…

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_varia

ParameterTypeDescription
end_datestringEnd date (YYYY-MM-DD, inclusive). Must be on or after start_date. For dates within the last ~5 days, use openmeteo_get_forecast with past_days instead.
latitudenumberLatitude in decimal degrees. Use openmeteo_geocode to resolve a place name to coordinates.
timezonestringIANA timezone or "auto". Default "auto".
canvas_idstringDataCanvas token for multi-year or multi-variable queries. When a query exceeds ~500 records, results spill to this canvas for SQL querying. Omit to create a fresh canvas.
longitudenumberLongitude in decimal degrees.
start_datestringStart date (YYYY-MM-DD, e.g., "2024-07-01"). ERA5 covers from 1940-01-01 to approximately 5 days ago.
daily_variablesarrayDaily summary variables (e.g., ["temperature_2m_max", "temperature_2m_min", "precipitation_sum", "wind_speed_10m_max"]). At least one of hourly_variables or daily_variables required.
wind_speed_unitstringWind speed unit. Default "kmh".
hourly_variablesarrayHourly ERA5 variables (e.g., ["temperature_2m", "precipitation", "wind_speed_10m", "relative_humidity_2m", "cloud_cover", "soil_moisture_0_to_7cm"]). At least one of hourly_variables or daily_variable
temperature_unitstringTemperature unit. Default "celsius".
precipitation_unitstringPrecipitation unit. Default "mm".
openmeteo_get_marine6 paramsMarine weather forecast for a coastal or ocean coordinate: wave height, wave period, wave direction, wind-wave height, swell height, sea-…

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

ParameterTypeDescription
latitudenumberLatitude of a coastal or ocean point. Use openmeteo_geocode to resolve a place name. Inland points return near-zero wave values.
timezonestringIANA timezone or "auto". Default "auto".
longitudenumberLongitude in decimal degrees.
forecast_daysintegerForecast horizon in days (1–7). Default 7.
daily_variablesarrayDaily marine summary variables (e.g., ["wave_height_max", "wave_direction_dominant", "wave_period_max"]). At least one of hourly_variables or daily_variables required.
hourly_variablesarrayHourly marine variables (e.g., ["wave_height", "wave_direction", "wave_period", "wind_wave_height", "swell_wave_height"]). At least one of hourly_variables or daily_variables required.
openmeteo_get_air_quality5 paramsModeled CAMS (Copernicus Atmosphere Monitoring Service) air quality forecast: PM2.5, PM10, nitrogen dioxide, sulphur dioxide, ozone, carb…

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

ParameterTypeDescription
latitudenumberLatitude in decimal degrees. Use openmeteo_geocode to resolve a place name.
timezonestringIANA timezone or "auto". Default "auto".
longitudenumberLongitude in decimal degrees.
forecast_daysintegerForecast horizon in days (1–7). Default 5.
hourly_variablesarrayHourly air quality variables (e.g., ["pm2_5", "pm10", "ozone", "nitrogen_dioxide", "european_aqi", "us_aqi"]). At least one required.
openmeteo_get_ensemble12 paramsProbabilistic ensemble weather forecast — up to 51 ensemble members, up to 16 days ahead with optional past_days (0–92). Each member's va…

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" (4

ParameterTypeDescription
modelsstringEnsemble model to use: "ecmwf_ifs025" (51 members, global 0.25°), "gfs025" (31 members), "icon_seamless" (40 members), "gem_global" (21 members). Omit to use the API default blend.
latitudenumberLatitude in decimal degrees. Use openmeteo_geocode to resolve a place name to coordinates.
timezonestringIANA timezone (e.g., "America/Los_Angeles") or "auto" to use the location's local timezone. Default "auto".
canvas_idstringDataCanvas token for large multi-member queries. When records exceed ~500, results spill to this canvas for SQL querying. Omit to create a fresh canvas.
longitudenumberLongitude in decimal degrees.
past_daysintegerInclude this many days of past ensemble data before today (0–92). Default 0.
forecast_daysintegerForecast horizon in days (1–16). Default 7.
daily_variablesarrayDaily variables to fetch across all ensemble members (e.g., ["temperature_2m_max", "temperature_2m_min", "precipitation_sum"]). Each variable appears as temperature_2m_max_member01, … At least one of
wind_speed_unitstringWind speed unit. Default "kmh".
hourly_variablesarrayHourly variables to fetch across all ensemble members (e.g., ["temperature_2m", "precipitation", "wind_speed_10m"]). Each variable appears as temperature_2m_member01, temperature_2m_member02, … in the
temperature_unitstringTemperature unit. Default "celsius".
precipitation_unitstringPrecipitation unit. Default "mm".
openmeteo_get_flood7 paramsGloFAS (Global Flood Awareness System) river discharge forecast and historical reanalysis. Returns daily ensemble river discharge (m³/s) …

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_dis

ParameterTypeDescription
end_datestringEnd date for historical reanalysis (YYYY-MM-DD, inclusive). Must be on or after start_date.
latitudenumberLatitude in decimal degrees. The API snaps to the nearest river — no river ID required. Use openmeteo_geocode to resolve a place name.
timezonestringIANA timezone or "auto". Default "auto".
longitudenumberLongitude in decimal degrees.
start_datestringStart date for historical reanalysis (YYYY-MM-DD, e.g., "2023-01-01"). GloFAS reanalysis covers from 1984-01-01.
forecast_daysintegerNumber of forecast days ahead (1–210). Omit when fetching historical data only via start_date/end_date.
daily_variablesarrayDaily discharge variables to fetch (e.g., ["river_discharge", "river_discharge_p25", "river_discharge_p75", "river_discharge_min", "river_discharge_max"]). Required.
openmeteo_get_climate11 paramsLong-range climate projections from bias-corrected daily CMIP6 models, covering 1950-01-01 to 2050-12-31 at any coordinate. Answers "what…

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 suffi

ParameterTypeDescription
modelsarrayCMIP6 models to include: "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 column is suffixed with the model
end_datestringEnd date (YYYY-MM-DD, inclusive, max 2050-12-31). Must be on or after start_date.
latitudenumberLatitude in decimal degrees. Use openmeteo_geocode to resolve a place name to coordinates.
timezonestringIANA timezone or "auto". Default "auto".
canvas_idstringDataCanvas token for multi-decade or multi-model queries. When a query exceeds ~500 records, results spill to this canvas for SQL querying. Omit to create a fresh canvas.
longitudenumberLongitude in decimal degrees.
start_datestringStart date (YYYY-MM-DD, e.g., "2049-01-01"). CMIP6 projections cover 1950-01-01 to 2050-12-31.
daily_variablesarrayDaily climate variables to fetch (e.g., ["temperature_2m_max", "temperature_2m_min", "precipitation_sum", "wind_speed_10m_mean", "shortwave_radiation_sum"]). Required — the Climate API is daily-only.
wind_speed_unitstringWind speed unit. Default "kmh".
temperature_unitstringTemperature unit. Default "celsius".
precipitation_unitstringPrecipitation unit. Default "mm".
openmeteo_dataframe_query2 paramsRun a read-only SQL SELECT against tables staged on a DataCanvas by openmeteo_get_historical, openmeteo_get_ensemble, or openmeteo_get_cl…

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). Tables are named by the spillover helper (e.g. spilled_<id>); use openmeteo_dataframe_describe to list available tables and their columns before querying.

ParameterTypeDescription
sqlstringRead-only SELECT statement. Reference table names from openmeteo_dataframe_describe. Example: SELECT AVG(temperature_2m) AS avg_temp, strftime(time, '%Y-%m') AS month FROM spilled_abc123 GROUP BY mont
canvas_idstringCanvas ID returned by openmeteo_get_historical, openmeteo_get_ensemble, or openmeteo_get_climate when truncated: true.
openmeteo_dataframe_describe1 paramList the tables and their columns on a DataCanvas staged by openmeteo_get_historical, openmeteo_get_ensemble, or openmeteo_get_climate. C…

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.

ParameterTypeDescription
canvas_idstringCanvas ID returned by openmeteo_get_historical, openmeteo_get_ensemble, or openmeteo_get_climate when truncated: true.