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–9 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 |
45–274 days |
1–9 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_us_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 |
Yes |
One ensemble model per request (required) |
hourly |
No* |
Same variables as weather_forecast |
forecast_days |
No |
1–35, default 7 |
Response format: Each variable is returned as one array per ensemble member:
{
"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, soil_moisture_0_to_10cm |
daily |
No* |
temperature_2m_max, temperature_2m_min, precipitation_sum, wind_speed_10m_max |
forecast_days |
No |
45, 92 (default), 183, or 274 |
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 |
Yes |
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_10cm_mean, pressure_msl_mean |
models |
Yes |
CMIP6 models (array, at least one): CMCC_CM2_VHR4, MRI_AGCM3_2_S, EC_Earth3P_HR, MPI_ESM1_2_XR, NICAM16_8S, FGOALS_f3_H, HiRAM_SIT_HR |
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.
Source: cmer81/open-meteo-mcp — distributed by TomeVault.
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–9 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 | 45–274 days | 1–9 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_us_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` | Yes | One ensemble model per request (required) |78| `hourly` | No* | Same variables as `weather_forecast` |79| `forecast_days` | No | 1–35, default 7 |8081**Response format:** Each variable is returned as one array per ensemble member:8283```json84{85 "hourly": {86 "time": ["2024-01-01T00:00", "2024-01-01T01:00", "..."],87 "temperature_2m_member01": [2.1, 2.3, "..."],88 "temperature_2m_member02": [1.8, 2.0, "..."],89 "temperature_2m_member03": [2.4, 2.6, "..."]90 }91}92```9394To derive uncertainty ranges, calculate min/max/percentiles across all `_memberNN` arrays for each timestep.9596### `seasonal_forecast`9798| Parameter | Required | Notes |99|-----------|----------|-------|100| `latitude`, `longitude` | Yes | |101| `hourly` | No* | 6-hourly variables: `temperature_2m`, `precipitation`, `wind_speed_10m`, `relative_humidity_2m`, `cloud_cover`, `pressure_msl`, `soil_moisture_0_to_10cm` |102| `daily` | No* | `temperature_2m_max`, `temperature_2m_min`, `precipitation_sum`, `wind_speed_10m_max` |103| `forecast_days` | No | `45`, `92` (default), `183`, or `274` |104105Output represents **ensemble anomalies relative to climatology**, not absolute forecasts.106107### `climate_projection`108109| Parameter | Required | Notes |110|-----------|----------|-------|111| `latitude`, `longitude` | Yes | |112| `start_date` | Yes | `YYYY-MM-DD` (supported range: 1950-01-01 to 2050-12-31) |113| `end_date` | Yes | `YYYY-MM-DD` |114| `daily` | Yes | 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_10cm_mean`, `pressure_msl_mean` |115| `models` | Yes | CMIP6 models (array, at least one): `CMCC_CM2_VHR4`, `MRI_AGCM3_2_S`, `EC_Earth3P_HR`, `MPI_ESM1_2_XR`, `NICAM16_8S`, `FGOALS_f3_H`, `HiRAM_SIT_HR` |116117**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`.118119## Examples120121**"Get the ECMWF forecast for Bordeaux tomorrow"**1221. `geocoding` with `name: "Bordeaux"` → coordinates1232. `ecmwf_forecast` with coordinates + `models: "ecmwf_ifs"`, `daily: ["temperature_2m_max", "temperature_2m_min", "precipitation_sum", "weather_code"]`, `forecast_days: 2`, `timezone: "auto"`124125**"Compare DWD ICON and GFS forecasts for Berlin this week"**1261. `geocoding` with `name: "Berlin"` → coordinates1272. Two parallel calls:128 - `dwd_icon_forecast` with `models: "dwd_icon_seamless"`, `daily: ["temperature_2m_max", "precipitation_sum"]`, `forecast_days: 7`, `timezone: "auto"`129 - `gfs_forecast` with `models: "ncep_gfs_global"`, `daily: ["temperature_2m_max", "precipitation_sum"]`, `forecast_days: 7`, `timezone: "auto"`130131**"Show me forecast uncertainty for Paris next week"**1321. `geocoding` with `name: "Paris"` → coordinates1332. `ensemble_forecast` with coordinates + `hourly: ["temperature_2m"]`, `forecast_days: 10`134 The response will contain `temperature_2m_member01`, `temperature_2m_member02`, etc. — calculate spread across members for uncertainty.135136**"What will the climate be like in Lyon in 2040?"**1371. `geocoding` with `name: "Lyon"` → coordinates1382. `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"]`139140## Best Practices141142- **Don't use regional model tools outside their geographic coverage** — `dwd_icon_forecast` for Asia will return empty or incorrect data.143- **`ecmwf_forecast` accepts only 3 model IDs** — `ecmwf_ifs`, `ecmwf_ifs025`, or `best_match`. Any other ECMWF key causes HTTP 400.144- **Ensemble output is member arrays, not scalar values** — process all `_memberNN` keys to derive uncertainty ranges.145- **Climate data before the current year is CMIP6 simulation**, not observed data — use `weather_archive` for real historical measurements.146- **`seasonal_forecast` outputs anomalies**, not absolute values — it answers "warmer than usual?" not "what temperature exactly?".147- **Geocode first** if you only have a city name.148149---150> Source: [cmer81/open-meteo-mcp](https://github.com/cmer81/open-meteo-mcp) — distributed by [TomeVault](https://tomevault.io).151<!-- tomevault:4.0:skill_md:2026-06-23 -->