Openmeteo Get Forecast
openmeteo_get_forecastWeather 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 week, since the archive’s ERA5 components lag by about a week. 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. Set current_variables for conditions at this instant — Open-Meteo serves those from 15-minute model data, which is more precise than picking the nearest hourly row, and the response carries a current object plus a current_units map. Set models to compare deterministic models side by side (e.g., ["ncep_gfs_seamless", "ecmwf_ifs025", "dwd_icon_seamless"]) — where they disagree, the forecast is uncertain. With 2+ models every hourly and daily key carries the model name as a suffix (temperature_2m_ecmwf_ifs025); with models omitted the data is Open-Meteo’s best_match blend. A wide window — a large past_days plus many hourly variables — produces thousands of records; these spill to a DataCanvas when canvas is enabled, returning canvas_id and table_name with truncated: true — inspect the staged columns with openmeteo_dataframe_describe, then query the full set with openmeteo_dataframe_query. With canvas disabled they return a bounded preview instead. At least one of current_variables, hourly_variables, or daily_variables is required.
Tool call template
Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.
{
"id": 1,
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"arguments": {
"latitude": "<latitude>",
"longitude": "<longitude>"
},
"name": "openmeteo_get_forecast"
}
}Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| models | No | Deterministic forecast models to read from, to compare modeling centers side by side. Documented: best_match, ecmwf_ifs, ecmwf_ifs025, ecmwf_aifs025_single, cma_grapes_global, bom_access_global, ncep_gfs_seamless, ncep_gfs_global, ncep_hrrr_conus, ncep_nbm_conus, ncep_nam_conus, ncep_aigfs025, ncep_hgefs025_ensemble_mean, jma_seamless, jma_msm, jma_gsm, kma_seamless, kma_ldps, kma_gdps, dwd_icon_seamless, dwd_icon_global, dwd_icon_global_native, dwd_aicon_global_native, dwd_icon_eu, dwd_icon_eu_native, dwd_icon_d2, dwd_icon_d2_native, dwd_icon_d2_ruc_native, cmc_gem_seamless, cmc_gem_gdps, cmc_gem_rdps, cmc_gem_hrdps, cmc_gem_hrdps_west, meteofrance_seamless, meteofrance_arpege_world, meteofrance_arpege_europe, meteofrance_arome_france, meteofrance_arome_france_hd, italia_meteo_arpae_icon_2i, metno_seamless, metno_nordic, knmi_seamless, knmi_harmonie_arome_europe, knmi_harmonie_arome_netherlands, dmi_seamless, dmi_harmonie_arome_europe, ukmo_seamless, ukmo_global_deterministic_10km, ukmo_uk_deterministic_2km, meteoswiss_icon_seamless, meteoswiss_icon_ch1, meteoswiss_icon_ch2, geosphere_seamless, geosphere_arome_austria, chmi_aladin_seamless, chmi_aladin_central_europe_2km, chmi_aladin_cz_1km. Older spellings such as gfs_seamless, icon_seamless, icon_d2, and gfs_hrrr still resolve. Omit to use Open-Meteo's best_match blend. With 2+ models every hourly and daily column and unit key is suffixed with the model name (temperature_2m_max_ecmwf_ifs025); one model keeps plain names. Regional models serve only their own domain: when every requested model misses the coordinate the call fails as coverage_gap, and when only some do, Open-Meteo drops those and the notice names them, or, when one model is left with unsuffixed columns, says the values cannot be attributed to a model. current_variables takes at most one model. A name outside this list is sent upstream rather than rejected here. | |
| latitude | Yes | Latitude in decimal degrees (e.g., 47.6062 for Seattle). Use openmeteo_search_locations to resolve a place name to coordinates. | |
| timezone | No | IANA timezone (e.g., "America/Los_Angeles") or "auto" to use the location's local timezone. Default "auto". The timezone from openmeteo_search_locations is ideal to pass here. | auto |
| canvas_id | No | DataCanvas token for wide past_days or multi-variable queries. When a result is too large to return inline — driven by total payload size, so a wide multi-variable pull can spill at any row count — it spills to this canvas: pass the returned token to openmeteo_dataframe_describe to list the staged table and its columns, then to openmeteo_dataframe_query to run SQL against it. Omit to create a fresh canvas. | |
| longitude | Yes | Longitude in decimal degrees (e.g., -122.3321 for Seattle). | |
| past_days | No | Include this many days of past data before today (0–92). Use for recent history — the archive’s ERA5 components lag by about a week. Default 0. | |
| forecast_days | No | Number of forecast days (1–16). Default 7. | |
| cell_selection | No | Which grid cell answers the coordinate. Omitted, Open-Meteo picks a land cell, so a point offshore reads conditions on shore. Set "sea" for a point on the water — wind for sailing, surf, or offshore wind — so a water cell answers; keep the default for a point on land, which "sea" moves onto the water. "nearest" takes the closest cell, land or water. The response latitude and longitude name the cell that answered. | |
| daily_variables | No | Daily summary variables (e.g., ["temperature_2m_max", "temperature_2m_min", "precipitation_sum", "wind_speed_10m_max", "sunrise", "sunset", "uv_index_max"]). Daily names only — an hourly name such as cloud_cover or temperature_2m belongs in hourly_variables and is rejected here; for a daily summary of an hourly variable use its published aggregate (cloud_cover_max, cloud_cover_mean, cloud_cover_min). At least one of current_variables, hourly_variables, or daily_variables is required. | |
| wind_speed_unit | No | Wind speed unit: "kmh" (km/h), "mph", "ms" (m/s), or "kn" (knots). Default "kmh". | kmh |
| hourly_variables | No | Hourly variables to fetch (e.g., ["temperature_2m", "precipitation", "wind_speed_10m", "relative_humidity_2m", "cloud_cover", "uv_index", "apparent_temperature"]). Hourly names only — a daily aggregate such as temperature_2m_max or precipitation_sum belongs in daily_variables and is rejected here. At least one of current_variables, hourly_variables, or daily_variables is required. | |
| temperature_unit | No | Temperature unit. Default "celsius". | celsius |
| current_variables | No | Variables to return for the current instant (e.g., ["temperature_2m", "precipitation", "wind_speed_10m", "weather_code"]). Uses Open-Meteo's 15-minute current-conditions data, so it answers "what is it doing right now?" without requesting an hourly series and picking a row. Takes the hourly variable names; a daily-only name such as temperature_2m_max comes back null with the unit "undefined" and is reported in the notice. Satisfies the variable requirement on its own. | |
| precipitation_unit | No | Precipitation unit: "mm" or "inch". Default "mm". | mm |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| daily | No | Per-day records. Each object has a "time" field (YYYY-MM-DD) plus one key per requested variable with its value — per model, suffixed with the model name, when 2+ models were requested. Units are in the daily_units map. Absent when only hourly_variables were requested. When truncated, contains only a preview — query canvas_id for the full dataset when one is present. | |
| error | No | Present when the call failed. Absent on success. | |
| hourly | No | Per-hour records. Each object has a "time" field (ISO 8601) plus one key per requested variable with its value — one key per variable per model, suffixed with the model name (temperature_2m_ecmwf_ifs025), when 2+ models were requested. Units are in the hourly_units map. Absent when only daily_variables were requested. When truncated, contains only a preview — query canvas_id for the full dataset when one is present. | |
| models | No | Forecast models requested — echoes the models parameter. Absent when models was omitted, which means the data came from Open-Meteo's best_match blend. | |
| notice | No | Everything this response needs to say beyond the data, composed into one advisory: columns the endpoint returned with the unit "undefined" (a name it parsed but does not serve in the requested cadence, or — on a model-suffixed column — a variable that model does not serve); requested models Open-Meteo left out for having no data at this coordinate, or the plain-named columns a multi-model request cannot attribute to one model; current values that are null under a real unit (no coverage at this location and time); recognized variables that came back null under a real unit, with the timestamps that do carry values — a variable null across the whole window is attributed to the selected model that returned it empty when another selected model returned values for it, and otherwise to the location, the window, or the selected models; and, when the result spilled, either the canvas and table holding the full row set plus the two dataframe tools that read it, or — with DataCanvas disabled — why there is no canvas_id and how to reach the rows the preview omits. | |
| current | No | Conditions at a single instant: one key per requested current variable alongside time and interval. Units are in the current_units map. Absent when current_variables was not requested. | |
| latitude | No | Latitude of the grid cell that answered, picked by cell_selection (a land cell when omitted) — with models set, on the grid of the first listed model that covers the coordinate | |
| timezone | No | Resolved IANA timezone | |
| canvas_id | No | DataCanvas token for the staged full dataset. Present only when truncated is true AND DataCanvas is enabled (CANVAS_PROVIDER_TYPE=duckdb) — absent otherwise, in which case the preview is all this response carries. Pass to openmeteo_dataframe_describe to list the staged table and its columns, then to openmeteo_dataframe_query to run SQL against it. | |
| elevation | No | Terrain elevation of the requested coordinate (meters), whichever cell answered | |
| longitude | No | Longitude of the grid cell that answered (with models set, on the grid of the first listed model that covers the coordinate) | |
| truncated | No | True when the response was too large to return inline, so hourly and daily carry a bounded preview rather than the full set. With DataCanvas enabled the complete data is staged at canvas_id — every hourly and daily row, including any column the preview omits. With it disabled there is no canvas_id, and the omitted rows are reached only by narrowing the request. | |
| table_name | No | DuckDB table name for the staged data — use as the FROM target in openmeteo_dataframe_query SQL; openmeteo_dataframe_describe lists its columns. Present only alongside canvas_id. | |
| daily_units | No | Map of variable name → unit string for daily data, model-suffixed like the records when 2+ models were requested. Absent when no daily_variables were requested. | |
| hourly_units | No | Map of variable name → unit string for hourly data (e.g., {"temperature_2m": "°C", "precipitation": "mm"}), keyed by the same model-suffixed names as the records when 2+ models were requested. Absent when no hourly_variables were requested. | |
| record_count | No | Total number of records (hourly + daily rows) — the full upstream total when truncated is true, not the combined length of the hourly and daily previews. | |
| current_units | No | Map of key → unit string for the current block, covering time and interval as well as each requested variable (e.g., {"interval": "seconds", "temperature_2m": "°C"}). Absent when no current_variables were requested. | |
| utc_offset_seconds | No | UTC offset in seconds for this timezone at query time |