Open-Meteo MCP — Advanced
Overview
Use this skill when:
- The user asks for a specific weather model (ECMWF, GFS, DWD ICON, Météo-France, JMA, MET Norway, GEM)
- The user wants to compare models (make parallel calls, one per model tool)
- Forecasts beyond 16 days are needed
- Ensemble uncertainty / confidence intervals are requested
- A seasonal outlook (1–7 months) or climate projection (to 2050) is needed
For everyday weather questions, use open-meteo instead.
Model Selection Guide
| Tool |
Provider |
Geographic Focus |
Horizon |
Best For |
ecmwf_forecast |
ECMWF IFS |
Global |
15 days |
Highest global accuracy |
gfs_forecast |
NOAA GFS |
Global |
16 days |
Global, especially Americas |
dwd_icon_forecast |
DWD ICON |
Europe only |
2–7.5 days |
High-res Europe |
meteofrance_forecast |
Météo-France AROME/ARPEGE |
France, DOM-TOM, Mediterranean/Europe |
2–4 days |
France + nearby regions |
jma_forecast |
JMA |
Asia-Pacific |
4–11 days |
Japan and Asia-Pacific |
metno_forecast |
MET Norway |
Nordic-primary (global extension via blending) |
2.5 days |
Nordic region precision |
gem_forecast |
Environment Canada GEM |
North America |
2–10 days |
Canada |
ensemble_forecast |
Multi-model |
Global |
35 days |
Forecast uncertainty ranges |
seasonal_forecast |
ECMWF SEAS5 |
Global |
up to 217 days |
1–7 month outlook |
climate_projection |
CMIP6 |
Global |
1950–2050 |
Multi-decade scenarios |
Geographic constraints:
dwd_icon_forecast: Europe only — do not use for other regions.
metno_forecast with metno_nordic: Nordic region only. metno_seamless is Nordic-primary with global extension via blending, not a general-purpose global model.
meteofrance_forecast: France + DOM-TOM + Mediterranean/Europe coverage.
Key Parameters
Model-specific forecast tools
Applies to: dwd_icon_forecast, gfs_forecast, meteofrance_forecast, ecmwf_forecast, jma_forecast, metno_forecast, gem_forecast
All share the same parameters as weather_forecast (see open-meteo skill), plus:
| Parameter |
Required |
Notes |
latitude, longitude |
Yes |
|
models |
Yes* |
Exactly one model per request |
hourly / daily / current |
No** |
Same variables as weather_forecast |
*metno_forecast can omit models to use the default Met.no model.
**At least one variable group required.
Multi-model comparison: Make parallel tool calls, one per model.
Model key examples:
| Tool |
Example model keys |
ecmwf_forecast |
ecmwf_ifs, ecmwf_ifs025, best_match (only these 3 are valid) |
dwd_icon_forecast |
dwd_icon_seamless, dwd_icon_global, dwd_icon_eu, dwd_icon_d2 |
gfs_forecast |
ncep_gfs_global, ncep_gfs_seamless, ncep_hrrr_conus |
meteofrance_forecast |
meteofrance_seamless, meteofrance_arome_france, meteofrance_arpege_europe |
jma_forecast |
jma_seamless, jma_msm, jma_gsm |
metno_forecast |
metno_nordic, metno_seamless |
gem_forecast |
gem_global, gem_regional, gem_seamless |
ECMWF warning: ecmwf_ifs_025, ecmwf_ifs_hres_9km, and ecmwf_aifs_025_single are NOT valid on ecmwf_forecast and will return HTTP 400.
ensemble_forecast
| Parameter |
Required |
Notes |
latitude, longitude |
Yes |
|
models |
No |
One ensemble model, or an array of models to compare several ensemble systems in one call |
hourly |
No* |
Same variables as weather_forecast |
forecast_days |
No |
0–36, default 7 |
past_days / past_hours |
No |
Recent history, day or hour granularity |
forecast_hours |
No |
Hour-granularity alternative to forecast_days |
start_date / end_date |
No |
YYYY-MM-DD alternative to forecast_days |
temporal_resolution |
No |
native (default), hourly, hourly_3, or hourly_6 |
cell_selection |
No |
land, sea, or nearest grid cell preference |
Response format: Each variable is returned as one array per ensemble member, suffixed with the model name when models contains more than one entry:
{
"hourly": {
"time": ["2024-01-01T00:00", "2024-01-01T01:00", "..."],
"temperature_2m_member01": [2.1, 2.3, "..."],
"temperature_2m_member02": [1.8, 2.0, "..."],
"temperature_2m_member03": [2.4, 2.6, "..."]
}
}
To derive uncertainty ranges, calculate min/max/percentiles across all _memberNN arrays for each timestep.
seasonal_forecast
| Parameter |
Required |
Notes |
latitude, longitude |
Yes |
|
hourly |
No* |
6-hourly variables: temperature_2m, precipitation, wind_speed_10m, relative_humidity_2m, cloud_cover, pressure_msl, dew_point_2m, sea_surface_temperature, wave_height, soil_moisture_0_to_7cm and other depth buckets |
daily |
No* |
temperature_2m_max, temperature_2m_min, temperature_2m_mean, sunrise, sunset, weather_code, dew_point_2m_mean, sea_surface_temperature_mean |
weekly |
No* |
Weekly means/anomalies, e.g. temperature_2m_mean, temperature_2m_anomaly, precipitation_anomaly, precipitation_efi |
monthly |
No* |
Monthly means/anomalies, e.g. temperature_2m_mean, temperature_2m_anomaly, sea_ice_cover_mean, evapotranspiration_mean |
models |
No |
best_match (default), ecmwf_seas5, ecmwf_ec46, or their ensemble-mean variants |
forecast_days |
No |
0–217, default 183 |
cell_selection |
No |
land, sea, or nearest grid cell preference |
*At least one of hourly, daily, weekly, or monthly is required.
Output represents ensemble anomalies relative to climatology, not absolute forecasts.
climate_projection
| Parameter |
Required |
Notes |
latitude, longitude |
Yes |
|
start_date |
Yes |
YYYY-MM-DD (supported range: 1950-01-01 to 2050-12-31) |
end_date |
Yes |
YYYY-MM-DD |
daily |
No |
One or more of: temperature_2m_max, temperature_2m_min, temperature_2m_mean, precipitation_sum, wind_speed_10m_mean, wind_speed_10m_max, cloud_cover_mean, relative_humidity_2m_mean, shortwave_radiation_sum, soil_moisture_0_to_7cm_mean, pressure_msl_mean |
models |
No |
CMIP6 models (array): CMCC_CM2_VHR4, MRI_AGCM3_2_S, EC_Earth3P_HR, MPI_ESM1_2_XR, NICAM16_8S, FGOALS_f3_H, HiRAM_SIT_HR. Omit to use the server default. |
timezone |
No |
Use auto for local time |
cell_selection |
No |
land, sea, or nearest grid cell preference |
Data note: Dates before the current year represent CMIP6 model simulation output for validation purposes, not observed historical measurements. For real historical weather data, use weather_archive.
Examples
"Get the ECMWF forecast for Bordeaux tomorrow"
geocoding with name: "Bordeaux" → coordinates
ecmwf_forecast with coordinates + models: "ecmwf_ifs", daily: ["temperature_2m_max", "temperature_2m_min", "precipitation_sum", "weather_code"], forecast_days: 2, timezone: "auto"
"Compare DWD ICON and GFS forecasts for Berlin this week"
geocoding with name: "Berlin" → coordinates
- Two parallel calls:
dwd_icon_forecast with models: "dwd_icon_seamless", daily: ["temperature_2m_max", "precipitation_sum"], forecast_days: 7, timezone: "auto"
gfs_forecast with models: "ncep_gfs_global", daily: ["temperature_2m_max", "precipitation_sum"], forecast_days: 7, timezone: "auto"
"Show me forecast uncertainty for Paris next week"
geocoding with name: "Paris" → coordinates
ensemble_forecast with coordinates + hourly: ["temperature_2m"], forecast_days: 10
The response will contain temperature_2m_member01, temperature_2m_member02, etc. — calculate spread across members for uncertainty.
"What will the climate be like in Lyon in 2040?"
geocoding with name: "Lyon" → coordinates
climate_projection with coordinates + start_date: "2040-01-01", end_date: "2040-12-31", models: ["MRI_AGCM3_2_S"], daily: ["temperature_2m_max", "temperature_2m_min", "precipitation_sum"]
Best Practices
- Don't use regional model tools outside their geographic coverage —
dwd_icon_forecast for Asia will return empty or incorrect data.
ecmwf_forecast accepts only 3 model IDs — ecmwf_ifs, ecmwf_ifs025, or best_match. Any other ECMWF key causes HTTP 400.
- Ensemble output is member arrays, not scalar values — process all
_memberNN keys to derive uncertainty ranges.
- Climate data before the current year is CMIP6 simulation, not observed data — use
weather_archive for real historical measurements.
seasonal_forecast outputs anomalies, not absolute values — it answers "warmer than usual?" not "what temperature exactly?".
- Geocode first if you only have a city name.
1---2name: open-meteo-advanced3description: Use when the user wants a specific weather model, needs ensemble uncertainty ranges, requests seasonal outlooks, or asks for long-term climate projections.4---56# Open-Meteo MCP — Advanced78## Overview910Use this skill when:11- The user asks for a **specific weather model** (ECMWF, GFS, DWD ICON, Météo-France, JMA, MET Norway, GEM)12- The user wants to **compare models** (make parallel calls, one per model tool)13- Forecasts **beyond 16 days** are needed14- **Ensemble uncertainty** / confidence intervals are requested15- A **seasonal outlook** (1–7 months) or **climate projection** (to 2050) is needed1617For everyday weather questions, use `open-meteo` instead.1819## Model Selection Guide2021| Tool | Provider | Geographic Focus | Horizon | Best For |22|------|----------|-----------------|---------|----------|23| `ecmwf_forecast` | ECMWF IFS | Global | 15 days | Highest global accuracy |24| `gfs_forecast` | NOAA GFS | Global | 16 days | Global, especially Americas |25| `dwd_icon_forecast` | DWD ICON | **Europe only** | 2–7.5 days | High-res Europe |26| `meteofrance_forecast` | Météo-France AROME/ARPEGE | France, DOM-TOM, Mediterranean/Europe | 2–4 days | France + nearby regions |27| `jma_forecast` | JMA | Asia-Pacific | 4–11 days | Japan and Asia-Pacific |28| `metno_forecast` | MET Norway | Nordic-primary (global extension via blending) | 2.5 days | Nordic region precision |29| `gem_forecast` | Environment Canada GEM | North America | 2–10 days | Canada |30| `ensemble_forecast` | Multi-model | Global | 35 days | Forecast uncertainty ranges |31| `seasonal_forecast` | ECMWF SEAS5 | Global | up to 217 days | 1–7 month outlook |32| `climate_projection` | CMIP6 | Global | 1950–2050 | Multi-decade scenarios |3334**Geographic constraints:**35- `dwd_icon_forecast`: Europe only — do not use for other regions.36- `metno_forecast` with `metno_nordic`: Nordic region only. `metno_seamless` is Nordic-primary with global extension via blending, not a general-purpose global model.37- `meteofrance_forecast`: France + DOM-TOM + Mediterranean/Europe coverage.3839## Key Parameters4041### Model-specific forecast tools4243Applies to: `dwd_icon_forecast`, `gfs_forecast`, `meteofrance_forecast`, `ecmwf_forecast`, `jma_forecast`, `metno_forecast`, `gem_forecast`4445All share the same parameters as `weather_forecast` (see `open-meteo` skill), plus:4647| Parameter | Required | Notes |48|-----------|----------|-------|49| `latitude`, `longitude` | Yes | |50| `models` | Yes* | **Exactly one model per request** |51| `hourly` / `daily` / `current` | No** | Same variables as `weather_forecast` |5253\*`metno_forecast` can omit `models` to use the default Met.no model.54\*\*At least one variable group required.5556**Multi-model comparison:** Make parallel tool calls, one per model.5758**Model key examples:**5960| Tool | Example model keys |61|------|--------------------|62| `ecmwf_forecast` | `ecmwf_ifs`, `ecmwf_ifs025`, `best_match` (only these 3 are valid) |63| `dwd_icon_forecast` | `dwd_icon_seamless`, `dwd_icon_global`, `dwd_icon_eu`, `dwd_icon_d2` |64| `gfs_forecast` | `ncep_gfs_global`, `ncep_gfs_seamless`, `ncep_hrrr_conus` |65| `meteofrance_forecast` | `meteofrance_seamless`, `meteofrance_arome_france`, `meteofrance_arpege_europe` |66| `jma_forecast` | `jma_seamless`, `jma_msm`, `jma_gsm` |67| `metno_forecast` | `metno_nordic`, `metno_seamless` |68| `gem_forecast` | `gem_global`, `gem_regional`, `gem_seamless` |6970**ECMWF warning:** `ecmwf_ifs_025`, `ecmwf_ifs_hres_9km`, and `ecmwf_aifs_025_single` are NOT valid on `ecmwf_forecast` and will return HTTP 400.7172### `ensemble_forecast`7374| Parameter | Required | Notes |75|-----------|----------|-------|76| `latitude`, `longitude` | Yes | |77| `models` | No | One ensemble model, or an array of models to compare several ensemble systems in one call |78| `hourly` | No* | Same variables as `weather_forecast` |79| `forecast_days` | No | 0–36, default 7 |80| `past_days` / `past_hours` | No | Recent history, day or hour granularity |81| `forecast_hours` | No | Hour-granularity alternative to forecast_days |82| `start_date` / `end_date` | No | `YYYY-MM-DD` alternative to forecast_days |83| `temporal_resolution` | No | `native` (default), `hourly`, `hourly_3`, or `hourly_6` |84| `cell_selection` | No | `land`, `sea`, or `nearest` grid cell preference |8586**Response format:** Each variable is returned as one array per ensemble member, suffixed with the model name when `models` contains more than one entry:8788```json89{90 "hourly": {91 "time": ["2024-01-01T00:00", "2024-01-01T01:00", "..."],92 "temperature_2m_member01": [2.1, 2.3, "..."],93 "temperature_2m_member02": [1.8, 2.0, "..."],94 "temperature_2m_member03": [2.4, 2.6, "..."]95 }96}97```9899To derive uncertainty ranges, calculate min/max/percentiles across all `_memberNN` arrays for each timestep.100101### `seasonal_forecast`102103| Parameter | Required | Notes |104|-----------|----------|-------|105| `latitude`, `longitude` | Yes | |106| `hourly` | No* | 6-hourly variables: `temperature_2m`, `precipitation`, `wind_speed_10m`, `relative_humidity_2m`, `cloud_cover`, `pressure_msl`, `dew_point_2m`, `sea_surface_temperature`, `wave_height`, `soil_moisture_0_to_7cm` and other depth buckets |107| `daily` | No* | `temperature_2m_max`, `temperature_2m_min`, `temperature_2m_mean`, `sunrise`, `sunset`, `weather_code`, `dew_point_2m_mean`, `sea_surface_temperature_mean` |108| `weekly` | No* | Weekly means/anomalies, e.g. `temperature_2m_mean`, `temperature_2m_anomaly`, `precipitation_anomaly`, `precipitation_efi` |109| `monthly` | No* | Monthly means/anomalies, e.g. `temperature_2m_mean`, `temperature_2m_anomaly`, `sea_ice_cover_mean`, `evapotranspiration_mean` |110| `models` | No | `best_match` (default), `ecmwf_seas5`, `ecmwf_ec46`, or their ensemble-mean variants |111| `forecast_days` | No | 0–217, default 183 |112| `cell_selection` | No | `land`, `sea`, or `nearest` grid cell preference |113114\*At least one of `hourly`, `daily`, `weekly`, or `monthly` is required.115116Output represents **ensemble anomalies relative to climatology**, not absolute forecasts.117118### `climate_projection`119120| Parameter | Required | Notes |121|-----------|----------|-------|122| `latitude`, `longitude` | Yes | |123| `start_date` | Yes | `YYYY-MM-DD` (supported range: 1950-01-01 to 2050-12-31) |124| `end_date` | Yes | `YYYY-MM-DD` |125| `daily` | No | One or more of: `temperature_2m_max`, `temperature_2m_min`, `temperature_2m_mean`, `precipitation_sum`, `wind_speed_10m_mean`, `wind_speed_10m_max`, `cloud_cover_mean`, `relative_humidity_2m_mean`, `shortwave_radiation_sum`, `soil_moisture_0_to_7cm_mean`, `pressure_msl_mean` |126| `models` | No | CMIP6 models (array): `CMCC_CM2_VHR4`, `MRI_AGCM3_2_S`, `EC_Earth3P_HR`, `MPI_ESM1_2_XR`, `NICAM16_8S`, `FGOALS_f3_H`, `HiRAM_SIT_HR`. Omit to use the server default. |127| `timezone` | No | Use `auto` for local time |128| `cell_selection` | No | `land`, `sea`, or `nearest` grid cell preference |129130**Data note:** Dates before the current year represent CMIP6 model simulation output for validation purposes, not observed historical measurements. For real historical weather data, use `weather_archive`.131132## Examples133134**"Get the ECMWF forecast for Bordeaux tomorrow"**1351. `geocoding` with `name: "Bordeaux"` → coordinates1362. `ecmwf_forecast` with coordinates + `models: "ecmwf_ifs"`, `daily: ["temperature_2m_max", "temperature_2m_min", "precipitation_sum", "weather_code"]`, `forecast_days: 2`, `timezone: "auto"`137138**"Compare DWD ICON and GFS forecasts for Berlin this week"**1391. `geocoding` with `name: "Berlin"` → coordinates1402. Two parallel calls:141 - `dwd_icon_forecast` with `models: "dwd_icon_seamless"`, `daily: ["temperature_2m_max", "precipitation_sum"]`, `forecast_days: 7`, `timezone: "auto"`142 - `gfs_forecast` with `models: "ncep_gfs_global"`, `daily: ["temperature_2m_max", "precipitation_sum"]`, `forecast_days: 7`, `timezone: "auto"`143144**"Show me forecast uncertainty for Paris next week"**1451. `geocoding` with `name: "Paris"` → coordinates1462. `ensemble_forecast` with coordinates + `hourly: ["temperature_2m"]`, `forecast_days: 10`147 The response will contain `temperature_2m_member01`, `temperature_2m_member02`, etc. — calculate spread across members for uncertainty.148149**"What will the climate be like in Lyon in 2040?"**1501. `geocoding` with `name: "Lyon"` → coordinates1512. `climate_projection` with coordinates + `start_date: "2040-01-01"`, `end_date: "2040-12-31"`, `models: ["MRI_AGCM3_2_S"]`, `daily: ["temperature_2m_max", "temperature_2m_min", "precipitation_sum"]`152153## Best Practices154155- **Don't use regional model tools outside their geographic coverage** — `dwd_icon_forecast` for Asia will return empty or incorrect data.156- **`ecmwf_forecast` accepts only 3 model IDs** — `ecmwf_ifs`, `ecmwf_ifs025`, or `best_match`. Any other ECMWF key causes HTTP 400.157- **Ensemble output is member arrays, not scalar values** — process all `_memberNN` keys to derive uncertainty ranges.158- **Climate data before the current year is CMIP6 simulation**, not observed data — use `weather_archive` for real historical measurements.159- **`seasonal_forecast` outputs anomalies**, not absolute values — it answers "warmer than usual?" not "what temperature exactly?".160- **Geocode first** if you only have a city name.