Open-Meteo MCP
Overview
This MCP server provides direct access to Open-Meteo weather APIs via dedicated tools. No direct API calls needed — call the appropriate tool with coordinates and the variables you want.
If you only have a city name, call geocoding first to obtain coordinates and timezone.
Which Tool to Use
| Scenario |
Tool |
| City name → coordinates + timezone |
geocoding |
| Current weather or forecast (up to 16 days) |
weather_forecast |
| Historical weather (past dates) |
weather_archive |
| Air quality, pollutants, pollen |
air_quality |
| Wave height, swell, sea temperature, currents |
marine_weather |
| River discharge, flood risk (up to 210 days) |
flood_forecast |
| Elevation / altitude of a location |
elevation |
| Specific model, forecast > 16 days, seasonal, or climate projection |
→ use open-meteo-advanced |
Key Parameters
geocoding
| Parameter |
Required |
Notes |
name |
Yes |
City or place name |
count |
No |
Max results (default 1) |
language |
No |
Response language (e.g., fr, en) |
Returns: latitude, longitude, timezone, country.
Attribution: geocoding data from GeoNames.
weather_forecast
| Parameter |
Required |
Notes |
latitude, longitude |
Yes |
WGS84 coordinates |
hourly |
No* |
Hourly time series |
daily |
No* |
Day-level aggregates |
current |
No* |
Current conditions (any hourly variable) |
minutely_15 |
No |
15-minute resolution variables (subset of hourly) |
forecast_days |
No |
1–16, default 7 |
past_days |
No |
1–92 (recent history without archive) |
timezone |
No** |
Required for daily; use auto for local time |
temperature_unit |
No |
celsius (default) or fahrenheit |
wind_speed_unit |
No |
kmh (default), ms, mph, kn |
precipitation_unit |
No |
mm (default) or inch |
start_date / end_date |
No |
YYYY-MM-DD alternative to forecast_days |
past_hours / forecast_hours |
No |
Hour-granularity alternative to past_days/forecast_days |
cell_selection |
No |
land, sea, or nearest grid cell preference |
tilt / azimuth |
No |
Panel angle for global_tilted_irradiance |
*At least one of hourly, daily, or current is required.
**Always set timezone=auto when requesting daily variables.
One model per request. For multi-model comparison, use open-meteo-advanced model tools in parallel.
Common hourly variables: temperature_2m, relative_humidity_2m, apparent_temperature, precipitation, precipitation_probability, wind_speed_10m, wind_direction_10m, weather_code, cloud_cover, uv_index, visibility, is_day. Upper-air pressure-level variables are also available, e.g. temperature_850hPa, wind_speed_500hPa, geopotential_height_200hPa (levels: 1000 down to 30 hPa).
Common daily variables: temperature_2m_max, temperature_2m_min, apparent_temperature_max, precipitation_sum, precipitation_probability_max, wind_speed_10m_max, wind_gusts_10m_max, weather_code, sunrise, sunset, uv_index_max, shortwave_radiation_sum
weather_archive
Same parameters as weather_forecast, with these differences:
| Parameter |
Required |
Notes |
start_date |
Yes |
YYYY-MM-DD |
end_date |
Yes |
YYYY-MM-DD |
models |
No |
Reanalysis dataset: best_match (default), era5, era5_land, ecmwf_ifs, cerra, era5_ensemble |
Use past_days on weather_forecast for recent history (up to 92 days back). Use weather_archive for older dates.
air_quality
| Parameter |
Required |
Notes |
latitude, longitude |
Yes |
|
hourly |
No* |
Air quality variables (time series) |
current |
No* |
Current conditions (any hourly variable) |
domains |
No |
auto (default), cams_europe, or cams_global |
forecast_days |
No |
0–7, default 5 |
past_days |
No |
0–92 |
start_date / end_date |
No |
YYYY-MM-DD alternative to forecast_days |
timezone |
No |
Use auto for local time |
*At least one of hourly or current is required.
Common variables: pm2_5, pm10, european_aqi, us_aqi, carbon_monoxide, nitrogen_dioxide, ozone, sulphur_dioxide, dust, uv_index, alder_pollen, birch_pollen, grass_pollen, mugwort_pollen, olive_pollen, ragweed_pollen
Attribution: air quality data from CAMS (Copernicus Atmosphere Monitoring Service).
marine_weather
| Parameter |
Required |
Notes |
latitude, longitude |
Yes |
Use sea/ocean coordinates |
hourly |
No* |
Hourly ocean/wave variables |
current |
No* |
Current ocean/wave conditions |
daily |
No* |
Daily aggregates |
minutely_15 |
No |
15-minute resolution: ocean_current_velocity, ocean_current_direction, sea_level_height_msl |
models |
No |
Wave model: best_match (default), meteofrance_wave, dwd_ewam, ecmwf_wam, ncep_gfswave025, era5_ocean |
length_unit |
No |
metric (default) or imperial for wave height/sea level |
forecast_days |
No |
0–16, default 7 |
past_days |
No |
0–92 |
start_date / end_date |
No |
YYYY-MM-DD alternative to forecast_days |
cell_selection |
No |
land, sea, or nearest grid cell preference |
timezone |
No |
Use auto for daily variables |
*At least one of hourly, current, or daily is required.
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, sea_surface_temperature, ocean_current_velocity, ocean_current_direction
Common daily variables: wave_height_max, wave_direction_dominant, wave_period_max, swell_wave_height_max
flood_forecast
| Parameter |
Required |
Notes |
latitude, longitude |
Yes |
|
daily |
No* |
River discharge variables |
models |
No |
GloFAS version: seamless_v4 (default), forecast_v4, consolidated_v4, or the _v3 equivalents |
forecast_days |
No |
0–366, default 92 |
past_days |
No |
0–92 |
ensemble |
No |
Set true to return all ensemble members |
Variables: river_discharge (deterministic), river_discharge_mean, river_discharge_median, river_discharge_max, river_discharge_min, river_discharge_p25, river_discharge_p75
Data source: GloFAS (Global Flood Awareness System).
elevation
| Parameter |
Required |
Notes |
latitude, longitude |
Yes |
A single coordinate pair, or two equal-length arrays for batch lookups |
Returns altitude in metres (one value per coordinate pair).
Examples
"What is the weather like in Lyon tomorrow?"
geocoding with name: "Lyon" → latitude, longitude, timezone
weather_forecast with those coordinates + daily: ["temperature_2m_max", "temperature_2m_min", "precipitation_sum", "weather_code"], forecast_days: 2, timezone: "auto"
"Is the air quality good in Paris right now?"
geocoding with name: "Paris" → coordinates
air_quality with coordinates + current: ["european_aqi", "pm2_5", "pm10"]
"What was the average temperature in Berlin in July 2024?"
geocoding with name: "Berlin" → coordinates, timezone
weather_archive with coordinates + daily: ["temperature_2m_max", "temperature_2m_min"], start_date: "2024-07-01", end_date: "2024-07-31", timezone: "auto"
"What are the wave conditions near Biarritz this weekend?"
geocoding with name: "Biarritz" → coordinates
marine_weather with coordinates + hourly: ["wave_height", "wave_direction", "wave_period", "swell_wave_height"], forecast_days: 3
Best Practices
- Always geocode first if you only have a city or place name.
- Always set
timezone=auto when requesting daily variables — otherwise results are in UTC and day boundaries will be wrong for non-UTC locations.
- Request only the variables you need — smaller payloads are faster and easier to parse.
- Use
current for instant conditions, hourly for time series, daily for day-level summaries.
forecast_days: 1 returns today only; forecast_days: 2 returns today + tomorrow.
- For multi-model comparison or forecasts beyond 16 days, use
open-meteo-advanced.
1---2name: open-meteo3description: Use when the user asks about current weather, forecasts, historical weather, air quality, marine conditions, flooding, or elevation for any location worldwide.4---56# Open-Meteo MCP78## Overview910This MCP server provides direct access to Open-Meteo weather APIs via dedicated tools. No direct API calls needed — call the appropriate tool with coordinates and the variables you want.1112If you only have a city name, call `geocoding` first to obtain coordinates and timezone.1314## Which Tool to Use1516| Scenario | Tool |17|----------|------|18| City name → coordinates + timezone | `geocoding` |19| Current weather or forecast (up to 16 days) | `weather_forecast` |20| Historical weather (past dates) | `weather_archive` |21| Air quality, pollutants, pollen | `air_quality` |22| Wave height, swell, sea temperature, currents | `marine_weather` |23| River discharge, flood risk (up to 210 days) | `flood_forecast` |24| Elevation / altitude of a location | `elevation` |25| Specific model, forecast > 16 days, seasonal, or climate projection | → use `open-meteo-advanced` |2627## Key Parameters2829### `geocoding`30| Parameter | Required | Notes |31|-----------|----------|-------|32| `name` | Yes | City or place name |33| `count` | No | Max results (default 1) |34| `language` | No | Response language (e.g., `fr`, `en`) |3536Returns: `latitude`, `longitude`, `timezone`, `country`.37Attribution: geocoding data from GeoNames.3839### `weather_forecast`40| Parameter | Required | Notes |41|-----------|----------|-------|42| `latitude`, `longitude` | Yes | WGS84 coordinates |43| `hourly` | No* | Hourly time series |44| `daily` | No* | Day-level aggregates |45| `current` | No* | Current conditions (any hourly variable) |46| `minutely_15` | No | 15-minute resolution variables (subset of hourly) |47| `forecast_days` | No | 1–16, default 7 |48| `past_days` | No | 1–92 (recent history without archive) |49| `timezone` | No** | Required for `daily`; use `auto` for local time |50| `temperature_unit` | No | `celsius` (default) or `fahrenheit` |51| `wind_speed_unit` | No | `kmh` (default), `ms`, `mph`, `kn` |52| `precipitation_unit` | No | `mm` (default) or `inch` |53| `start_date` / `end_date` | No | `YYYY-MM-DD` alternative to forecast_days |54| `past_hours` / `forecast_hours` | No | Hour-granularity alternative to past_days/forecast_days |55| `cell_selection` | No | `land`, `sea`, or `nearest` grid cell preference |56| `tilt` / `azimuth` | No | Panel angle for `global_tilted_irradiance` |5758\*At least one of `hourly`, `daily`, or `current` is required.59\*\*Always set `timezone=auto` when requesting `daily` variables.6061**One model per request.** For multi-model comparison, use `open-meteo-advanced` model tools in parallel.6263**Common hourly variables:** `temperature_2m`, `relative_humidity_2m`, `apparent_temperature`, `precipitation`, `precipitation_probability`, `wind_speed_10m`, `wind_direction_10m`, `weather_code`, `cloud_cover`, `uv_index`, `visibility`, `is_day`. Upper-air pressure-level variables are also available, e.g. `temperature_850hPa`, `wind_speed_500hPa`, `geopotential_height_200hPa` (levels: 1000 down to 30 hPa).6465**Common daily variables:** `temperature_2m_max`, `temperature_2m_min`, `apparent_temperature_max`, `precipitation_sum`, `precipitation_probability_max`, `wind_speed_10m_max`, `wind_gusts_10m_max`, `weather_code`, `sunrise`, `sunset`, `uv_index_max`, `shortwave_radiation_sum`6667### `weather_archive`68Same parameters as `weather_forecast`, with these differences:69| Parameter | Required | Notes |70|-----------|----------|-------|71| `start_date` | Yes | `YYYY-MM-DD` |72| `end_date` | Yes | `YYYY-MM-DD` |73| `models` | No | Reanalysis dataset: `best_match` (default), `era5`, `era5_land`, `ecmwf_ifs`, `cerra`, `era5_ensemble` |7475Use `past_days` on `weather_forecast` for recent history (up to 92 days back). Use `weather_archive` for older dates.7677### `air_quality`78| Parameter | Required | Notes |79|-----------|----------|-------|80| `latitude`, `longitude` | Yes | |81| `hourly` | No* | Air quality variables (time series) |82| `current` | No* | Current conditions (any hourly variable) |83| `domains` | No | `auto` (default), `cams_europe`, or `cams_global` |84| `forecast_days` | No | 0–7, default 5 |85| `past_days` | No | 0–92 |86| `start_date` / `end_date` | No | `YYYY-MM-DD` alternative to forecast_days |87| `timezone` | No | Use `auto` for local time |8889\*At least one of `hourly` or `current` is required.9091**Common variables:** `pm2_5`, `pm10`, `european_aqi`, `us_aqi`, `carbon_monoxide`, `nitrogen_dioxide`, `ozone`, `sulphur_dioxide`, `dust`, `uv_index`, `alder_pollen`, `birch_pollen`, `grass_pollen`, `mugwort_pollen`, `olive_pollen`, `ragweed_pollen`9293Attribution: air quality data from CAMS (Copernicus Atmosphere Monitoring Service).9495### `marine_weather`96| Parameter | Required | Notes |97|-----------|----------|-------|98| `latitude`, `longitude` | Yes | Use sea/ocean coordinates |99| `hourly` | No* | Hourly ocean/wave variables |100| `current` | No* | Current ocean/wave conditions |101| `daily` | No* | Daily aggregates |102| `minutely_15` | No | 15-minute resolution: `ocean_current_velocity`, `ocean_current_direction`, `sea_level_height_msl` |103| `models` | No | Wave model: `best_match` (default), `meteofrance_wave`, `dwd_ewam`, `ecmwf_wam`, `ncep_gfswave025`, `era5_ocean` |104| `length_unit` | No | `metric` (default) or `imperial` for wave height/sea level |105| `forecast_days` | No | 0–16, default 7 |106| `past_days` | No | 0–92 |107| `start_date` / `end_date` | No | `YYYY-MM-DD` alternative to forecast_days |108| `cell_selection` | No | `land`, `sea`, or `nearest` grid cell preference |109| `timezone` | No | Use `auto` for daily variables |110111\*At least one of `hourly`, `current`, or `daily` is required.112113**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`, `sea_surface_temperature`, `ocean_current_velocity`, `ocean_current_direction`114115**Common daily variables:** `wave_height_max`, `wave_direction_dominant`, `wave_period_max`, `swell_wave_height_max`116117### `flood_forecast`118| Parameter | Required | Notes |119|-----------|----------|-------|120| `latitude`, `longitude` | Yes | |121| `daily` | No* | River discharge variables |122| `models` | No | GloFAS version: `seamless_v4` (default), `forecast_v4`, `consolidated_v4`, or the `_v3` equivalents |123| `forecast_days` | No | 0–366, default 92 |124| `past_days` | No | 0–92 |125| `ensemble` | No | Set `true` to return all ensemble members |126127**Variables:** `river_discharge` (deterministic), `river_discharge_mean`, `river_discharge_median`, `river_discharge_max`, `river_discharge_min`, `river_discharge_p25`, `river_discharge_p75`128129Data source: GloFAS (Global Flood Awareness System).130131### `elevation`132| Parameter | Required | Notes |133|-----------|----------|-------|134| `latitude`, `longitude` | Yes | A single coordinate pair, or two equal-length arrays for batch lookups |135136Returns altitude in metres (one value per coordinate pair).137138## Examples139140**"What is the weather like in Lyon tomorrow?"**1411. `geocoding` with `name: "Lyon"` → `latitude`, `longitude`, `timezone`1422. `weather_forecast` with those coordinates + `daily: ["temperature_2m_max", "temperature_2m_min", "precipitation_sum", "weather_code"]`, `forecast_days: 2`, `timezone: "auto"`143144**"Is the air quality good in Paris right now?"**1451. `geocoding` with `name: "Paris"` → coordinates1462. `air_quality` with coordinates + `current: ["european_aqi", "pm2_5", "pm10"]`147148**"What was the average temperature in Berlin in July 2024?"**1491. `geocoding` with `name: "Berlin"` → coordinates, timezone1502. `weather_archive` with coordinates + `daily: ["temperature_2m_max", "temperature_2m_min"]`, `start_date: "2024-07-01"`, `end_date: "2024-07-31"`, `timezone: "auto"`151152**"What are the wave conditions near Biarritz this weekend?"**1531. `geocoding` with `name: "Biarritz"` → coordinates1542. `marine_weather` with coordinates + `hourly: ["wave_height", "wave_direction", "wave_period", "swell_wave_height"]`, `forecast_days: 3`155156## Best Practices157158- **Always geocode first** if you only have a city or place name.159- **Always set `timezone=auto`** when requesting `daily` variables — otherwise results are in UTC and day boundaries will be wrong for non-UTC locations.160- **Request only the variables you need** — smaller payloads are faster and easier to parse.161- **Use `current`** for instant conditions, `hourly` for time series, `daily` for day-level summaries.162- **`forecast_days: 1`** returns today only; `forecast_days: 2` returns today + tomorrow.163- For multi-model comparison or forecasts beyond 16 days, use `open-meteo-advanced`.