Skip to main content
Glama

Server Details

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

If you are the author of this connector, you can claim ownership with GitHub, an HTTP challenge, or a DNS record. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Last Tested
Transport
Streamable HTTP
URL
Repository
cyanheads/open-meteo-mcp-server
GitHub Stars
5
Server Listing
open-meteo-mcp-server

TDQS

A4.5/5.0

Scored across 11 tools

Disambiguation4/5

The eight openmeteo_get_* tools are clearly separated by domain (forecast, historical, marine, air quality, ensemble, flood, climate, elevation), and the two dataframe tools are distinct (describe vs query). The only minor ambiguity is between openmeteo_get_forecast with past_days and openmeteo_get_historical, but the descriptions explicitly address when to use which.

Naming Consistency5/5

All tools follow a consistent openmeteo_<verb>_<noun> pattern: openmeteo_get_forecast, openmeteo_get_historical, openmeteo_search_locations, openmeteo_dataframe_describe, openmeteo_dataframe_query. The verb is always get or search/describe/query, and the resource is always a clear noun. No mixed conventions or inconsistent casing.

Tool Count5/5

11 tools is well-scoped for a weather data server: 8 data retrieval endpoints covering distinct domains, 1 location search, and 2 dataframe utilities for handling large result sets. Each tool earns its place and the count is within the ideal 3-15 range.

Completeness5/5

The tool surface covers the full weather data lifecycle: location resolution (search_locations), all major Open-Meteo data domains (forecast, historical, marine, air quality, ensemble, flood, climate, elevation), and large-result handling (dataframe describe/query). No obvious dead ends—every get tool's large outputs are handled by the dataframe tools, and the search tool feeds the coordinate-based get tools.

Available Tools

11 tools
openmeteo_dataframe_describeOpenmeteo Dataframe DescribeA
Read-onlyIdempotent
Inspect

List the tables and their columns on a DataCanvas staged by openmeteo_get_forecast, openmeteo_get_historical, openmeteo_get_marine, openmeteo_get_air_quality, openmeteo_get_ensemble, openmeteo_get_flood, or openmeteo_get_climate. Call this first to discover table names before querying with openmeteo_dataframe_query.

ParametersJSON Schema
NameRequiredDescriptionDefault
canvas_idYesCanvas ID returned by openmeteo_get_forecast, openmeteo_get_historical, openmeteo_get_marine, openmeteo_get_air_quality, openmeteo_get_ensemble, openmeteo_get_flood, or openmeteo_get_climate when truncated: true.

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoPresent when the call failed. Absent on success.
tablesNoTables and views registered on this canvas.
canvas_idNoCanvas ID that was inspected.
expires_atNoISO 8601 expiry after the sliding 24 h TTL.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint and idempotentHint, and the description adds meaningful operational context: the tool only applies to DataCanvas objects staged by specific openmeteo_get_* calls. The 'List' wording is consistent with the read-only and idempotent behavior declared by the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description contains two focused sentences: the first states what the tool does, and the second states the recommended call order. It is concise, front-loaded, and contains no filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter tool with an output schema and read-only/idempotent annotations, the description provides the necessary workflow context: how the DataCanvas is staged, what the tool returns, and how it relates to openmeteo_dataframe_query. Nothing essential is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the input schema already explains that canvas_id must come from a truncated-result run of the openmeteo_get_* tools. The tool description adds no new parameter-level semantics, but none are needed because the schema fully covers the single parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a concrete verb-resource pair ('List the tables and their columns on a DataCanvas') and names exactly which staging tools produce the relevant data. It also differentiates the tool from openmeteo_dataframe_query, so an agent can identify it without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives an explicit workflow instruction: 'Call this first to discover table names before querying with openmeteo_dataframe_query.' This clearly tells the agent when to use this tool and which sibling tool to use afterward.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

openmeteo_dataframe_queryOpenmeteo Dataframe QueryA
Read-only
Inspect

Run a read-only SQL SELECT against tables staged on a DataCanvas by openmeteo_get_forecast, openmeteo_get_historical, openmeteo_get_marine, openmeteo_get_air_quality, openmeteo_get_ensemble, openmeteo_get_flood, or openmeteo_get_climate. Pass the canvas_id returned when any of those tools spills (truncated: true), and reference the exact table_name those tools return alongside it. Call openmeteo_dataframe_describe to list staged tables and their columns when you need to discover names.

ParametersJSON Schema
NameRequiredDescriptionDefault
sqlYesRead-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 month ORDER BY month
canvas_idYesCanvas ID returned by openmeteo_get_forecast, openmeteo_get_historical, openmeteo_get_marine, openmeteo_get_air_quality, openmeteo_get_ensemble, openmeteo_get_flood, or openmeteo_get_climate when truncated: true.

Output Schema

ParametersJSON Schema
NameRequiredDescription
rowsNoResult rows — a preview capped at 100. When row_count exceeds this, page the rest by re-issuing the SQL with LIMIT / OFFSET.
errorNoPresent when the call failed. Absent on success.
canvas_idNoCanvas ID that was queried.
row_countNoTotal rows in the full result before any cap.

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description reinforces the read-only nature (matching the readOnlyHint annotation) and adds useful context about the spill/truncation mechanism and the requirement to reference the exact table names. This goes beyond the annotation alone, clarifying that the tool operates on staged data and is safe to call without side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences with no waste. The core action is stated first, followed by the necessary context on origin and discovery, and the alternative tool. Every sentence earns its place, and the description is appropriately front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has an output schema (so return format is already captured), the description covers all operational essentials: when to use, what inputs to supply, and how to discover table names. An agent has everything needed to invoke it correctly without further research.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 100% schema description coverage, both parameters are already well-documented. The description adds value by clarifying the provenance of canvas_id (returned by specific tools when truncated) and how sql should reference table names discovered via describe, enriching the schema definitions and reducing ambiguity for an agent.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Run a read-only SQL SELECT') and resource ('tables staged on a DataCanvas'), and explicitly names the sibling tools that stage those tables. It clearly distinguishes itself from the describe tool by focusing on querying rather than listing, leaving no ambiguity about its function.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit usage context: it should be called when any of the listed openmeteo_get_* tools return truncated: true, and it references the canvas_id and table_name from those tools. It also directs the agent to openmeteo_dataframe_describe when table discovery is needed, effectively outlining both when to use this tool and when to use its sibling.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

openmeteo_get_air_qualityOpenmeteo Get Air QualityA
Read-onlyIdempotent
Inspect

Modeled CAMS (Copernicus Atmosphere Monitoring Service) air quality: 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 horizon up to 7 days, with optional past_days (up to 92) for recent history — or start_date and end_date together for an archive range; the CAMS global archive begins in August 2022, and earlier dates return rows of nulls. One window per call: a date range is mutually exclusive with forecast_days and past_days, and needs both ends — a lone start_date or end_date is rejected. Common variables: pm2_5, pm10, carbon_monoxide, nitrogen_dioxide, sulphur_dioxide, ozone, dust, european_aqi, us_aqi, alder_pollen, birch_pollen, grass_pollen, mugwort_pollen, olive_pollen, ragweed_pollen. Set current_variables for pollutant and AQI values at this instant — returned as a current object plus a current_units map, and enough on its own without hourly_variables; the block’s interval field reports how often that value updates (3600 seconds on this endpoint). A wide window — a large past_days or date range plus many 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
end_dateNoEnd date for the archive range (YYYY-MM-DD, inclusive). Must be on or after start_date. Requires start_date — the pair must be sent together, and neither combines with forecast_days or past_days.
latitudeYesLatitude in decimal degrees. Use openmeteo_search_locations to resolve a place name.
timezoneNoIANA timezone or "auto". Default "auto".auto
canvas_idNoDataCanvas token for wide past_days, archive-range, 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.
longitudeYesLongitude in decimal degrees.
past_daysNoInclude this many days of past data before today (0–92). Use for recent history instead of a start_date/end_date range. Default 0. Must stay 0 when start_date/end_date are used.
start_dateNoStart date for the archive range (YYYY-MM-DD, e.g., "2024-07-01"). The CAMS global archive begins in August 2022; earlier dates return rows of nulls, and us_aqi starts a day later than the pollutant series (european_aqi starts with it). Requires end_date — the pair must be sent together, and neither combines with forecast_days or past_days.
forecast_daysNoForecast horizon in days (1–7). Omit for the upstream default of 5. Mutually exclusive with start_date/end_date — omit it entirely when pulling an archive range.
hourly_variablesNoHourly air quality variables (e.g., ["pm2_5", "pm10", "ozone", "nitrogen_dioxide", "european_aqi", "us_aqi"]). At least one of current_variables or hourly_variables is required.
current_variablesNoAir quality variables to return for the current instant (e.g., ["pm2_5", "pm10", "european_aqi", "us_aqi"]). Uses Open-Meteo's current-conditions data, so it answers "what is the AQI now?" without requesting an hourly series and picking a row; the returned interval reports the update cadence, 3600 seconds on this endpoint. Satisfies the variable requirement on its own.

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoPresent when the call failed. Absent on success.
hourlyNoPer-hour records with "time" (ISO 8601) + one key per requested variable. Units: pm2_5/pm10/dust in μg/m³, carbon_monoxide in μg/m³, nitrogen_dioxide/sulphur_dioxide/ozone in μg/m³, european_aqi/us_aqi as index values. When truncated, contains only a preview — query canvas_id for the full dataset when one is present.
noticeNoEverything 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); recognized variables whose requested window falls outside the CAMS archive, with the timestamps that do carry values; 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.
currentNoPollutant and index values 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.
latitudeNoSnapped latitude
timezoneNoResolved IANA timezone
canvas_idNoDataCanvas 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.
longitudeNoSnapped longitude
truncatedNoTrue when the response was too large to return inline, so hourly carries a bounded preview rather than the full set. With DataCanvas enabled the complete data is staged at canvas_id. With it disabled there is no canvas_id, and the omitted rows are reached only by narrowing the request.
table_nameNoDuckDB 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.
data_sourceNoData source identifier — this is modeled CAMS data, forecast or archive, not measured station data.
hourly_unitsNoVariable → unit string for hourly data (e.g., {"pm2_5": "μg/m³", "european_aqi": "EAQI"}).
record_countNoTotal number of hourly records — the full upstream total when truncated is true, not the length of the hourly preview.
current_unitsNoKey → unit string for the current block, covering time and interval as well as each requested variable (e.g., {"interval": "seconds", "pm2_5": "μg/m³"}). Absent when no current_variables were requested.

TDQS

A5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint and idempotentHint, which the description does not contradict. The description goes far beyond annotations by disclosing that data is modeled grid data (not measured), that archive dates before August 2022 return nulls, that us_aqi starts a day later, and that large results spill to a DataCanvas with truncated:true. These behavioral nuances are essential for correct usage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but every sentence earns its place. It opens with the core purpose, then covers the measured-data distinction, time windows, variable lists, current-variable behavior, and spill handling. The structure is logical and front-loaded; there is no filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (10 parameters, multiple time modes, spill behavior, archive caveats) and the presence of an output schema, the description covers all critical aspects an agent needs: how to select time windows, what variables are available, when results spill, and how to recover them. Nothing essential is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds substantial meaning beyond the schema. For example, it explains that start_date requires end_date and the archive start date, that current_variables alone satisfies the variable requirement and reports update cadence, and that past_days is for recent history. The description enriches the schema with practical context and examples.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool returns modeled CAMS air quality data, enumerates the variables, and explicitly contrasts it with measured station data via openaq-mcp-server. This distinguishes it from sibling openmeteo tools like openmeteo_get_forecast or openmeteo_get_historical, leaving no ambiguity about what resource it addresses.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit routing guidance: it names the alternative for measured data, explains the mutually exclusive time-window options (forecast_days vs past_days vs start_date/end_date), and specifies when to use current_variables vs hourly_variables. It also warns about wide queries spilling to DataCanvas and how to handle that. This is comprehensive and unambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

openmeteo_get_climateOpenmeteo Get ClimateA
Read-onlyIdempotent
Inspect

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 (the observed archive, 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. A model name outside that list is sent upstream rather than rejected here, so a model Open-Meteo adds later still works; if upstream rejects the request, the error names the offending model on its own rather than the whole requested list. With 2+ models each variable appears once per model with the model name as suffix (e.g. temperature_2m_max_CMCC_CM2_VHR4); a single or omitted model returns plain variable names. Not all models carry all variables — missing combinations return null. Multi-decade daily pulls across several models produce thousands of records and 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
modelsNoCMIP6 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 name (e.g. temperature_2m_max_MRI_AGCM3_2_S). Omit to use the API default (a single model, unsuffixed columns). A name outside this list is sent upstream rather than rejected here.
end_dateYesEnd date (YYYY-MM-DD, inclusive, max 2050-12-31). Must be on or after start_date.
latitudeYesLatitude in decimal degrees. Use openmeteo_search_locations to resolve a place name to coordinates.
timezoneNoIANA timezone or "auto". Default "auto".auto
canvas_idNoDataCanvas token for multi-decade or multi-model queries. When a result is too large to return inline — driven by total payload size, so a wide multi-model 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 per-model columns, then to openmeteo_dataframe_query to run SQL against it. Omit to create a fresh canvas.
longitudeYesLongitude in decimal degrees.
start_dateYesStart date (YYYY-MM-DD, e.g., "2049-01-01"). CMIP6 projections cover 1950-01-01 to 2050-12-31.
daily_variablesNoDaily 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_unitNoWind speed unit. Default "kmh".kmh
temperature_unitNoTemperature unit. Default "celsius".celsius
precipitation_unitNoPrecipitation unit. Default "mm".mm

Output Schema

ParametersJSON Schema
NameRequiredDescription
dailyNoPer-day records with "time" (YYYY-MM-DD) + one key per requested variable — per-model suffixed keys when 2+ models were requested (e.g. temperature_2m_max_CMCC_CM2_VHR4). Null values mean the model does not carry that variable. When truncated, contains only a preview — query canvas_id for the full dataset when one is present.
errorNoPresent when the call failed. Absent on success.
modelsNoClimate models requested — echoes the models parameter. Absent when models was omitted (API default model; the response carries no provenance).
noticeNoEverything 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); recognized variables a selected model carries no values for, with the dates that do carry values; 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.
latitudeNoSnapped latitude (Open-Meteo snaps to nearest grid point)
timezoneNoResolved IANA timezone
canvas_idNoDataCanvas 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 per-model columns, then to openmeteo_dataframe_query to run SQL against it.
elevationNoElevation at grid point (meters)
longitudeNoSnapped longitude
truncatedNoTrue when the response was too large to return inline, so daily carries a bounded preview rather than the full set. With DataCanvas enabled the complete data is staged at canvas_id. With it disabled there is no canvas_id, and the omitted rows are reached only by narrowing the request.
date_rangeNoDate range of returned data
table_nameNoDuckDB table name for the staged data — use as the FROM target in openmeteo_dataframe_query SQL; openmeteo_dataframe_describe lists its columns, which is the only way to learn the per-model suffixes this request produced. Present only alongside canvas_id.
daily_unitsNoColumn → unit string for daily data (e.g., {"temperature_2m_max_CMCC_CM2_VHR4": "°C"}).
record_countNoTotal number of daily records — the full upstream total when truncated is true, not the length of the daily preview.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint and idempotentHint, but the description adds substantial behavioral detail: bias-correction, daily resolution, handling of unknown models (sent upstream rather than rejected), naming conventions for multiple models (model name suffix), null returns for missing combinations, and the spill-to-DataCanvas behavior with truncated:true and follow-up steps via sibling tools. This goes well beyond what annotations provide and gives an agent accurate expectations for large queries.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but every sentence carries essential information. It front-loads the core purpose, then systematically covers model list, naming conventions, null handling, and canvas spill behavior. The structure is logical and scannable, making it efficient despite its length. There is no filler or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 11 parameters, multiple models, and complex spill behavior, the description is remarkably complete. It explains model selection, variable naming, missing data handling, and how to proceed when results are too large, including pointing to openmeteo_dataframe_describe and openmeteo_dataframe_query. With a full schema and output schema present, nothing critical is missing for an agent to invoke this tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema description coverage is 100%, so all parameters are already documented. The description adds context about model behavior and canvas spill, but these are already partially reflected in the schema (e.g., the models parameter description includes the upstream-send behavior, and canvas_id describes spill). The description does not materially expand parameter semantics beyond the schema, so a baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('get') plus resource ('climate') and explicitly scopes it as 'Long-range climate projections from bias-corrected daily CMIP6 models, covering 1950-01-01 to 2050-12-31 at any coordinate.' It clearly differentiates from the sibling openmeteo_get_historical by calling itself the 'future-projection counterpart.' An agent can immediately understand what this tool does and how it differs from related tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly frames usage with 'Answers "what will conditions look like through 2050?"' and names the alternative openmeteo_get_historical, contrasting it as the observed archive. It also notes 'Daily resolution only,' which helps an agent decide when this tool is appropriate. This is clear when-to-use guidance with a named sibling.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

openmeteo_get_elevationOpenmeteo Get ElevationA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
latitudesYesArray of latitudes in decimal degrees (up to 100). Must be same length as longitudes.
longitudesYesArray of longitudes in decimal degrees (up to 100). Must be same length as latitudes.

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoPresent when the call failed. Absent on success.
elevationsNoElevation values in input order

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and idempotentHint=true, covering the safety and idempotency profile. The description adds the resolution (~90m) and the data source (Copernicus DEM), which is useful context. However, it doesn't disclose potential error behavior (e.g., invalid coordinates, server limitations) or response structure, but the output schema likely covers the latter. Given annotations cover the main behavioral traits, a 3 is appropriate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and well-structured: it states the core function, the resolution, the input format, a capacity limit, and practical use cases in two sentences. No wasted words, and key constraints (100 pairs) are front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only tool with a clear output schema (not shown but indicated), the description covers all necessary aspects: what it does, input constraints, capacity, and use cases. Minor gap: it doesn't mention what the output looks like (e.g., elevation values in meters), but the output schema likely covers that. Also, it doesn't mention coordinate validation or error cases, but these are less critical given the annotations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so each parameter is already documented with ranges, constraints, and their relationship (must be same length). The description adds the semantic context of 'coordinate pairs' and the limit of 100 pairs, but doesn't add much beyond the schema's constraints. Baseline 3 is correct since the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: retrieving terrain elevation from a specific model (Copernicus DEM) at ~90m resolution. It specifies the input (coordinate pairs) and distinguishes it from weather-focused siblings like openmeteo_get_forecast. The verb 'Get Elevation' is specific and resource-oriented.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides a clear 'when to use' context: 'useful for geographic context, elevation-adjusted weather interpretation, or route planning.' It doesn't explicitly state when NOT to use it or list alternatives, but given the distinct purpose (elevation vs weather), the guidance is adequate. A slight gap is not mentioning that for weather queries, siblings like openmeteo_get_forecast should be used instead.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

openmeteo_get_ensembleOpenmeteo Get EnsembleA
Read-onlyIdempotent
Inspect

Probabilistic ensemble weather forecast — up to 64 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_ensemble (51 members, global 0.25°), ecmwf_aifs025_ensemble (51, global 0.25°), ecmwf_ifs_europe_ensemble (51, Europe 9 km), ecmwf_aifs_europe_ensemble (51, Europe 31 km), google_weathernext2_ensemble (64, global 0.25°), ncep_gefs_seamless (31, global blend), ncep_gefs025 (31, global 0.25°), ncep_gefs05 (31, global 50 km, 35 days), ncep_aigefs025 (31, global 0.25°), icon_seamless_eps (20–40, global/Europe blend), icon_global_eps (40, global 26 km), icon_eu_eps (40, Europe 13 km), icon_d2_eps (20, Central Europe 2 km), gem_global_ensemble (21, global 0.25°), bom_access_global_ensemble (18, global 40 km), ukmo_global_ensemble_20km (18, global 20 km), ukmo_uk_ensemble_2km (3, UK 2 km), meteoswiss_icon_ch1_ensemble (11, Central Europe 1 km), meteoswiss_icon_ch2_ensemble (21, Central Europe 2 km). Omit models to use the API default blend. A regional model returns no data outside the area it covers; that comes back as an input error naming the coverage gap, not a transient failure, so pick a global model or move the coordinate inside the region rather than retrying. A model name this list does not carry is still sent upstream, so a newly added one keeps working. Large multi-member, multi-day pulls produce thousands of records and 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 hourly_variables or daily_variables is required.

ParametersJSON Schema
NameRequiredDescriptionDefault
modelsNoEnsemble model to use, one name: ecmwf_ifs025_ensemble (51 members, global 0.25°), ecmwf_aifs025_ensemble (51, global 0.25°), ecmwf_ifs_europe_ensemble (51, Europe 9 km), ecmwf_aifs_europe_ensemble (51, Europe 31 km), google_weathernext2_ensemble (64, global 0.25°), ncep_gefs_seamless (31, global blend), ncep_gefs025 (31, global 0.25°), ncep_gefs05 (31, global 50 km, 35 days), ncep_aigefs025 (31, global 0.25°), icon_seamless_eps (20–40, global/Europe blend), icon_global_eps (40, global 26 km), icon_eu_eps (40, Europe 13 km), icon_d2_eps (20, Central Europe 2 km), gem_global_ensemble (21, global 0.25°), bom_access_global_ensemble (18, global 40 km), ukmo_global_ensemble_20km (18, global 20 km), ukmo_uk_ensemble_2km (3, UK 2 km), meteoswiss_icon_ch1_ensemble (11, Central Europe 1 km), meteoswiss_icon_ch2_ensemble (21, Central Europe 2 km). Member counts include the control run. Omit to use the API default blend. A name outside this list is sent upstream rather than rejected here, so a model Open-Meteo adds later still works.
latitudeYesLatitude in decimal degrees. Use openmeteo_search_locations to resolve a place name to coordinates.
timezoneNoIANA timezone (e.g., "America/Los_Angeles") or "auto" to use the location's local timezone. Default "auto".auto
canvas_idNoDataCanvas token for large multi-member queries. When a result is too large to return inline — driven by total payload size, so a wide member fan-out 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 per-member columns, then to openmeteo_dataframe_query to run SQL against it. Omit to create a fresh canvas.
longitudeYesLongitude in decimal degrees.
past_daysNoInclude this many days of past ensemble data before today (0–92). Default 0.
forecast_daysNoForecast horizon in days (1–16). Default 7.
daily_variablesNoDaily 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, … Daily names only — an hourly name such as precipitation or temperature_2m belongs in hourly_variables and is rejected here; for a daily summary use its published aggregate (precipitation_sum, temperature_2m_max). At least one of hourly_variables or daily_variables required.
wind_speed_unitNoWind speed unit. Default "kmh".kmh
hourly_variablesNoHourly 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 output. Hourly names only — a daily-only aggregate such as precipitation_sum or wind_speed_10m_max belongs in daily_variables and is rejected here; temperature_2m_max and temperature_2m_min are an exception, published here as 3-hourly aggregations as well as daily. At least one of hourly_variables or daily_variables required.
temperature_unitNoTemperature unit. Default "celsius".celsius
precipitation_unitNoPrecipitation unit. Default "mm".mm

Output Schema

ParametersJSON Schema
NameRequiredDescription
dailyNoPer-day records with "time" (YYYY-MM-DD) + per-member columns (e.g., temperature_2m_max_member01). Absent when only hourly_variables were requested. When truncated, contains a preview only — query canvas_id for the full dataset when one is present.
errorNoPresent when the call failed. Absent on success.
modelNoEnsemble model used (e.g. "ecmwf_ifs025_ensemble") — echoes the requested models parameter. Absent when models was omitted (API default blend; the API reports no provenance).
hourlyNoPer-hour records with "time" (ISO 8601) + per-member columns for each requested variable (e.g., temperature_2m_member01, temperature_2m_member02). Absent when only daily_variables were requested. When truncated, contains a preview only — query canvas_id for the full dataset when one is present.
noticeNoEverything this response needs to say beyond the data, composed into one advisory: variables the endpoint returned with the unit "undefined" across every member (a name the selected model does not carry); recognized variables whose requested window runs past the model's horizon, with the timestamps that do carry values; 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.
latitudeNoSnapped latitude (Open-Meteo snaps to nearest grid point)
timezoneNoResolved IANA timezone
canvas_idNoDataCanvas 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 per-member columns, then to openmeteo_dataframe_query to run SQL against it.
elevationNoTerrain elevation at grid point (meters)
longitudeNoSnapped longitude
truncatedNoTrue 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_nameNoDuckDB table name for the staged data — use as the FROM target in openmeteo_dataframe_query SQL; openmeteo_dataframe_describe lists its columns, which is the only way to learn the per-member suffixes this request produced. Present only alongside canvas_id.
daily_unitsNoVariable → unit string for daily data. Absent when no daily_variables were requested.
hourly_unitsNoVariable → unit string for hourly data (e.g., {"temperature_2m_member01": "°C"}). Absent when no hourly_variables were requested.
member_countNoNumber of distinct perturbed ensemble members in the response, counted from the _memberNN column suffixes. The unsuffixed base column (the control run) is not included in this count.
record_countNoTotal number of records (hourly + daily rows) — the full upstream total when truncated is true, not the combined length of the hourly and daily previews.

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses several non-obvious behaviors beyond the readOnly/idempotent hints: regional models return input errors on out-of-area queries, unknown model names are forwarded upstream, and large pulls spill to DataCanvas with truncated:true and a canvas_id/table_name. These are exactly the kind of edge cases that cause agent retries or missteps without explanation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but every sentence carries weight—model list, error semantics, spill behavior, and usage guidance. It is front-loaded with the core purpose and constraints, and the model list is placed in one paragraph for easy scanning. This is appropriate given the tool's complexity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 12 parameters, a rich schema, and an output schema, the description covers all critical invocation concerns: what it returns, how to interpret member columns, which models to pick, how to handle regional limits, and how to retrieve full results via sibling tools. No important operational detail is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already describes all 12 parameters comprehensively (100% coverage). The description adds value by explaining the member suffix naming on outputs, the effect of omitting the models parameter (default blend), and the interaction with canvas_id for large results—details not fully evident from the schema alone. Does not need to reiterate every parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'Probabilistic ensemble weather forecast' and immediately specifies limits (up to 64 members, 16 days, past_days 0–92) and the member-column naming convention. It also states the intended use (compute exceedance probabilities, quantify uncertainty, build decision thresholds), which clearly differentiates it from deterministic forecast tools like openmeteo_get_forecast.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly describes when to use this tool (for probabilistic analysis) and provides crucial operational guidance: how to handle regional model coverage errors (pick a global model or move coordinates, don't retry), and how to deal with large result sets (spill to DataCanvas and use openmeteo_dataframe_describe/query). Also notes the requirement for at least one of hourly_variables/daily_variables.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

openmeteo_get_floodOpenmeteo Get FloodA
Read-onlyIdempotent
Inspect

GloFAS (Global Flood Awareness System) river discharge forecast and historical reanalysis. Returns daily ensemble river discharge (m³/s) for the largest modeled river within 5 km of the given coordinates — no river ID needed. That river is not always the closest one: at 5 km resolution a point near a confluence or a pair of parallel channels can resolve to an unintended reach. When the returned discharge looks unrepresentative for the intended river, Open-Meteo suggests varying the coordinate by about 0.1° and comparing the values. Forecast horizon up to 210 days ahead; reanalysis history back to 1984-01-01. One mode per call: forecast_days for the future outlook, or start_date and end_date together for reanalysis history. The two modes are mutually exclusive, and a date range needs both ends — a lone start_date or end_date is rejected. Available daily variables: "river_discharge" (ensemble mean), "river_discharge_mean", "river_discharge_min", "river_discharge_max", "river_discharge_median", "river_discharge_p25" (25th percentile), "river_discharge_p75" (75th percentile). Returns null for coordinates far from any river or in areas without GloFAS coverage. A wide reanalysis range produces thousands of daily records and spills 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 it returns a bounded preview instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
end_dateNoEnd date for historical reanalysis (YYYY-MM-DD, inclusive). Must be on or after start_date. Requires start_date — the pair must be sent together, and neither combines with forecast_days.
latitudeYesLatitude in decimal degrees. Discharge is returned for the largest modeled river within 5 km of this point — no river ID required, and not necessarily the closest river. Vary the coordinate by about 0.1° and compare when the result looks unrepresentative. Use openmeteo_search_locations to resolve a place name.
timezoneNoIANA timezone or "auto". Default "auto".auto
canvas_idNoDataCanvas token for wide reanalysis queries. When a result is too large to return inline — driven by total payload size, so a 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.
longitudeYesLongitude in decimal degrees. With latitude it selects the largest modeled river within 5 km, which is not necessarily the closest one.
start_dateNoStart date for historical reanalysis (YYYY-MM-DD, e.g., "2023-01-01"). GloFAS reanalysis covers from 1984-01-01. Requires end_date — the pair must be sent together, and neither combines with forecast_days.
forecast_daysNoNumber of forecast days ahead (1–210). Mutually exclusive with start_date/end_date — omit it entirely when pulling a historical range.
daily_variablesNoDaily discharge variables to fetch (e.g., ["river_discharge", "river_discharge_p25", "river_discharge_p75", "river_discharge_min", "river_discharge_max"]). Required.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dailyNoPer-day records with "time" (YYYY-MM-DD) + one key per requested variable containing discharge in m³/s, or null for coordinates outside GloFAS coverage. When truncated, contains only a preview — query canvas_id for the full dataset when one is present.
errorNoPresent when the call failed. Absent on success.
noticeNoEverything this response needs to say beyond the data, composed into one advisory: columns GloFAS returned with the unit "undefined" (a name it parsed but does not serve); recognized variables whose requested range falls outside the coordinate's discharge record, with the dates that do carry values; 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.
latitudeNoSnapped latitude — grid point of the selected river
timezoneNoResolved IANA timezone
canvas_idNoDataCanvas 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.
longitudeNoSnapped longitude — grid point of the selected river
truncatedNoTrue when the response was too large to return inline, so daily carries a bounded preview rather than the full set. With DataCanvas enabled the complete data is staged at canvas_id. With it disabled there is no canvas_id, and the omitted rows are reached only by narrowing the request.
table_nameNoDuckDB 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_unitsNoVariable → unit string for daily data (e.g., {"river_discharge": "m³/s"}).
record_countNoTotal number of daily discharge records — the full staged count when truncated is true, not the length of the daily preview.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations provide only readOnlyHint and idempotentHint, so the description carries the burden of exposing the true call behavior; it does so in detail. It reveals that the returned river is the largest modeled river within 5 km and not necessarily the closest, that null is returned for far or uncovered points, that a wide reanalysis spills to DataCanvas with truncated: true, and that disabling canvas changes the result to a bounded preview. These disclosures materially affect how an agent interprets the response.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long, but it is dense, organized, and each clause carries a distinct constraint or behavior: purpose, no-river-ID qualifier, coordinate caveat, forecast horizon, mode exclusivity, variable list, null behavior, spill mechanics, and fallback. It front-loads the action words and keeps specialized behavior near the end, so the critical filter starts the thought and operational edge cases follow naturally.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 8 parameters, no required output schema for call construction, and only basic annotations, the description needs to give engineers everything necessary to reason about outcomes. It covers the purpose, modes, constraints, nullability, DataCanvas spillover, and how to verify unrepresentative discharges via coordinate variation. The only missing item would be an explicit comparison to generic weather/historical siblings, but the tool name and content already make the selection rationale obvious.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema parameter descriptions already cover all 8 parameters, so the baseline is 3. The description supplements this by explaining the semantics behind mode exclusivity, the forecast_days 1–210 window, the reanalysis back to 1984, and the full set of daily variable options such as river_discharge_p25 and p75. It weaves parameters into operational workflows (e.g., coordinate variation and spill conditions) rather than just restating ‘YYYY-MM-DD’ and 'decimal degrees'.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names the specific resource ('GloFAS river discharge forecast and historical reanalysis'), states the exact output (daily ensemble river discharge in m³/s), and explains the geolocation model (largest river within 5 km) so it cannot be confused with generic forecast or historical tools. It also fills out the 'flood' focus of the name without relying on the title, and gives clear boundaries such as forecast horizon and reanalysis range.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives expanded usage instruction: two mutually exclusive modes, the need for both start_date and end_date together, the 0.1° coordinate-variation fallback, and the DataCanvas spill path for large results. It does not explicitly contrast with sibling tools like openmeteo_get_forecast or openmeteo_get_historical, but the flood-specific context and mode rules make the intended call pattern unmistakable.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

openmeteo_get_forecastOpenmeteo Get ForecastA
Read-onlyIdempotent
Inspect

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 the archive’s ERA5 components lag by up to ~5 days. 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. 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
latitudeYesLatitude in decimal degrees (e.g., 47.6062 for Seattle). Use openmeteo_search_locations to resolve a place name to coordinates.
timezoneNoIANA 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_idNoDataCanvas 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.
longitudeYesLongitude in decimal degrees (e.g., -122.3321 for Seattle).
past_daysNoInclude this many days of past data before today (0–92). Use for recent history — the archive’s ERA5 components lag by up to ~5 days. Default 0.
forecast_daysNoNumber of forecast days (1–16). Default 7.
daily_variablesNoDaily 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_unitNoWind speed unit: "kmh" (km/h), "mph", "ms" (m/s), or "kn" (knots). Default "kmh".kmh
hourly_variablesNoHourly 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_unitNoTemperature unit. Default "celsius".celsius
current_variablesNoVariables 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_unitNoPrecipitation unit: "mm" or "inch". Default "mm".mm

Output Schema

ParametersJSON Schema
NameRequiredDescription
dailyNoPer-day records. Each object has a "time" field (YYYY-MM-DD) plus one key per requested variable with its value. 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.
errorNoPresent when the call failed. Absent on success.
hourlyNoPer-hour records. Each object has a "time" field (ISO 8601) plus one key per requested variable with its value. 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.
noticeNoEverything 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); recognized variables whose requested window falls outside the data's coverage, with the timestamps that do carry values; 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.
currentNoConditions 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.
latitudeNoSnapped latitude (Open-Meteo snaps to nearest grid point)
timezoneNoResolved IANA timezone
canvas_idNoDataCanvas 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.
elevationNoTerrain elevation at grid point (meters)
longitudeNoSnapped longitude
truncatedNoTrue 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_nameNoDuckDB 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_unitsNoMap of variable name → unit string for daily data. Absent when no daily_variables were requested.
hourly_unitsNoMap of variable name → unit string for hourly data (e.g., {"temperature_2m": "°C", "precipitation": "mm"}). Absent when no hourly_variables were requested.
record_countNoTotal 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_unitsNoMap 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_secondsNoUTC offset in seconds for this timezone at query time

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=true and idempotentHint=true, so the safety profile is already covered. The description adds substantial behavioral context: exact return format (per-timestamp records with ISO 8601 'time' for hourly, YYYY-MM-DD for daily), the precision difference of current_variables (15-minute model data vs. hourly rows), the DataCanvas spill behavior (canvas_id, table_name, truncated: true, bounded preview when canvas disabled), and null behavior for invalid variable names in current_variables. This goes well beyond what annotations disclose.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Every sentence carries useful information and the core purpose is front-loaded in the first clause. However, the description is a single dense wall of text (~450 words) with no paragraph breaks, bullet lists, or visual segmentation, which makes it hard for an agent to scan. There is also mild redundancy with the schema, which already states the past_days ERA5 lag and the 'at least one variable required' constraint. Appropriately sized for a 12-parameter tool, but structure could be improved.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 12-parameter tool with 3 enums and an output schema, the description is remarkably complete. It covers variable selection, past_days semantics, current_variables precision, return format, spill-to-DataCanvas behavior with follow-up tool names (openmeteo_dataframe_describe, openmeteo_dataframe_query), and the mandatory-variable constraint. The output schema already covers return values, and the description reinforces that. Nothing an agent needs to call this tool correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with rich per-parameter descriptions, so the baseline is 3. The description adds genuine value beyond the schema: curated lists of common hourly and daily variable names (e.g., temperature_2m, precipitation, wind_speed_10m, uv_index), the warning that a daily-only name like temperature_2m_max in current_variables returns null with unit 'undefined', and the canvas spill threshold guidance tied to past_days and variable count. These add meaning an agent wouldn't derive from the schema alone.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb+resource+scope: '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.' This clearly differentiates it from siblings like openmeteo_get_historical (past data), openmeteo_get_climate (climate norms), and openmeteo_get_marine (marine forecast). An agent can immediately tell what this tool does and what it does not do.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly routes to an alternative: 'Use past_days instead of openmeteo_get_historical for dates within the last 1–5 days, since the archive’s ERA5 components lag by up to ~5 days.' It also gives precise guidance on when to use current_variables (15-minute data, more precise than picking an hourly row) and when results spill to a DataCanvas vs. return inline. This is explicit when/when-not guidance with named alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

openmeteo_get_historicalOpenmeteo Get HistoricalA
Read-onlyIdempotent
Inspect

Historical weather from the Open-Meteo reanalysis archive (1940–present). Requires start_date and end_date (ISO 8601 date, e.g., "2024-07-01"). With models omitted the archive answers from Best Match, which blends IFS HRES, ERA5, and ERA5-Land seamlessly — so the source varies by date and no single update lag describes the response. Set models to pin a consistent source for a multi-decade series: the ERA5 family updates daily with about a 5-day delay, while IFS HRES has none, so for the last few days either request models: ["ecmwf_ifs"] or use openmeteo_get_forecast with past_days. Available models: best_match (default, blends IFS HRES + ERA5 + ERA5-Land), ecmwf_ifs (global 9 km, updated every 6 hours, no delay), ecmwf_ifs_analysis_long_window (global 9 km, daily, 2 days delay), era5_seamless (ERA5 and ERA5-Land combined), era5 (global 0.25° (~25 km), daily, 5 days delay), era5_land (global 0.1° (~11 km), daily, 5 days delay), era5_ensemble (global 0.5° (~55 km), daily, 5 days delay), cerra (Europe only, 5 km, no real-time updates). 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 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 hourly_variables or daily_variables is required.

ParametersJSON Schema
NameRequiredDescriptionDefault
modelsNoArchive models to read from: best_match (default, blends IFS HRES + ERA5 + ERA5-Land), ecmwf_ifs (global 9 km, updated every 6 hours, no delay), ecmwf_ifs_analysis_long_window (global 9 km, daily, 2 days delay), era5_seamless (ERA5 and ERA5-Land combined), era5 (global 0.25° (~25 km), daily, 5 days delay), era5_land (global 0.1° (~11 km), daily, 5 days delay), era5_ensemble (global 0.5° (~55 km), daily, 5 days delay), cerra (Europe only, 5 km, no real-time updates). Omit to use Open-Meteo's Best Match default, which blends IFS HRES, ERA5, and ERA5-Land — pin a model instead when a consistent source matters across the range. With 2+ models each variable column is suffixed with the model name. cerra covers Europe only and is rejected as a coverage gap elsewhere. A name outside this list is sent upstream rather than rejected here.
end_dateYesEnd date (YYYY-MM-DD, inclusive). Must be on or after start_date. For the last few days, either request models: ["ecmwf_ifs"] or use openmeteo_get_forecast with past_days.
latitudeYesLatitude in decimal degrees. Use openmeteo_search_locations to resolve a place name to coordinates.
timezoneNoIANA timezone or "auto". Default "auto".auto
canvas_idNoDataCanvas token for multi-year 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.
longitudeYesLongitude in decimal degrees.
start_dateYesStart date (YYYY-MM-DD, e.g., "2024-07-01"). The archive covers from 1940-01-01; how close to today it reaches depends on the model — the ERA5 family runs about 5 days behind, IFS HRES is current.
daily_variablesNoDaily summary variables (e.g., ["temperature_2m_max", "temperature_2m_min", "precipitation_sum", "wind_speed_10m_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 hourly_variables or daily_variables required.
wind_speed_unitNoWind speed unit. Default "kmh".kmh
hourly_variablesNoHourly archive variables (e.g., ["temperature_2m", "precipitation", "wind_speed_10m", "relative_humidity_2m", "cloud_cover", "soil_moisture_0_to_7cm"]). 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 hourly_variables or daily_variables required.
temperature_unitNoTemperature unit. Default "celsius".celsius
precipitation_unitNoPrecipitation unit. Default "mm".mm

Output Schema

ParametersJSON Schema
NameRequiredDescription
dailyNoPer-day records with "time" (YYYY-MM-DD) + variable keys. Absent when only hourly_variables were requested. When truncated, contains only a preview — query canvas_id for the full dataset when one is present.
errorNoPresent when the call failed. Absent on success.
hourlyNoPer-hour records with "time" (ISO 8601) + variable keys. Absent when only daily_variables were requested. When truncated, contains only a preview — query canvas_id for the full dataset when one is present.
modelsNoArchive models requested — echoes the models parameter. Absent when models was omitted, which means the data came from Open-Meteo Best Match (IFS HRES + ERA5 + ERA5-Land) and the source varies by date.
noticeNoEverything this response needs to say beyond the data, composed into one advisory: columns the archive returned with the unit "undefined" (a name it parsed but does not serve in the requested cadence); recognized variables whose requested window falls outside the data's coverage, with the timestamps that do carry values; 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.
latitudeNoSnapped latitude
timezoneNoResolved IANA timezone
canvas_idNoDataCanvas 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.
elevationNoElevation at grid point (meters)
longitudeNoSnapped longitude
truncatedNoTrue 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.
date_rangeNoDate range of returned data
table_nameNoDuckDB 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_unitsNoVariable → unit string for daily data. Absent when no daily_variables were requested.
hourly_unitsNoVariable → unit string for hourly data (e.g., {"temperature_2m": "°C", "precipitation": "mm"}). Absent when no hourly_variables were requested.
record_countNoTotal number of records (hourly + daily rows) — the full upstream total when truncated is true, not the combined length of the hourly and daily previews.

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Despite readOnlyHint and idempotentHint annotations, the description adds substantial non-obvious behavior: best_match's underlying source varies by date, ERA5 has a 5-day lag while IFS HRES does not, and large ranges spill to a DataCanvas with truncated: true. The agent learns that the tool may not return all data directly. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but front-loaded and structure-rich. It proceeds from the core purpose to date, model, and spill behavior. Repetition of the model list from the schema slightly bloats it, but most sentences carry distinct value for a complex 12-parameter tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers the essential context an agent needs: date range format, model update lag, best_match semantics, large result spilling with truncated:true, required preceding before hourly/daily variables, and alternatives like forecast with past_days. With the output schema present, return values are already handled. No critical operational context for the agent is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description goes beyond that by explaining how the 'models' parameter affects source consistency and freshness, and clarifies the hourly/daily variable distinction (e.g., hourly names rejected from daily_variables). It doesn't need to restate each field, but it adds useful relationships and defaults, meriting above baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Historical weather from the Open-Meteo reanalysis archive (1940–present).' This clearly distinguishes it from siblings like openmeteo_get_forecast, and the later mention of forecast and DataCanvas tools reinforces the separation. An agent can immediately tell this is the tool for archived historical data.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Delivers explicit when-to-use guidance: 'for the last few days either request models: ["ecmwf_ifs"] or use openmeteo_get_forecast with past_days.' It also tells the user when to pin models for multi-decade consistency and routes large result sets to openmeteo_dataframe_describe/query. This is exemplary conditional routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

openmeteo_get_marineOpenmeteo Get MarineA
Read-onlyIdempotent
Inspect

Marine wave and ocean conditions for a coastal or ocean coordinate: wave height, wave period, wave direction, wind-wave height, swell height, sea-surface temperature. Forecast horizon up to 8 days, with optional past_days (up to 92) for recent history — or start_date and end_date together for an archive range, which returns real wave values back to at least 2022. One window per call: a date range is mutually exclusive with forecast_days and past_days, and needs both ends — a lone start_date or end_date is rejected. 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, wind_wave_period, swell_wave_height, swell_wave_direction, swell_wave_period. Common daily: wave_height_max, wave_direction_dominant, wave_period_max. Note: ocean_current_velocity is null for non-open-ocean coordinates. A wide window — a large past_days or date range plus many 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
end_dateNoEnd date for the archive range (YYYY-MM-DD, inclusive). Must be on or after start_date. Requires start_date — the pair must be sent together, and neither combines with forecast_days or past_days.
latitudeYesLatitude of a coastal or ocean point. Use openmeteo_search_locations to resolve a place name. Inland points return near-zero wave values.
timezoneNoIANA timezone or "auto". Default "auto".auto
canvas_idNoDataCanvas token for wide past_days, archive-range, 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.
longitudeYesLongitude in decimal degrees.
past_daysNoInclude this many days of past data before today (0–92). Use for recent history instead of a start_date/end_date range. Default 0. Must stay 0 when start_date/end_date are used.
start_dateNoStart date for the archive range (YYYY-MM-DD, e.g., "2024-07-01"). Real wave values go back to at least 2022. Requires end_date — the pair must be sent together, and neither combines with forecast_days or past_days.
forecast_daysNoForecast horizon in days (1–8). Omit for the upstream default of 7. Mutually exclusive with start_date/end_date — omit it entirely when pulling an archive range.
daily_variablesNoDaily marine summary variables (e.g., ["wave_height_max", "wave_direction_dominant", "wave_period_max"]). Daily names only — an hourly name such as wave_height belongs in hourly_variables and is rejected here; for a daily summary use its published aggregate (wave_height_max). At least one of hourly_variables or daily_variables required.
hourly_variablesNoHourly marine variables (e.g., ["wave_height", "wave_direction", "wave_period", "wind_wave_height", "swell_wave_height"]). Hourly names only — a daily aggregate such as wave_height_max or wave_direction_dominant belongs in daily_variables and is rejected here. At least one of hourly_variables or daily_variables required.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dailyNoPer-day summary records with "time" (YYYY-MM-DD) + variable keys (e.g., wave_height_max in meters, wave_direction_dominant in degrees, wave_period_max in seconds). Absent when only hourly_variables were requested. When truncated, contains only a preview — query canvas_id for the full dataset when one is present.
errorNoPresent when the call failed. Absent on success.
hourlyNoPer-hour records with "time" (ISO 8601) + one key per requested variable (e.g., wave_height in meters, wave_direction in degrees, wave_period in seconds). Absent when only daily_variables were requested. When truncated, contains only a preview — query canvas_id for the full dataset when one is present.
noticeNoEverything 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); recognized variables whose requested window falls outside the data's coverage, with the timestamps that do carry values; 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.
latitudeNoSnapped latitude
timezoneNoResolved IANA timezone
canvas_idNoDataCanvas 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.
longitudeNoSnapped longitude
truncatedNoTrue 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_nameNoDuckDB 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_unitsNoVariable → unit string for daily data. Absent when no daily_variables were requested.
hourly_unitsNoVariable → unit string for hourly data (e.g., {"wave_height": "m", "wave_period": "s"}). Absent when no hourly_variables were requested.
record_countNoTotal number of records (hourly + daily rows) — the full upstream total when truncated is true, not the combined length of the hourly and daily previews.

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and idempotentHint=true, so the safety profile is covered. The description adds substantial behavioral context beyond annotations: the mutual exclusivity of date windows, the rejection of lone start/end dates, the spill-to-DataCanvas behavior with truncated:true, the null ocean_current_velocity for non-open-ocean coordinates, and the near-zero wave values for sheltered inland waters. It doesn't detail pagination or exact response shape, but the output schema exists and the spill behavior is thoroughly disclosed. A 4 is appropriate because the description adds rich behavioral context without contradicting annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but well-organized: it front-loads the core purpose and variables, then covers time windows, output format, usage context, and large-result behavior in a logical flow. Every sentence earns its place — there is no filler or repetition of schema content. It is longer than ideal, but the complexity of the tool (10 params, multiple window modes, spill behavior) justifies the length. A 4 rather than 5 because the density makes it slightly harder to parse quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity — 10 parameters, three mutually exclusive time-window modes, two variable categories, and a spill-to-DataCanvas mechanism — the description covers everything an agent needs to call it correctly: window rules, variable naming rules, coordinate caveats, and large-result handling. The output schema exists, so return values don't need description-level detail. The sibling tools for follow-up (dataframe_describe, dataframe_query) are named. Nothing critical is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description adds value beyond the schema by explaining the semantic distinction between hourly and daily variable names (e.g., 'an hourly name such as wave_height belongs in hourly_variables and is rejected here'), the mutual exclusivity of date windows, and the practical consequence of wide windows (spill to DataCanvas). It also clarifies that inland points return near-zero values, which affects how latitude should be chosen. This goes beyond the schema's per-parameter descriptions, so a 4 is warranted.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Marine wave and ocean conditions for a coastal or ocean coordinate' and enumerates the exact variables (wave height, wave period, wave direction, etc.). It clearly distinguishes this from sibling weather tools (air quality, climate, flood, forecast) by focusing on marine variables and coastal/ocean coordinates. The scope is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit when-to-use guidance: 'Best for open-ocean and coastal exposed points — sheltered inland waters return near-zero wave values.' It also names the alternative for resolving place names (openmeteo_search_locations) and the alternatives for handling large results (openmeteo_dataframe_describe and openmeteo_dataframe_query). It states exclusions: 'a lone start_date or end_date is rejected' and 'ocean_current_velocity is null for non-open-ocean coordinates.' This is comprehensive routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

openmeteo_search_locationsOpenmeteo Search LocationsA
Read-onlyIdempotent
Inspect

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 country fields on each ranked result — admin1 is a result field for choosing among matches, not a search input. Returns up to 10 matches ranked by population/relevance.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesPlace 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 disambiguate. A one- or two-character native-script name ("서울", "大阪") needs the full administrative name ("서울특별시", "大阪市") or the romanized name ("Seoul", "Osaka") — see the language field. Weather tools require coordinates — use the lat/lon from this result.
countNoMax results to return (1–10). Default 5. Return more when disambiguating common names like "Springfield" or "Portland".
countryNoISO 3166-1 alpha-2 country code (e.g. "US", "FR") to disambiguate places that share a name. Omit for a global search.
languageNoLanguage 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. language "zh" for "上海", "ru" for "Москва". This resolves a native-script name of three or more characters, which is matched by normalized prefix; a one- or two-character name must equal an index entry exactly, so setting language alone will not find "서울" or "大阪" — retry those with the full administrative name ("서울특별시", "大阪市") or the romanized name ("Seoul", "Osaka"). Default "en"; a query in a recognized non-Latin script (CJK, Hangul, Cyrillic, Arabic, Greek, Hebrew, Thai, Devanagari) that misses under "en" is retried once with the language inferred from its script.en

Output Schema

ParametersJSON Schema
NameRequiredDescription
countNoNumber of results returned
errorNoPresent when the call failed. Absent on success.
noticeNoAdvisory on the confidence of the top match, present only when its population is null or under 100,000 — the shape a historic or colonial exonym returns, where the upstream index answers with an unrelated small feature and never surfaces the modern city. Names the returned place, country, and feature_code, and asks the caller to verify the coordinates or retry with the place’s current official name. Never changes results or count.
resultsNoRanked matches (most relevant first). Never empty — when nothing matches, the tool fails with no_results instead of returning an empty array.

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and idempotentHint=true, so the safety profile is covered. The description adds valuable behavioral context: it returns up to 10 matches ranked by population/relevance, explains that admin1 is a result field not a search input, and discloses the retry behavior for non-Latin scripts. It doesn't describe pagination or exact response structure, but the output schema exists and the annotations cover the read-only nature.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but well-organized: it front-loads the core purpose and prerequisite status, then gives usage rules, then disambiguation guidance, then return behavior. Every sentence earns its place, though the native-script retry explanation is somewhat long and could be tightened. Overall it's appropriately sized for a tool with this many behavioral nuances.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a geocoding tool with 4 parameters, full schema coverage, an output schema, and read-only/idempotent annotations, the description covers everything an agent needs: what it does, when to use it, how to format inputs, how to disambiguate, and what to expect in the response. The output schema handles return-value details, and the annotations handle safety. Nothing critical is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all four parameters thoroughly. The description adds value by reinforcing the key semantic rule (bare place name, no qualifiers) and explaining the disambiguation workflow (country input vs admin1 result field). It also adds the retry behavior for native-script names, which is not in the schema. This goes beyond the baseline 3 for full coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Resolve'), a resource ('place name'), and the output ('ranked coordinate matches with country, region, elevation, timezone, and population'). It clearly distinguishes this geocoding tool from the weather-data siblings by noting that all weather tools take lat/lon, not place names. This is a clear, specific purpose statement.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says this is a 'Required prerequisite for name-based queries' and explains that weather tools take coordinates, not place names. It gives concrete when-to-use guidance (disambiguating shared names via country input or admin1 field) and when-not-to (never fold qualifiers into the name). It also provides retry behavior for native-script names, which is actionable usage guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 5 tool updates
    • Changedopenmeteo_get_air_quality5 fields changed
      • addedInput schema / properties / current_variables
        Added value: +{
        +  "description": "Air quality variables to return for the current instant (e.g., [\"pm2_5\", \"pm10\", \"european_aqi\", \"us_aqi\"]). Uses Open-Meteo's current-conditions data, so it answers \"what is the AQI now?\" without requesting an hourly series and picking a row; the returned interval reports the update cadence, 3600 seconds on this endpoint. Satisfies the variable requirement on its own.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "maxItems": 50,
        +  "type": "array"
        +}
      • changedInput schema / properties / hourly_variables / description
        Previous value: -"Hourly air quality variables (e.g., [\"pm2_5\", \"pm10\", \"ozone\", \"nitrogen_dioxide\", \"european_aqi\", \"us_aqi\"]). At least one required."New value: +"Hourly air quality variables (e.g., [\"pm2_5\", \"pm10\", \"ozone\", \"nitrogen_dioxide\", \"european_aqi\", \"us_aqi\"]). At least one of current_variables or hourly_variables is required."
      • addedOutput schema / properties / current
        Added value: +{
        +  "additionalProperties": {
        +    "type": [
        +      "string",
        +      "number",
        +      "null"
        +    ]
        +  },
        +  "description": "Pollutant and index values 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.",
        +  "properties": {
        +    "interval": {
        +      "description": "Update cadence of the current-conditions data, in seconds (3600 = hourly on this endpoint) — metadata, not a requested variable",
        +      "type": "number"
        +    },
        +    "time": {
        +      "description": "Timestamp of these values (ISO 8601, in the resolved timezone)",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "time",
        +    "interval"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / properties / current_units
        Added value: +{
        +  "additionalProperties": {
        +    "type": "string"
        +  },
        +  "description": "Key → unit string for the current block, covering time and interval as well as each requested variable (e.g., {\"interval\": \"seconds\", \"pm2_5\": \"μg/m³\"}). Absent when no current_variables were requested.",
        +  "propertyNames": {
        +    "type": "string"
        +  },
        +  "type": "object"
        +}
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous value: -"Machine-readable failure mode. Declared by this tool: `invalid_variable`: An unknown air quality variable name was requested `no_variables_requested`: hourly_variables was not provided or is empty `date_range_incomplete`: Only one of start_date / end_date was provided — the CAMS archive requires the pair together `forecast_window_conflict`: forecast_days or a non-zero past_days was combined with start_date or end_date `date_order_invalid`: end_date is before start_date `invalid_timezone`: timezone was blank, or upstream did not recognize the requested time zone `request_too_large`: Open-Meteo refused the request as asking for too much data in one call Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `invalid_variable`: An unknown air quality variable name was requested `no_variables_requested`: Neither current_variables nor hourly_variables was provided `date_range_incomplete`: Only one of start_date / end_date was provided — the CAMS archive requires the pair together `forecast_window_conflict`: forecast_days or a non-zero past_days was combined with start_date or end_date `date_order_invalid`: end_date is before start_date `invalid_timezone`: timezone was blank, or upstream did not recognize the requested time zone `request_too_large`: Open-Meteo refused the request as asking for too much data in one call Other values are possible when a failure originates below the handler."
    • Changedopenmeteo_get_flood4 fields changed
      • changedInput schema / properties / latitude / description
        Previous value: -"Latitude in decimal degrees. The API snaps to the nearest river — no river ID required. Use openmeteo_search_locations to resolve a place name."New value: +"Latitude in decimal degrees. Discharge is returned for the largest modeled river within 5 km of this point — no river ID required, and not necessarily the closest river. Vary the coordinate by about 0.1° and compare when the result looks unrepresentative. Use openmeteo_search_locations to resolve a place name."
      • changedInput schema / properties / longitude / description
        Previous value: -"Longitude in decimal degrees."New value: +"Longitude in decimal degrees. With latitude it selects the largest modeled river within 5 km, which is not necessarily the closest one."
      • changedOutput schema / properties / latitude / description
        Previous value: -"Snapped latitude (nearest river grid point)"New value: +"Snapped latitude — grid point of the selected river"
      • changedOutput schema / properties / longitude / description
        Previous value: -"Snapped longitude"New value: +"Snapped longitude — grid point of the selected river"
    • Changedopenmeteo_get_forecast7 fields changed
      • addedInput schema / properties / current_variables
        Added value: +{
        +  "description": "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.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "maxItems": 50,
        +  "type": "array"
        +}
      • changedInput schema / properties / daily_variables / description
        Previous value: -"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 hourly_variables or daily_variables is required."New value: +"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."
      • changedInput schema / properties / hourly_variables / description
        Previous value: -"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 hourly_variables or daily_variables is required."New value: +"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."
      • changedInput schema / properties / past_days / description
        Previous value: -"Include this many days of past data before today (0–92). Use for recent history — ERA5 archive has a variable ~5-day lag. Default 0."New value: +"Include this many days of past data before today (0–92). Use for recent history — the archive’s ERA5 components lag by up to ~5 days. Default 0."
      • addedOutput schema / properties / current
        Added value: +{
        +  "additionalProperties": {
        +    "type": [
        +      "string",
        +      "number",
        +      "null"
        +    ]
        +  },
        +  "description": "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.",
        +  "properties": {
        +    "interval": {
        +      "description": "Update cadence of the current-conditions data, in seconds (900 = 15 minutes) — metadata, not a requested variable",
        +      "type": "number"
        +    },
        +    "time": {
        +      "description": "Timestamp of these values (ISO 8601, in the resolved timezone)",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "time",
        +    "interval"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / properties / current_units
        Added value: +{
        +  "additionalProperties": {
        +    "type": "string"
        +  },
        +  "description": "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.",
        +  "propertyNames": {
        +    "type": "string"
        +  },
        +  "type": "object"
        +}
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous value: -"Machine-readable failure mode. Declared by this tool: `invalid_variable`: An unknown variable name was requested `variable_wrong_cadence`: A variable Open-Meteo documents under one cadence was passed in the other cadence field — for example cloud_cover in daily_variables, or temperature_2m_max in hourly_variables `no_variables_requested`: Neither hourly_variables nor daily_variables was provided `invalid_timezone`: timezone was blank, or upstream did not recognize the requested time zone `request_too_large`: Open-Meteo refused the request as asking for too much data in one call Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `invalid_variable`: An unknown variable name was requested `variable_wrong_cadence`: A variable Open-Meteo documents under one cadence was passed in the other cadence field — for example cloud_cover in daily_variables, or temperature_2m_max in hourly_variables `no_variables_requested`: None of current_variables, hourly_variables, or daily_variables was provided `invalid_timezone`: timezone was blank, or upstream did not recognize the requested time zone `request_too_large`: Open-Meteo refused the request as asking for too much data in one call Other values are possible when a failure originates below the handler."
    • Changedopenmeteo_get_historical6 fields changed
      • changedInput schema / properties / end_date / description
        Previous value: -"End 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."New value: +"End date (YYYY-MM-DD, inclusive). Must be on or after start_date. For the last few days, either request models: [\"ecmwf_ifs\"] or use openmeteo_get_forecast with past_days."
      • changedInput schema / properties / hourly_variables / description
        Previous value: -"Hourly ERA5 variables (e.g., [\"temperature_2m\", \"precipitation\", \"wind_speed_10m\", \"relative_humidity_2m\", \"cloud_cover\", \"soil_moisture_0_to_7cm\"]). 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 hourly_variables or daily_variables required."New value: +"Hourly archive variables (e.g., [\"temperature_2m\", \"precipitation\", \"wind_speed_10m\", \"relative_humidity_2m\", \"cloud_cover\", \"soil_moisture_0_to_7cm\"]). 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 hourly_variables or daily_variables required."
      • addedInput schema / properties / models
        Added value: +{
        +  "description": "Archive models to read from: best_match (default, blends IFS HRES + ERA5 + ERA5-Land), ecmwf_ifs (global 9 km, updated every 6 hours, no delay), ecmwf_ifs_analysis_long_window (global 9 km, daily, 2 days delay), era5_seamless (ERA5 and ERA5-Land combined), era5 (global 0.25° (~25 km), daily, 5 days delay), era5_land (global 0.1° (~11 km), daily, 5 days delay), era5_ensemble (global 0.5° (~55 km), daily, 5 days delay), cerra (Europe only, 5 km, no real-time updates). Omit to use Open-Meteo's Best Match default, which blends IFS HRES, ERA5, and ERA5-Land — pin a model instead when a consistent source matters across the range. With 2+ models each variable column is suffixed with the model name. cerra covers Europe only and is rejected as a coverage gap elsewhere. A name outside this list is sent upstream rather than rejected here.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "maxItems": 8,
        +  "type": "array"
        +}
      • changedInput schema / properties / start_date / description
        Previous value: -"Start date (YYYY-MM-DD, e.g., \"2024-07-01\"). ERA5 covers from 1940-01-01 to approximately 5 days ago."New value: +"Start date (YYYY-MM-DD, e.g., \"2024-07-01\"). The archive covers from 1940-01-01; how close to today it reaches depends on the model — the ERA5 family runs about 5 days behind, IFS HRES is current."
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous value: -"Machine-readable failure mode. Declared by this tool: `date_out_of_range`: start_date predates 1940-01-01 or end_date is within the ERA5 lag window `date_order_invalid`: end_date is before start_date `no_variables_requested`: Neither hourly_variables nor daily_variables was provided `invalid_variable`: An unknown variable name was requested `variable_wrong_cadence`: A variable Open-Meteo documents under one cadence was passed in the other cadence field — for example cloud_cover in daily_variables, or temperature_2m_max in hourly_variables `invalid_timezone`: timezone was blank, or upstream did not recognize the requested time zone `request_too_large`: Open-Meteo refused the request as asking for too much data in one call Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `date_out_of_range`: start_date predates 1940-01-01, or the requested dates fall outside the coverage of the selected model `date_order_invalid`: end_date is before start_date `no_variables_requested`: Neither hourly_variables nor daily_variables was provided `invalid_variable`: An unknown variable name or unsupported archive model was requested `variable_wrong_cadence`: A variable Open-Meteo documents under one cadence was passed in the other cadence field — for example cloud_cover in daily_variables, or temperature_2m_max in hourly_variables `invalid_timezone`: timezone was blank, or upstream did not recognize the requested time zone `request_too_large`: Open-Meteo refused the request as asking for too much data in one call Other values are possible when a failure originates below the handler."
      • addedOutput schema / properties / models
        Added value: +{
        +  "description": "Archive models requested — echoes the models parameter. Absent when models was omitted, which means the data came from Open-Meteo Best Match (IFS HRES + ERA5 + ERA5-Land) and the source varies by date.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
    • Changedopenmeteo_search_locations1 field changed
      • addedOutput schema / properties / notice
        Added value: +{
        +  "description": "Advisory on the confidence of the top match, present only when its population is null or under 100,000 — the shape a historic or colonial exonym returns, where the upstream index answers with an unrelated small feature and never surfaces the modern city. Names the returned place, country, and feature_code, and asks the caller to verify the coordinates or retry with the place’s current official name. Never changes results or count.",
        +  "type": "string"
        +}
  2. 7 tool updates
    • Changedopenmeteo_get_air_quality3 fields changed
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous value: -"Machine-readable failure mode. Declared by this tool: `invalid_variable`: An unknown air quality variable name was requested `no_variables_requested`: hourly_variables was not provided or is empty `date_range_incomplete`: Only one of start_date / end_date was provided — the CAMS archive requires the pair together `forecast_window_conflict`: forecast_days or a non-zero past_days was combined with start_date or end_date `date_order_invalid`: end_date is before start_date `invalid_timezone`: timezone was blank, or upstream did not recognize the requested time zone Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `invalid_variable`: An unknown air quality variable name was requested `no_variables_requested`: hourly_variables was not provided or is empty `date_range_incomplete`: Only one of start_date / end_date was provided — the CAMS archive requires the pair together `forecast_window_conflict`: forecast_days or a non-zero past_days was combined with start_date or end_date `date_order_invalid`: end_date is before start_date `invalid_timezone`: timezone was blank, or upstream did not recognize the requested time zone `request_too_large`: Open-Meteo refused the request as asking for too much data in one call Other values are possible when a failure originates below the handler."
      • changedOutput schema / properties / error / properties / data / properties / reason / examples
        Previous value: -[
        -  "invalid_variable",
        -  "no_variables_requested",
        -  "date_range_incomplete",
        -  "forecast_window_conflict",
        -  "date_order_invalid",
        -  "invalid_timezone"
        -]New value: +[
        +  "invalid_variable",
        +  "no_variables_requested",
        +  "date_range_incomplete",
        +  "forecast_window_conflict",
        +  "date_order_invalid",
        +  "invalid_timezone",
        +  "request_too_large"
        +]
      • changedOutput schema / properties / notice / description
        Previous value: -"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); recognized variables whose requested window falls outside the CAMS archive, with the timestamps that do carry values; and, when the result spilled, the canvas and table holding the full row set plus the two dataframe tools that read it."New value: +"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); recognized variables whose requested window falls outside the CAMS archive, with the timestamps that do carry values; 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."
    • Changedopenmeteo_get_climate3 fields changed
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous value: -"Machine-readable failure mode. Declared by this tool: `date_out_of_range`: start_date predates 1950-01-01 or end_date is after 2050-12-31 `date_order_invalid`: end_date is before start_date `no_variables_requested`: daily_variables was not provided or is empty `invalid_variable`: An unknown variable name or unsupported climate model was requested `invalid_timezone`: timezone was blank, or upstream did not recognize the requested time zone Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `date_out_of_range`: start_date predates 1950-01-01 or end_date is after 2050-12-31 `date_order_invalid`: end_date is before start_date `no_variables_requested`: daily_variables was not provided or is empty `invalid_variable`: An unknown variable name or unsupported climate model was requested `invalid_timezone`: timezone was blank, or upstream did not recognize the requested time zone `request_too_large`: Open-Meteo refused the request as asking for too much data in one call Other values are possible when a failure originates below the handler."
      • changedOutput schema / properties / error / properties / data / properties / reason / examples
        Previous value: -[
        -  "date_out_of_range",
        -  "date_order_invalid",
        -  "no_variables_requested",
        -  "invalid_variable",
        -  "invalid_timezone"
        -]New value: +[
        +  "date_out_of_range",
        +  "date_order_invalid",
        +  "no_variables_requested",
        +  "invalid_variable",
        +  "invalid_timezone",
        +  "request_too_large"
        +]
      • changedOutput schema / properties / notice / description
        Previous value: -"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); recognized variables a selected model carries no values for, with the dates that do carry values; and, when the result spilled, the canvas and table holding the full row set plus the two dataframe tools that read it."New value: +"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); recognized variables a selected model carries no values for, with the dates that do carry values; 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."
    • Changedopenmeteo_get_ensemble3 fields changed
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous value: -"Machine-readable failure mode. Declared by this tool: `no_variables_requested`: Neither hourly_variables nor daily_variables was provided `invalid_variable`: An unknown variable name or unsupported model was requested `variable_wrong_cadence`: A variable the ensemble API documents under one cadence was passed in the other cadence field — for example precipitation_sum in hourly_variables, or precipitation in daily_variables `invalid_timezone`: timezone was blank, or upstream did not recognize the requested time zone Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `no_variables_requested`: Neither hourly_variables nor daily_variables was provided `invalid_variable`: An unknown variable name or unsupported model was requested `variable_wrong_cadence`: A variable the ensemble API documents under one cadence was passed in the other cadence field — for example precipitation_sum in hourly_variables, or precipitation in daily_variables `invalid_timezone`: timezone was blank, or upstream did not recognize the requested time zone `request_too_large`: Open-Meteo refused the request as asking for too much data in one call Other values are possible when a failure originates below the handler."
      • changedOutput schema / properties / error / properties / data / properties / reason / examples
        Previous value: -[
        -  "no_variables_requested",
        -  "invalid_variable",
        -  "variable_wrong_cadence",
        -  "invalid_timezone"
        -]New value: +[
        +  "no_variables_requested",
        +  "invalid_variable",
        +  "variable_wrong_cadence",
        +  "invalid_timezone",
        +  "request_too_large"
        +]
      • changedOutput schema / properties / notice / description
        Previous value: -"Everything this response needs to say beyond the data, composed into one advisory: variables the endpoint returned with the unit \"undefined\" across every member (a name the selected model does not carry); recognized variables whose requested window runs past the model's horizon, with the timestamps that do carry values; and, when the result spilled, the canvas and table holding the full row set plus the two dataframe tools that read it."New value: +"Everything this response needs to say beyond the data, composed into one advisory: variables the endpoint returned with the unit \"undefined\" across every member (a name the selected model does not carry); recognized variables whose requested window runs past the model's horizon, with the timestamps that do carry values; 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."
    • Changedopenmeteo_get_flood3 fields changed
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous value: -"Machine-readable failure mode. Declared by this tool: `no_variables_requested`: daily_variables was not provided or is empty `date_range_incomplete`: Only one of start_date / end_date was provided — GloFAS requires the pair together `forecast_days_conflict`: forecast_days was combined with start_date or end_date `date_order_invalid`: end_date is before start_date `date_out_of_range`: start_date predates 1984-01-01 or date range is otherwise invalid `invalid_variable`: An unknown discharge variable name was requested `invalid_timezone`: timezone was blank, or upstream did not recognize the requested time zone Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `no_variables_requested`: daily_variables was not provided or is empty `date_range_incomplete`: Only one of start_date / end_date was provided — GloFAS requires the pair together `forecast_days_conflict`: forecast_days was combined with start_date or end_date `date_order_invalid`: end_date is before start_date `date_out_of_range`: start_date predates 1984-01-01 or date range is otherwise invalid `invalid_variable`: An unknown discharge variable name was requested `invalid_timezone`: timezone was blank, or upstream did not recognize the requested time zone `request_too_large`: Open-Meteo refused the request as asking for too much data in one call Other values are possible when a failure originates below the handler."
      • changedOutput schema / properties / error / properties / data / properties / reason / examples
        Previous value: -[
        -  "no_variables_requested",
        -  "date_range_incomplete",
        -  "forecast_days_conflict",
        -  "date_order_invalid",
        -  "date_out_of_range",
        -  "invalid_variable",
        -  "invalid_timezone"
        -]New value: +[
        +  "no_variables_requested",
        +  "date_range_incomplete",
        +  "forecast_days_conflict",
        +  "date_order_invalid",
        +  "date_out_of_range",
        +  "invalid_variable",
        +  "invalid_timezone",
        +  "request_too_large"
        +]
      • changedOutput schema / properties / notice / description
        Previous value: -"Everything this response needs to say beyond the data, composed into one advisory: columns GloFAS returned with the unit \"undefined\" (a name it parsed but does not serve); recognized variables whose requested range falls outside the coordinate's discharge record, with the dates that do carry values; and, when the result spilled, the canvas and table holding the full row set plus the two dataframe tools that read it."New value: +"Everything this response needs to say beyond the data, composed into one advisory: columns GloFAS returned with the unit \"undefined\" (a name it parsed but does not serve); recognized variables whose requested range falls outside the coordinate's discharge record, with the dates that do carry values; 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."
    • Changedopenmeteo_get_forecast3 fields changed
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous value: -"Machine-readable failure mode. Declared by this tool: `invalid_variable`: An unknown variable name was requested `variable_wrong_cadence`: A variable Open-Meteo documents under one cadence was passed in the other cadence field — for example cloud_cover in daily_variables, or temperature_2m_max in hourly_variables `no_variables_requested`: Neither hourly_variables nor daily_variables was provided `invalid_timezone`: timezone was blank, or upstream did not recognize the requested time zone Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `invalid_variable`: An unknown variable name was requested `variable_wrong_cadence`: A variable Open-Meteo documents under one cadence was passed in the other cadence field — for example cloud_cover in daily_variables, or temperature_2m_max in hourly_variables `no_variables_requested`: Neither hourly_variables nor daily_variables was provided `invalid_timezone`: timezone was blank, or upstream did not recognize the requested time zone `request_too_large`: Open-Meteo refused the request as asking for too much data in one call Other values are possible when a failure originates below the handler."
      • changedOutput schema / properties / error / properties / data / properties / reason / examples
        Previous value: -[
        -  "invalid_variable",
        -  "variable_wrong_cadence",
        -  "no_variables_requested",
        -  "invalid_timezone"
        -]New value: +[
        +  "invalid_variable",
        +  "variable_wrong_cadence",
        +  "no_variables_requested",
        +  "invalid_timezone",
        +  "request_too_large"
        +]
      • changedOutput schema / properties / notice / description
        Previous value: -"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); recognized variables whose requested window falls outside the data's coverage, with the timestamps that do carry values; and, when the result spilled, the canvas and table holding the full row set plus the two dataframe tools that read it."New value: +"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); recognized variables whose requested window falls outside the data's coverage, with the timestamps that do carry values; 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."
    • Changedopenmeteo_get_historical3 fields changed
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous value: -"Machine-readable failure mode. Declared by this tool: `date_out_of_range`: start_date predates 1940-01-01 or end_date is within the ERA5 lag window `date_order_invalid`: end_date is before start_date `no_variables_requested`: Neither hourly_variables nor daily_variables was provided `invalid_variable`: An unknown variable name was requested `variable_wrong_cadence`: A variable Open-Meteo documents under one cadence was passed in the other cadence field — for example cloud_cover in daily_variables, or temperature_2m_max in hourly_variables `invalid_timezone`: timezone was blank, or upstream did not recognize the requested time zone Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `date_out_of_range`: start_date predates 1940-01-01 or end_date is within the ERA5 lag window `date_order_invalid`: end_date is before start_date `no_variables_requested`: Neither hourly_variables nor daily_variables was provided `invalid_variable`: An unknown variable name was requested `variable_wrong_cadence`: A variable Open-Meteo documents under one cadence was passed in the other cadence field — for example cloud_cover in daily_variables, or temperature_2m_max in hourly_variables `invalid_timezone`: timezone was blank, or upstream did not recognize the requested time zone `request_too_large`: Open-Meteo refused the request as asking for too much data in one call Other values are possible when a failure originates below the handler."
      • changedOutput schema / properties / error / properties / data / properties / reason / examples
        Previous value: -[
        -  "date_out_of_range",
        -  "date_order_invalid",
        -  "no_variables_requested",
        -  "invalid_variable",
        -  "variable_wrong_cadence",
        -  "invalid_timezone"
        -]New value: +[
        +  "date_out_of_range",
        +  "date_order_invalid",
        +  "no_variables_requested",
        +  "invalid_variable",
        +  "variable_wrong_cadence",
        +  "invalid_timezone",
        +  "request_too_large"
        +]
      • changedOutput schema / properties / notice / description
        Previous value: -"Everything this response needs to say beyond the data, composed into one advisory: columns the archive returned with the unit \"undefined\" (a name it parsed but does not serve in the requested cadence); recognized variables whose requested window falls outside the data's coverage, with the timestamps that do carry values; and, when the result spilled, the canvas and table holding the full row set plus the two dataframe tools that read it."New value: +"Everything this response needs to say beyond the data, composed into one advisory: columns the archive returned with the unit \"undefined\" (a name it parsed but does not serve in the requested cadence); recognized variables whose requested window falls outside the data's coverage, with the timestamps that do carry values; 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."
    • Changedopenmeteo_get_marine4 fields changed
      • changedOutput schema / properties / daily / description
        Previous value: -"Per-day summary records with \"time\" (YYYY-MM-DD) + variable keys (e.g., wave_height_max in meters, wave_direction_dominant in degrees, wave_period_max in seconds). When truncated, contains only a preview — query canvas_id for the full dataset when one is present."New value: +"Per-day summary records with \"time\" (YYYY-MM-DD) + variable keys (e.g., wave_height_max in meters, wave_direction_dominant in degrees, wave_period_max in seconds). Absent when only hourly_variables were requested. When truncated, contains only a preview — query canvas_id for the full dataset when one is present."
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous value: -"Machine-readable failure mode. Declared by this tool: `invalid_variable`: An unknown marine variable name was requested `variable_wrong_cadence`: A variable Open-Meteo documents under one cadence was passed in the other cadence field — for example wave_height in daily_variables, or wave_height_max in hourly_variables `no_variables_requested`: Neither hourly_variables nor daily_variables was provided `date_range_incomplete`: Only one of start_date / end_date was provided — the marine archive requires the pair together `forecast_window_conflict`: forecast_days or a non-zero past_days was combined with start_date or end_date `date_order_invalid`: end_date is before start_date `invalid_timezone`: timezone was blank, or upstream did not recognize the requested time zone Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `invalid_variable`: An unknown marine variable name was requested `variable_wrong_cadence`: A variable Open-Meteo documents under one cadence was passed in the other cadence field — for example wave_height in daily_variables, or wave_height_max in hourly_variables `no_variables_requested`: Neither hourly_variables nor daily_variables was provided `date_range_incomplete`: Only one of start_date / end_date was provided — the marine archive requires the pair together `forecast_window_conflict`: forecast_days or a non-zero past_days was combined with start_date or end_date `date_order_invalid`: end_date is before start_date `invalid_timezone`: timezone was blank, or upstream did not recognize the requested time zone `request_too_large`: Open-Meteo refused the request as asking for too much data in one call Other values are possible when a failure originates below the handler."
      • changedOutput schema / properties / error / properties / data / properties / reason / examples
        Previous value: -[
        -  "invalid_variable",
        -  "variable_wrong_cadence",
        -  "no_variables_requested",
        -  "date_range_incomplete",
        -  "forecast_window_conflict",
        -  "date_order_invalid",
        -  "invalid_timezone"
        -]New value: +[
        +  "invalid_variable",
        +  "variable_wrong_cadence",
        +  "no_variables_requested",
        +  "date_range_incomplete",
        +  "forecast_window_conflict",
        +  "date_order_invalid",
        +  "invalid_timezone",
        +  "request_too_large"
        +]
      • changedOutput schema / properties / notice / description
        Previous value: -"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); recognized variables whose requested window falls outside the data's coverage, with the timestamps that do carry values; and, when the result spilled, the canvas and table holding the full row set plus the two dataframe tools that read it."New value: +"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); recognized variables whose requested window falls outside the data's coverage, with the timestamps that do carry values; 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."
  3. 7 tool updates
    • Changedopenmeteo_get_air_quality5 fields changed
      • changedInput schema / properties / canvas_id / description
        Previous value: -"DataCanvas token for wide past_days, archive-range, 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 for SQL querying. Omit to create a fresh canvas."New value: +"DataCanvas token for wide past_days, archive-range, 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."
      • changedInput schema / properties / start_date / description
        Previous value: -"Start date for the archive range (YYYY-MM-DD, e.g., \"2024-07-01\"). Real CAMS values go back to at least 2022-10-01; earlier dates return rows of nulls. Requires end_date — the pair must be sent together, and neither combines with forecast_days or past_days."New value: +"Start date for the archive range (YYYY-MM-DD, e.g., \"2024-07-01\"). The CAMS global archive begins in August 2022; earlier dates return rows of nulls, and us_aqi starts a day later than the pollutant series (european_aqi starts with it). Requires end_date — the pair must be sent together, and neither combines with forecast_days or past_days."
      • changedOutput schema / properties / canvas_id / description
        Previous value: -"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. Query with SQL using this token."New value: +"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."
      • changedOutput schema / properties / notice / description
        Previous value: -"Warning that a requested variable came back with no data — names each column whose unit is \"undefined\", which is how the endpoint reports a name it parsed but does not serve."New value: +"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); recognized variables whose requested window falls outside the CAMS archive, with the timestamps that do carry values; and, when the result spilled, the canvas and table holding the full row set plus the two dataframe tools that read it."
      • changedOutput schema / properties / table_name / description
        Previous value: -"DuckDB table name for the staged data — pass to openmeteo_dataframe_query. Present only alongside canvas_id."New value: +"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."
    • Changedopenmeteo_get_climate4 fields changed
      • changedInput schema / properties / canvas_id / description
        Previous value: -"DataCanvas token for multi-decade or multi-model queries. When a result is too large to return inline — driven by total payload size, so a wide multi-model pull can spill at any row count — it spills to this canvas for SQL querying. Omit to create a fresh canvas."New value: +"DataCanvas token for multi-decade or multi-model queries. When a result is too large to return inline — driven by total payload size, so a wide multi-model 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 per-model columns, then to openmeteo_dataframe_query to run SQL against it. Omit to create a fresh canvas."
      • changedOutput schema / properties / canvas_id / description
        Previous value: -"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. Query with SQL using this token."New value: +"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 per-model columns, then to openmeteo_dataframe_query to run SQL against it."
      • changedOutput schema / properties / notice / description
        Previous value: -"Warning that a requested variable came back with no data — names each column whose unit is \"undefined\", which is how the endpoint reports a name it parsed but does not serve."New value: +"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); recognized variables a selected model carries no values for, with the dates that do carry values; and, when the result spilled, the canvas and table holding the full row set plus the two dataframe tools that read it."
      • changedOutput schema / properties / table_name / description
        Previous value: -"DuckDB table name for the staged data — pass to openmeteo_dataframe_query. Present only alongside canvas_id."New value: +"DuckDB table name for the staged data — use as the FROM target in openmeteo_dataframe_query SQL; openmeteo_dataframe_describe lists its columns, which is the only way to learn the per-model suffixes this request produced. Present only alongside canvas_id."
    • Changedopenmeteo_get_ensemble4 fields changed
      • changedInput schema / properties / canvas_id / description
        Previous value: -"DataCanvas token for large multi-member queries. When a result is too large to return inline — driven by total payload size, so a wide member fan-out can spill at any row count — it spills to this canvas for SQL querying. Omit to create a fresh canvas."New value: +"DataCanvas token for large multi-member queries. When a result is too large to return inline — driven by total payload size, so a wide member fan-out 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 per-member columns, then to openmeteo_dataframe_query to run SQL against it. Omit to create a fresh canvas."
      • changedOutput schema / properties / canvas_id / description
        Previous value: -"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. Query with SQL using this token."New value: +"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 per-member columns, then to openmeteo_dataframe_query to run SQL against it."
      • changedOutput schema / properties / notice / description
        Previous value: -"Warning that a requested variable came back with no data across every member — names each variable whose unit is \"undefined\", which is how the endpoint reports a name the selected model does not carry."New value: +"Everything this response needs to say beyond the data, composed into one advisory: variables the endpoint returned with the unit \"undefined\" across every member (a name the selected model does not carry); recognized variables whose requested window runs past the model's horizon, with the timestamps that do carry values; and, when the result spilled, the canvas and table holding the full row set plus the two dataframe tools that read it."
      • changedOutput schema / properties / table_name / description
        Previous value: -"DuckDB table name for the staged data — pass to openmeteo_dataframe_query. Present only alongside canvas_id."New value: +"DuckDB table name for the staged data — use as the FROM target in openmeteo_dataframe_query SQL; openmeteo_dataframe_describe lists its columns, which is the only way to learn the per-member suffixes this request produced. Present only alongside canvas_id."
    • Changedopenmeteo_get_flood4 fields changed
      • changedInput schema / properties / canvas_id / description
        Previous value: -"DataCanvas token for wide reanalysis queries. When a result is too large to return inline — driven by total payload size, so a multi-variable pull can spill at any row count — it spills to this canvas for SQL querying. Omit to create a fresh canvas."New value: +"DataCanvas token for wide reanalysis queries. When a result is too large to return inline — driven by total payload size, so a 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."
      • changedOutput schema / properties / canvas_id / description
        Previous value: -"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. Query with SQL using this token."New value: +"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."
      • changedOutput schema / properties / notice / description
        Previous value: -"Warning that a requested variable came back with no data — names each column whose unit is \"undefined\", which is how the endpoint reports a name it parsed but does not serve."New value: +"Everything this response needs to say beyond the data, composed into one advisory: columns GloFAS returned with the unit \"undefined\" (a name it parsed but does not serve); recognized variables whose requested range falls outside the coordinate's discharge record, with the dates that do carry values; and, when the result spilled, the canvas and table holding the full row set plus the two dataframe tools that read it."
      • changedOutput schema / properties / table_name / description
        Previous value: -"DuckDB table name for the staged data — pass to openmeteo_dataframe_query. Present only alongside canvas_id."New value: +"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."
    • Changedopenmeteo_get_forecast4 fields changed
      • changedInput schema / properties / canvas_id / description
        Previous value: -"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 for SQL querying. Omit to create a fresh canvas."New value: +"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."
      • changedOutput schema / properties / canvas_id / description
        Previous value: -"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. Query with SQL using this token."New value: +"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."
      • changedOutput schema / properties / notice / description
        Previous value: -"Warning that a requested variable came back with no data — names each column whose unit is \"undefined\", which is how the endpoint reports a name it parsed but does not serve in the requested cadence."New value: +"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); recognized variables whose requested window falls outside the data's coverage, with the timestamps that do carry values; and, when the result spilled, the canvas and table holding the full row set plus the two dataframe tools that read it."
      • changedOutput schema / properties / table_name / description
        Previous value: -"DuckDB table name for the staged data — pass to openmeteo_dataframe_query. Present only alongside canvas_id."New value: +"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."
    • Changedopenmeteo_get_historical4 fields changed
      • changedInput schema / properties / canvas_id / description
        Previous value: -"DataCanvas token for multi-year 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 for SQL querying. Omit to create a fresh canvas."New value: +"DataCanvas token for multi-year 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."
      • changedOutput schema / properties / canvas_id / description
        Previous value: -"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. Query with SQL using this token."New value: +"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."
      • changedOutput schema / properties / notice / description
        Previous value: -"Warning that a requested variable came back with no data — names each column whose unit is \"undefined\", which is how the archive reports a name it parsed but does not serve in the requested cadence."New value: +"Everything this response needs to say beyond the data, composed into one advisory: columns the archive returned with the unit \"undefined\" (a name it parsed but does not serve in the requested cadence); recognized variables whose requested window falls outside the data's coverage, with the timestamps that do carry values; and, when the result spilled, the canvas and table holding the full row set plus the two dataframe tools that read it."
      • changedOutput schema / properties / table_name / description
        Previous value: -"DuckDB table name for the staged data — pass to openmeteo_dataframe_query. Present only alongside canvas_id."New value: +"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."
    • Changedopenmeteo_get_marine4 fields changed
      • changedInput schema / properties / canvas_id / description
        Previous value: -"DataCanvas token for wide past_days, archive-range, 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 for SQL querying. Omit to create a fresh canvas."New value: +"DataCanvas token for wide past_days, archive-range, 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."
      • changedOutput schema / properties / canvas_id / description
        Previous value: -"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. Query with SQL using this token."New value: +"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."
      • changedOutput schema / properties / notice / description
        Previous value: -"Warning that a requested variable came back with no data — names each column whose unit is \"undefined\", which is how the endpoint reports a name it parsed but does not serve."New value: +"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); recognized variables whose requested window falls outside the data's coverage, with the timestamps that do carry values; and, when the result spilled, the canvas and table holding the full row set plus the two dataframe tools that read it."
      • changedOutput schema / properties / table_name / description
        Previous value: -"DuckDB table name for the staged data — pass to openmeteo_dataframe_query. Present only alongside canvas_id."New value: +"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."
  4. 8 tool updates
    • Changedopenmeteo_get_air_quality2 fields changed
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous value: -"Machine-readable failure mode. Declared by this tool: `invalid_variable`: An unknown air quality variable name was requested `no_variables_requested`: hourly_variables was not provided or is empty `date_range_incomplete`: Only one of start_date / end_date was provided — the CAMS archive requires the pair together `forecast_window_conflict`: forecast_days or a non-zero past_days was combined with start_date or end_date Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `invalid_variable`: An unknown air quality variable name was requested `no_variables_requested`: hourly_variables was not provided or is empty `date_range_incomplete`: Only one of start_date / end_date was provided — the CAMS archive requires the pair together `forecast_window_conflict`: forecast_days or a non-zero past_days was combined with start_date or end_date `date_order_invalid`: end_date is before start_date `invalid_timezone`: timezone was blank, or upstream did not recognize the requested time zone Other values are possible when a failure originates below the handler."
      • changedOutput schema / properties / error / properties / data / properties / reason / examples
        Previous value: -[
        -  "invalid_variable",
        -  "no_variables_requested",
        -  "date_range_incomplete",
        -  "forecast_window_conflict"
        -]New value: +[
        +  "invalid_variable",
        +  "no_variables_requested",
        +  "date_range_incomplete",
        +  "forecast_window_conflict",
        +  "date_order_invalid",
        +  "invalid_timezone"
        +]
    • Changedopenmeteo_get_climate2 fields changed
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous value: -"Machine-readable failure mode. Declared by this tool: `date_out_of_range`: start_date predates 1950-01-01 or end_date is after 2050-12-31 `date_order_invalid`: end_date is before start_date `no_variables_requested`: daily_variables was not provided or is empty `invalid_variable`: An unknown variable name or unsupported climate model was requested Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `date_out_of_range`: start_date predates 1950-01-01 or end_date is after 2050-12-31 `date_order_invalid`: end_date is before start_date `no_variables_requested`: daily_variables was not provided or is empty `invalid_variable`: An unknown variable name or unsupported climate model was requested `invalid_timezone`: timezone was blank, or upstream did not recognize the requested time zone Other values are possible when a failure originates below the handler."
      • changedOutput schema / properties / error / properties / data / properties / reason / examples
        Previous value: -[
        -  "date_out_of_range",
        -  "date_order_invalid",
        -  "no_variables_requested",
        -  "invalid_variable"
        -]New value: +[
        +  "date_out_of_range",
        +  "date_order_invalid",
        +  "no_variables_requested",
        +  "invalid_variable",
        +  "invalid_timezone"
        +]
    • Changedopenmeteo_get_ensemble2 fields changed
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous value: -"Machine-readable failure mode. Declared by this tool: `no_variables_requested`: Neither hourly_variables nor daily_variables was provided `invalid_variable`: An unknown variable name or unsupported model was requested `variable_wrong_cadence`: A variable the ensemble API documents under one cadence was passed in the other cadence field — for example precipitation_sum in hourly_variables, or precipitation in daily_variables Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `no_variables_requested`: Neither hourly_variables nor daily_variables was provided `invalid_variable`: An unknown variable name or unsupported model was requested `variable_wrong_cadence`: A variable the ensemble API documents under one cadence was passed in the other cadence field — for example precipitation_sum in hourly_variables, or precipitation in daily_variables `invalid_timezone`: timezone was blank, or upstream did not recognize the requested time zone Other values are possible when a failure originates below the handler."
      • changedOutput schema / properties / error / properties / data / properties / reason / examples
        Previous value: -[
        -  "no_variables_requested",
        -  "invalid_variable",
        -  "variable_wrong_cadence"
        -]New value: +[
        +  "no_variables_requested",
        +  "invalid_variable",
        +  "variable_wrong_cadence",
        +  "invalid_timezone"
        +]
    • Changedopenmeteo_get_flood2 fields changed
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous value: -"Machine-readable failure mode. Declared by this tool: `no_variables_requested`: daily_variables was not provided or is empty `date_range_incomplete`: Only one of start_date / end_date was provided — GloFAS requires the pair together `forecast_days_conflict`: forecast_days was combined with start_date or end_date `date_order_invalid`: end_date is before start_date `date_out_of_range`: start_date predates 1984-01-01 or date range is otherwise invalid `invalid_variable`: An unknown discharge variable name was requested Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `no_variables_requested`: daily_variables was not provided or is empty `date_range_incomplete`: Only one of start_date / end_date was provided — GloFAS requires the pair together `forecast_days_conflict`: forecast_days was combined with start_date or end_date `date_order_invalid`: end_date is before start_date `date_out_of_range`: start_date predates 1984-01-01 or date range is otherwise invalid `invalid_variable`: An unknown discharge variable name was requested `invalid_timezone`: timezone was blank, or upstream did not recognize the requested time zone Other values are possible when a failure originates below the handler."
      • changedOutput schema / properties / error / properties / data / properties / reason / examples
        Previous value: -[
        -  "no_variables_requested",
        -  "date_range_incomplete",
        -  "forecast_days_conflict",
        -  "date_order_invalid",
        -  "date_out_of_range",
        -  "invalid_variable"
        -]New value: +[
        +  "no_variables_requested",
        +  "date_range_incomplete",
        +  "forecast_days_conflict",
        +  "date_order_invalid",
        +  "date_out_of_range",
        +  "invalid_variable",
        +  "invalid_timezone"
        +]
    • Changedopenmeteo_get_forecast2 fields changed
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous value: -"Machine-readable failure mode. Declared by this tool: `invalid_variable`: An unknown variable name was requested `variable_wrong_cadence`: A variable Open-Meteo documents under one cadence was passed in the other cadence field — for example cloud_cover in daily_variables, or temperature_2m_max in hourly_variables `no_variables_requested`: Neither hourly_variables nor daily_variables was provided Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `invalid_variable`: An unknown variable name was requested `variable_wrong_cadence`: A variable Open-Meteo documents under one cadence was passed in the other cadence field — for example cloud_cover in daily_variables, or temperature_2m_max in hourly_variables `no_variables_requested`: Neither hourly_variables nor daily_variables was provided `invalid_timezone`: timezone was blank, or upstream did not recognize the requested time zone Other values are possible when a failure originates below the handler."
      • changedOutput schema / properties / error / properties / data / properties / reason / examples
        Previous value: -[
        -  "invalid_variable",
        -  "variable_wrong_cadence",
        -  "no_variables_requested"
        -]New value: +[
        +  "invalid_variable",
        +  "variable_wrong_cadence",
        +  "no_variables_requested",
        +  "invalid_timezone"
        +]
    • Changedopenmeteo_get_historical2 fields changed
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous value: -"Machine-readable failure mode. Declared by this tool: `date_out_of_range`: start_date predates 1940-01-01 or end_date is within the ERA5 lag window `date_order_invalid`: end_date is before start_date `no_variables_requested`: Neither hourly_variables nor daily_variables was provided `invalid_variable`: An unknown variable name was requested `variable_wrong_cadence`: A variable Open-Meteo documents under one cadence was passed in the other cadence field — for example cloud_cover in daily_variables, or temperature_2m_max in hourly_variables Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `date_out_of_range`: start_date predates 1940-01-01 or end_date is within the ERA5 lag window `date_order_invalid`: end_date is before start_date `no_variables_requested`: Neither hourly_variables nor daily_variables was provided `invalid_variable`: An unknown variable name was requested `variable_wrong_cadence`: A variable Open-Meteo documents under one cadence was passed in the other cadence field — for example cloud_cover in daily_variables, or temperature_2m_max in hourly_variables `invalid_timezone`: timezone was blank, or upstream did not recognize the requested time zone Other values are possible when a failure originates below the handler."
      • changedOutput schema / properties / error / properties / data / properties / reason / examples
        Previous value: -[
        -  "date_out_of_range",
        -  "date_order_invalid",
        -  "no_variables_requested",
        -  "invalid_variable",
        -  "variable_wrong_cadence"
        -]New value: +[
        +  "date_out_of_range",
        +  "date_order_invalid",
        +  "no_variables_requested",
        +  "invalid_variable",
        +  "variable_wrong_cadence",
        +  "invalid_timezone"
        +]
    • Changedopenmeteo_get_marine2 fields changed
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous value: -"Machine-readable failure mode. Declared by this tool: `invalid_variable`: An unknown marine variable name was requested `variable_wrong_cadence`: A variable Open-Meteo documents under one cadence was passed in the other cadence field — for example wave_height in daily_variables, or wave_height_max in hourly_variables `no_variables_requested`: Neither hourly_variables nor daily_variables was provided `date_range_incomplete`: Only one of start_date / end_date was provided — the marine archive requires the pair together `forecast_window_conflict`: forecast_days or a non-zero past_days was combined with start_date or end_date Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `invalid_variable`: An unknown marine variable name was requested `variable_wrong_cadence`: A variable Open-Meteo documents under one cadence was passed in the other cadence field — for example wave_height in daily_variables, or wave_height_max in hourly_variables `no_variables_requested`: Neither hourly_variables nor daily_variables was provided `date_range_incomplete`: Only one of start_date / end_date was provided — the marine archive requires the pair together `forecast_window_conflict`: forecast_days or a non-zero past_days was combined with start_date or end_date `date_order_invalid`: end_date is before start_date `invalid_timezone`: timezone was blank, or upstream did not recognize the requested time zone Other values are possible when a failure originates below the handler."
      • changedOutput schema / properties / error / properties / data / properties / reason / examples
        Previous value: -[
        -  "invalid_variable",
        -  "variable_wrong_cadence",
        -  "no_variables_requested",
        -  "date_range_incomplete",
        -  "forecast_window_conflict"
        -]New value: +[
        +  "invalid_variable",
        +  "variable_wrong_cadence",
        +  "no_variables_requested",
        +  "date_range_incomplete",
        +  "forecast_window_conflict",
        +  "date_order_invalid",
        +  "invalid_timezone"
        +]
    • Changedopenmeteo_search_locations16 fields changed
      • changedInput schema / properties / language / description
        Previous value: -"Language 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. language \"zh\" for \"上海\", \"ru\" for \"Москва\". Default \"en\"; a query in a recognized non-Latin script (CJK, Hangul, Cyrillic, Arabic, Greek, Hebrew, Thai, Devanagari) that misses under \"en\" is retried once with the language inferred from its script."New value: +"Language 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. language \"zh\" for \"上海\", \"ru\" for \"Москва\". This resolves a native-script name of three or more characters, which is matched by normalized prefix; a one- or two-character name must equal an index entry exactly, so setting language alone will not find \"서울\" or \"大阪\" — retry those with the full administrative name (\"서울특별시\", \"大阪市\") or the romanized name (\"Seoul\", \"Osaka\"). Default \"en\"; a query in a recognized non-Latin script (CJK, Hangul, Cyrillic, Arabic, Greek, Hebrew, Thai, Devanagari) that misses under \"en\" is retried once with the language inferred from its script."
      • changedInput schema / properties / name / description
        Previous value: -"Place 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 disambiguate. Weather tools require coordinates — use the lat/lon from this result."New value: +"Place 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 disambiguate. A one- or two-character native-script name (\"서울\", \"大阪\") needs the full administrative name (\"서울특별시\", \"大阪市\") or the romanized name (\"Seoul\", \"Osaka\") — see the language field. Weather tools require coordinates — use the lat/lon from this result."
      • removedOutput schema / properties / results / items / properties / admin1 / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / results / items / properties / admin1 / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / results / items / properties / admin2 / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / results / items / properties / admin2 / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / results / items / properties / country / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / results / items / properties / country / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / results / items / properties / country_code / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / results / items / properties / country_code / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / results / items / properties / elevation / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / results / items / properties / elevation / type
        Added value: +[
        +  "number",
        +  "null"
        +]
      • removedOutput schema / properties / results / items / properties / population / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / results / items / properties / population / type
        Added value: +[
        +  "number",
        +  "null"
        +]
      • removedOutput schema / properties / results / items / properties / timezone / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / results / items / properties / timezone / type
        Added value: +[
        +  "string",
        +  "null"
        +]
  5. 11 tool updates
    • Changedopenmeteo_dataframe_describe6 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / anyOf
        Added value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "error"
        +      ]
        +    },
        +    "required": [
        +      "canvas_id",
        +      "tables",
        +      "expires_at"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "error"
        +    ]
        +  }
        +]
      • addedOutput schema / properties / error
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Present when the call failed. Absent on success.",
        +  "properties": {
        +    "code": {
        +      "description": "JSON-RPC error code for this failure.",
        +      "maximum": 9007199254740991,
        +      "minimum": -9007199254740991,
        +      "type": "integer"
        +    },
        +    "data": {
        +      "additionalProperties": {},
        +      "properties": {
        +        "reason": {
        +          "description": "Machine-readable failure mode. Declared by this tool: `canvas_not_enabled`: CANVAS_PROVIDER_TYPE is not set to duckdb `canvas_not_found`: The canvas_id is unknown or has expired (TTL is 24 h sliding) Other values are possible when a failure originates below the handler.",
        +          "examples": [
        +            "canvas_not_enabled",
        +            "canvas_not_found"
        +          ],
        +          "type": "string"
        +        },
        +        "recovery": {
        +          "additionalProperties": {},
        +          "description": "Actionable next step for the caller.",
        +          "properties": {
        +            "hint": {
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "hint"
        +          ],
        +          "type": "object"
        +        },
        +        "retryable": {
        +          "description": "Whether retrying may succeed.",
        +          "type": "boolean"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "message": {
        +      "description": "Human-readable description of what went wrong.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "code",
        +    "message"
        +  ],
        +  "type": "object"
        +}
      • removedOutput schema / required
        Removed value: -[
        -  "canvas_id",
        -  "tables",
        -  "expires_at"
        -]
    • Changedopenmeteo_dataframe_query6 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / anyOf
        Added value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "error"
        +      ]
        +    },
        +    "required": [
        +      "rows",
        +      "row_count",
        +      "canvas_id"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "error"
        +    ]
        +  }
        +]
      • addedOutput schema / properties / error
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Present when the call failed. Absent on success.",
        +  "properties": {
        +    "code": {
        +      "description": "JSON-RPC error code for this failure.",
        +      "maximum": 9007199254740991,
        +      "minimum": -9007199254740991,
        +      "type": "integer"
        +    },
        +    "data": {
        +      "additionalProperties": {},
        +      "properties": {
        +        "reason": {
        +          "description": "Machine-readable failure mode. Declared by this tool: `canvas_not_enabled`: CANVAS_PROVIDER_TYPE is not set to duckdb `canvas_not_found`: The canvas_id is unknown or has expired (TTL is 24 h sliding) `system_catalog_access`: The SQL references a system catalog (information_schema, sqlite_master, pg_catalog, or a duckdb_*() function) `missing_table`: The SQL references a table that is not staged on this canvas — a mistyped name, or one that expired (24 h sliding TTL) or was dropped Other values are possible when a failure originates below the handler.",
        +          "examples": [
        +            "canvas_not_enabled",
        +            "canvas_not_found",
        +            "system_catalog_access",
        +            "missing_table"
        +          ],
        +          "type": "string"
        +        },
        +        "recovery": {
        +          "additionalProperties": {},
        +          "description": "Actionable next step for the caller.",
        +          "properties": {
        +            "hint": {
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "hint"
        +          ],
        +          "type": "object"
        +        },
        +        "retryable": {
        +          "description": "Whether retrying may succeed.",
        +          "type": "boolean"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "message": {
        +      "description": "Human-readable description of what went wrong.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "code",
        +    "message"
        +  ],
        +  "type": "object"
        +}
      • removedOutput schema / required
        Removed value: -[
        -  "rows",
        -  "row_count",
        -  "canvas_id"
        -]
    • Changedopenmeteo_get_air_quality6 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / anyOf
        Added value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "error"
        +      ]
        +    },
        +    "required": [
        +      "latitude",
        +      "longitude",
        +      "timezone",
        +      "record_count",
        +      "data_source",
        +      "truncated"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "error"
        +    ]
        +  }
        +]
      • addedOutput schema / properties / error
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Present when the call failed. Absent on success.",
        +  "properties": {
        +    "code": {
        +      "description": "JSON-RPC error code for this failure.",
        +      "maximum": 9007199254740991,
        +      "minimum": -9007199254740991,
        +      "type": "integer"
        +    },
        +    "data": {
        +      "additionalProperties": {},
        +      "properties": {
        +        "reason": {
        +          "description": "Machine-readable failure mode. Declared by this tool: `invalid_variable`: An unknown air quality variable name was requested `no_variables_requested`: hourly_variables was not provided or is empty `date_range_incomplete`: Only one of start_date / end_date was provided — the CAMS archive requires the pair together `forecast_window_conflict`: forecast_days or a non-zero past_days was combined with start_date or end_date Other values are possible when a failure originates below the handler.",
        +          "examples": [
        +            "invalid_variable",
        +            "no_variables_requested",
        +            "date_range_incomplete",
        +            "forecast_window_conflict"
        +          ],
        +          "type": "string"
        +        },
        +        "recovery": {
        +          "additionalProperties": {},
        +          "description": "Actionable next step for the caller.",
        +          "properties": {
        +            "hint": {
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "hint"
        +          ],
        +          "type": "object"
        +        },
        +        "retryable": {
        +          "description": "Whether retrying may succeed.",
        +          "type": "boolean"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "message": {
        +      "description": "Human-readable description of what went wrong.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "code",
        +    "message"
        +  ],
        +  "type": "object"
        +}
      • removedOutput schema / required
        Removed value: -[
        -  "latitude",
        -  "longitude",
        -  "timezone",
        -  "record_count",
        -  "data_source",
        -  "truncated"
        -]
    • Changedopenmeteo_get_climate6 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / anyOf
        Added value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "error"
        +      ]
        +    },
        +    "required": [
        +      "latitude",
        +      "longitude",
        +      "elevation",
        +      "timezone",
        +      "date_range",
        +      "record_count",
        +      "daily",
        +      "truncated"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "error"
        +    ]
        +  }
        +]
      • addedOutput schema / properties / error
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Present when the call failed. Absent on success.",
        +  "properties": {
        +    "code": {
        +      "description": "JSON-RPC error code for this failure.",
        +      "maximum": 9007199254740991,
        +      "minimum": -9007199254740991,
        +      "type": "integer"
        +    },
        +    "data": {
        +      "additionalProperties": {},
        +      "properties": {
        +        "reason": {
        +          "description": "Machine-readable failure mode. Declared by this tool: `date_out_of_range`: start_date predates 1950-01-01 or end_date is after 2050-12-31 `date_order_invalid`: end_date is before start_date `no_variables_requested`: daily_variables was not provided or is empty `invalid_variable`: An unknown variable name or unsupported climate model was requested Other values are possible when a failure originates below the handler.",
        +          "examples": [
        +            "date_out_of_range",
        +            "date_order_invalid",
        +            "no_variables_requested",
        +            "invalid_variable"
        +          ],
        +          "type": "string"
        +        },
        +        "recovery": {
        +          "additionalProperties": {},
        +          "description": "Actionable next step for the caller.",
        +          "properties": {
        +            "hint": {
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "hint"
        +          ],
        +          "type": "object"
        +        },
        +        "retryable": {
        +          "description": "Whether retrying may succeed.",
        +          "type": "boolean"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "message": {
        +      "description": "Human-readable description of what went wrong.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "code",
        +    "message"
        +  ],
        +  "type": "object"
        +}
      • removedOutput schema / required
        Removed value: -[
        -  "latitude",
        -  "longitude",
        -  "elevation",
        -  "timezone",
        -  "date_range",
        -  "record_count",
        -  "daily",
        -  "truncated"
        -]
    • Changedopenmeteo_get_elevation6 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / anyOf
        Added value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "error"
        +      ]
        +    },
        +    "required": [
        +      "elevations"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "error"
        +    ]
        +  }
        +]
      • addedOutput schema / properties / error
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Present when the call failed. Absent on success.",
        +  "properties": {
        +    "code": {
        +      "description": "JSON-RPC error code for this failure.",
        +      "maximum": 9007199254740991,
        +      "minimum": -9007199254740991,
        +      "type": "integer"
        +    },
        +    "data": {
        +      "additionalProperties": {},
        +      "properties": {
        +        "reason": {
        +          "description": "Machine-readable failure mode. Declared by this tool: `coordinate_count_mismatch`: latitudes and longitudes arrays have different lengths Other values are possible when a failure originates below the handler.",
        +          "examples": [
        +            "coordinate_count_mismatch"
        +          ],
        +          "type": "string"
        +        },
        +        "recovery": {
        +          "additionalProperties": {},
        +          "description": "Actionable next step for the caller.",
        +          "properties": {
        +            "hint": {
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "hint"
        +          ],
        +          "type": "object"
        +        },
        +        "retryable": {
        +          "description": "Whether retrying may succeed.",
        +          "type": "boolean"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "message": {
        +      "description": "Human-readable description of what went wrong.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "code",
        +    "message"
        +  ],
        +  "type": "object"
        +}
      • removedOutput schema / required
        Removed value: -[
        -  "elevations"
        -]
    • Changedopenmeteo_get_ensemble6 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / anyOf
        Added value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "error"
        +      ]
        +    },
        +    "required": [
        +      "latitude",
        +      "longitude",
        +      "elevation",
        +      "timezone",
        +      "record_count",
        +      "truncated"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "error"
        +    ]
        +  }
        +]
      • addedOutput schema / properties / error
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Present when the call failed. Absent on success.",
        +  "properties": {
        +    "code": {
        +      "description": "JSON-RPC error code for this failure.",
        +      "maximum": 9007199254740991,
        +      "minimum": -9007199254740991,
        +      "type": "integer"
        +    },
        +    "data": {
        +      "additionalProperties": {},
        +      "properties": {
        +        "reason": {
        +          "description": "Machine-readable failure mode. Declared by this tool: `no_variables_requested`: Neither hourly_variables nor daily_variables was provided `invalid_variable`: An unknown variable name or unsupported model was requested `variable_wrong_cadence`: A variable the ensemble API documents under one cadence was passed in the other cadence field — for example precipitation_sum in hourly_variables, or precipitation in daily_variables Other values are possible when a failure originates below the handler.",
        +          "examples": [
        +            "no_variables_requested",
        +            "invalid_variable",
        +            "variable_wrong_cadence"
        +          ],
        +          "type": "string"
        +        },
        +        "recovery": {
        +          "additionalProperties": {},
        +          "description": "Actionable next step for the caller.",
        +          "properties": {
        +            "hint": {
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "hint"
        +          ],
        +          "type": "object"
        +        },
        +        "retryable": {
        +          "description": "Whether retrying may succeed.",
        +          "type": "boolean"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "message": {
        +      "description": "Human-readable description of what went wrong.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "code",
        +    "message"
        +  ],
        +  "type": "object"
        +}
      • removedOutput schema / required
        Removed value: -[
        -  "latitude",
        -  "longitude",
        -  "elevation",
        -  "timezone",
        -  "record_count",
        -  "truncated"
        -]
    • Changedopenmeteo_get_flood6 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / anyOf
        Added value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "error"
        +      ]
        +    },
        +    "required": [
        +      "latitude",
        +      "longitude",
        +      "timezone",
        +      "record_count",
        +      "daily",
        +      "truncated"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "error"
        +    ]
        +  }
        +]
      • addedOutput schema / properties / error
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Present when the call failed. Absent on success.",
        +  "properties": {
        +    "code": {
        +      "description": "JSON-RPC error code for this failure.",
        +      "maximum": 9007199254740991,
        +      "minimum": -9007199254740991,
        +      "type": "integer"
        +    },
        +    "data": {
        +      "additionalProperties": {},
        +      "properties": {
        +        "reason": {
        +          "description": "Machine-readable failure mode. Declared by this tool: `no_variables_requested`: daily_variables was not provided or is empty `date_range_incomplete`: Only one of start_date / end_date was provided — GloFAS requires the pair together `forecast_days_conflict`: forecast_days was combined with start_date or end_date `date_order_invalid`: end_date is before start_date `date_out_of_range`: start_date predates 1984-01-01 or date range is otherwise invalid `invalid_variable`: An unknown discharge variable name was requested Other values are possible when a failure originates below the handler.",
        +          "examples": [
        +            "no_variables_requested",
        +            "date_range_incomplete",
        +            "forecast_days_conflict",
        +            "date_order_invalid",
        +            "date_out_of_range",
        +            "invalid_variable"
        +          ],
        +          "type": "string"
        +        },
        +        "recovery": {
        +          "additionalProperties": {},
        +          "description": "Actionable next step for the caller.",
        +          "properties": {
        +            "hint": {
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "hint"
        +          ],
        +          "type": "object"
        +        },
        +        "retryable": {
        +          "description": "Whether retrying may succeed.",
        +          "type": "boolean"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "message": {
        +      "description": "Human-readable description of what went wrong.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "code",
        +    "message"
        +  ],
        +  "type": "object"
        +}
      • removedOutput schema / required
        Removed value: -[
        -  "latitude",
        -  "longitude",
        -  "timezone",
        -  "record_count",
        -  "daily",
        -  "truncated"
        -]
    • Changedopenmeteo_get_forecast6 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / anyOf
        Added value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "error"
        +      ]
        +    },
        +    "required": [
        +      "latitude",
        +      "longitude",
        +      "elevation",
        +      "timezone",
        +      "utc_offset_seconds",
        +      "record_count",
        +      "truncated"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "error"
        +    ]
        +  }
        +]
      • addedOutput schema / properties / error
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Present when the call failed. Absent on success.",
        +  "properties": {
        +    "code": {
        +      "description": "JSON-RPC error code for this failure.",
        +      "maximum": 9007199254740991,
        +      "minimum": -9007199254740991,
        +      "type": "integer"
        +    },
        +    "data": {
        +      "additionalProperties": {},
        +      "properties": {
        +        "reason": {
        +          "description": "Machine-readable failure mode. Declared by this tool: `invalid_variable`: An unknown variable name was requested `variable_wrong_cadence`: A variable Open-Meteo documents under one cadence was passed in the other cadence field — for example cloud_cover in daily_variables, or temperature_2m_max in hourly_variables `no_variables_requested`: Neither hourly_variables nor daily_variables was provided Other values are possible when a failure originates below the handler.",
        +          "examples": [
        +            "invalid_variable",
        +            "variable_wrong_cadence",
        +            "no_variables_requested"
        +          ],
        +          "type": "string"
        +        },
        +        "recovery": {
        +          "additionalProperties": {},
        +          "description": "Actionable next step for the caller.",
        +          "properties": {
        +            "hint": {
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "hint"
        +          ],
        +          "type": "object"
        +        },
        +        "retryable": {
        +          "description": "Whether retrying may succeed.",
        +          "type": "boolean"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "message": {
        +      "description": "Human-readable description of what went wrong.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "code",
        +    "message"
        +  ],
        +  "type": "object"
        +}
      • removedOutput schema / required
        Removed value: -[
        -  "latitude",
        -  "longitude",
        -  "elevation",
        -  "timezone",
        -  "utc_offset_seconds",
        -  "record_count",
        -  "truncated"
        -]
    • Changedopenmeteo_get_historical6 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / anyOf
        Added value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "error"
        +      ]
        +    },
        +    "required": [
        +      "latitude",
        +      "longitude",
        +      "elevation",
        +      "timezone",
        +      "date_range",
        +      "record_count",
        +      "truncated"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "error"
        +    ]
        +  }
        +]
      • addedOutput schema / properties / error
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Present when the call failed. Absent on success.",
        +  "properties": {
        +    "code": {
        +      "description": "JSON-RPC error code for this failure.",
        +      "maximum": 9007199254740991,
        +      "minimum": -9007199254740991,
        +      "type": "integer"
        +    },
        +    "data": {
        +      "additionalProperties": {},
        +      "properties": {
        +        "reason": {
        +          "description": "Machine-readable failure mode. Declared by this tool: `date_out_of_range`: start_date predates 1940-01-01 or end_date is within the ERA5 lag window `date_order_invalid`: end_date is before start_date `no_variables_requested`: Neither hourly_variables nor daily_variables was provided `invalid_variable`: An unknown variable name was requested `variable_wrong_cadence`: A variable Open-Meteo documents under one cadence was passed in the other cadence field — for example cloud_cover in daily_variables, or temperature_2m_max in hourly_variables Other values are possible when a failure originates below the handler.",
        +          "examples": [
        +            "date_out_of_range",
        +            "date_order_invalid",
        +            "no_variables_requested",
        +            "invalid_variable",
        +            "variable_wrong_cadence"
        +          ],
        +          "type": "string"
        +        },
        +        "recovery": {
        +          "additionalProperties": {},
        +          "description": "Actionable next step for the caller.",
        +          "properties": {
        +            "hint": {
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "hint"
        +          ],
        +          "type": "object"
        +        },
        +        "retryable": {
        +          "description": "Whether retrying may succeed.",
        +          "type": "boolean"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "message": {
        +      "description": "Human-readable description of what went wrong.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "code",
        +    "message"
        +  ],
        +  "type": "object"
        +}
      • removedOutput schema / required
        Removed value: -[
        -  "latitude",
        -  "longitude",
        -  "elevation",
        -  "timezone",
        -  "date_range",
        -  "record_count",
        -  "truncated"
        -]
    • Changedopenmeteo_get_marine6 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / anyOf
        Added value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "error"
        +      ]
        +    },
        +    "required": [
        +      "latitude",
        +      "longitude",
        +      "timezone",
        +      "record_count",
        +      "truncated"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "error"
        +    ]
        +  }
        +]
      • addedOutput schema / properties / error
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Present when the call failed. Absent on success.",
        +  "properties": {
        +    "code": {
        +      "description": "JSON-RPC error code for this failure.",
        +      "maximum": 9007199254740991,
        +      "minimum": -9007199254740991,
        +      "type": "integer"
        +    },
        +    "data": {
        +      "additionalProperties": {},
        +      "properties": {
        +        "reason": {
        +          "description": "Machine-readable failure mode. Declared by this tool: `invalid_variable`: An unknown marine variable name was requested `variable_wrong_cadence`: A variable Open-Meteo documents under one cadence was passed in the other cadence field — for example wave_height in daily_variables, or wave_height_max in hourly_variables `no_variables_requested`: Neither hourly_variables nor daily_variables was provided `date_range_incomplete`: Only one of start_date / end_date was provided — the marine archive requires the pair together `forecast_window_conflict`: forecast_days or a non-zero past_days was combined with start_date or end_date Other values are possible when a failure originates below the handler.",
        +          "examples": [
        +            "invalid_variable",
        +            "variable_wrong_cadence",
        +            "no_variables_requested",
        +            "date_range_incomplete",
        +            "forecast_window_conflict"
        +          ],
        +          "type": "string"
        +        },
        +        "recovery": {
        +          "additionalProperties": {},
        +          "description": "Actionable next step for the caller.",
        +          "properties": {
        +            "hint": {
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "hint"
        +          ],
        +          "type": "object"
        +        },
        +        "retryable": {
        +          "description": "Whether retrying may succeed.",
        +          "type": "boolean"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "message": {
        +      "description": "Human-readable description of what went wrong.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "code",
        +    "message"
        +  ],
        +  "type": "object"
        +}
      • removedOutput schema / required
        Removed value: -[
        -  "latitude",
        -  "longitude",
        -  "timezone",
        -  "record_count",
        -  "truncated"
        -]
    • Changedopenmeteo_search_locations6 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / anyOf
        Added value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "error"
        +      ]
        +    },
        +    "required": [
        +      "results",
        +      "count"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "error"
        +    ]
        +  }
        +]
      • addedOutput schema / properties / error
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Present when the call failed. Absent on success.",
        +  "properties": {
        +    "code": {
        +      "description": "JSON-RPC error code for this failure.",
        +      "maximum": 9007199254740991,
        +      "minimum": -9007199254740991,
        +      "type": "integer"
        +    },
        +    "data": {
        +      "additionalProperties": {},
        +      "properties": {
        +        "reason": {
        +          "description": "Machine-readable failure mode. Declared by this tool: `no_results`: The search returned no matching places Other values are possible when a failure originates below the handler.",
        +          "examples": [
        +            "no_results"
        +          ],
        +          "type": "string"
        +        },
        +        "recovery": {
        +          "additionalProperties": {},
        +          "description": "Actionable next step for the caller.",
        +          "properties": {
        +            "hint": {
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "hint"
        +          ],
        +          "type": "object"
        +        },
        +        "retryable": {
        +          "description": "Whether retrying may succeed.",
        +          "type": "boolean"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "message": {
        +      "description": "Human-readable description of what went wrong.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "code",
        +    "message"
        +  ],
        +  "type": "object"
        +}
      • removedOutput schema / required
        Removed value: -[
        -  "results",
        -  "count"
        -]
  6. 2 tool updates
    • Changedopenmeteo_get_climate1 field changed
      • changedInput schema / properties / models / description
        Previous value: -"CMIP6 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 name (e.g. temperature_2m_max_MRI_AGCM3_2_S). Omit to use the API default (a single model, unsuffixed columns)."New value: +"CMIP6 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 name (e.g. temperature_2m_max_MRI_AGCM3_2_S). Omit to use the API default (a single model, unsuffixed columns). A name outside this list is sent upstream rather than rejected here."
    • Changedopenmeteo_get_ensemble2 fields changed
      • changedInput schema / properties / models / description
        Previous value: -"Ensemble 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."New value: +"Ensemble model to use, one name: ecmwf_ifs025_ensemble (51 members, global 0.25°), ecmwf_aifs025_ensemble (51, global 0.25°), ecmwf_ifs_europe_ensemble (51, Europe 9 km), ecmwf_aifs_europe_ensemble (51, Europe 31 km), google_weathernext2_ensemble (64, global 0.25°), ncep_gefs_seamless (31, global blend), ncep_gefs025 (31, global 0.25°), ncep_gefs05 (31, global 50 km, 35 days), ncep_aigefs025 (31, global 0.25°), icon_seamless_eps (20–40, global/Europe blend), icon_global_eps (40, global 26 km), icon_eu_eps (40, Europe 13 km), icon_d2_eps (20, Central Europe 2 km), gem_global_ensemble (21, global 0.25°), bom_access_global_ensemble (18, global 40 km), ukmo_global_ensemble_20km (18, global 20 km), ukmo_uk_ensemble_2km (3, UK 2 km), meteoswiss_icon_ch1_ensemble (11, Central Europe 1 km), meteoswiss_icon_ch2_ensemble (21, Central Europe 2 km). Member counts include the control run. Omit to use the API default blend. A name outside this list is sent upstream rather than rejected here, so a model Open-Meteo adds later still works."
      • changedOutput schema / properties / model / description
        Previous value: -"Ensemble model used (e.g. \"ecmwf_ifs025\") — echoes the requested models parameter. Absent when models was omitted (API default blend; the API reports no provenance)."New value: +"Ensemble model used (e.g. \"ecmwf_ifs025_ensemble\") — echoes the requested models parameter. Absent when models was omitted (API default blend; the API reports no provenance)."
  7. 9 tool updates
    • Changedopenmeteo_dataframe_describe1 field changed
      • changedInput schema / properties / canvas_id / description
        Previous value: -"Canvas ID returned by openmeteo_get_forecast, openmeteo_get_historical, openmeteo_get_ensemble, openmeteo_get_flood, or openmeteo_get_climate when truncated: true."New value: +"Canvas ID returned by openmeteo_get_forecast, openmeteo_get_historical, openmeteo_get_marine, openmeteo_get_air_quality, openmeteo_get_ensemble, openmeteo_get_flood, or openmeteo_get_climate when truncated: true."
    • Changedopenmeteo_dataframe_query1 field changed
      • changedInput schema / properties / canvas_id / description
        Previous value: -"Canvas ID returned by openmeteo_get_forecast, openmeteo_get_historical, openmeteo_get_ensemble, openmeteo_get_flood, or openmeteo_get_climate when truncated: true."New value: +"Canvas ID returned by openmeteo_get_forecast, openmeteo_get_historical, openmeteo_get_marine, openmeteo_get_air_quality, openmeteo_get_ensemble, openmeteo_get_flood, or openmeteo_get_climate when truncated: true."
    • Changedopenmeteo_get_air_quality14 fields changed
      • addedInput schema / properties / canvas_id
        Added value: +{
        +  "description": "DataCanvas token for wide past_days, archive-range, 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 for SQL querying. Omit to create a fresh canvas.",
        +  "type": "string"
        +}
      • addedInput schema / properties / end_date
        Added value: +{
        +  "description": "End date for the archive range (YYYY-MM-DD, inclusive). Must be on or after start_date. Requires start_date — the pair must be sent together, and neither combines with forecast_days or past_days.",
        +  "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
        +  "type": "string"
        +}
      • removedInput schema / properties / forecast_days / default
        Removed value: -5
      • changedInput schema / properties / forecast_days / description
        Previous value: -"Forecast horizon in days (1–7). Default 5."New value: +"Forecast horizon in days (1–7). Omit for the upstream default of 5. Mutually exclusive with start_date/end_date — omit it entirely when pulling an archive range."
      • addedInput schema / properties / past_days
        Added value: +{
        +  "default": 0,
        +  "description": "Include this many days of past data before today (0–92). Use for recent history instead of a start_date/end_date range. Default 0. Must stay 0 when start_date/end_date are used.",
        +  "maximum": 92,
        +  "minimum": 0,
        +  "type": "integer"
        +}
      • addedInput schema / properties / start_date
        Added value: +{
        +  "description": "Start date for the archive range (YYYY-MM-DD, e.g., \"2024-07-01\"). Real CAMS values go back to at least 2022-10-01; earlier dates return rows of nulls. Requires end_date — the pair must be sent together, and neither combines with forecast_days or past_days.",
        +  "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
        +  "type": "string"
        +}
      • addedOutput schema / properties / canvas_id
        Added value: +{
        +  "description": "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. Query with SQL using this token.",
        +  "type": "string"
        +}
      • changedOutput schema / properties / data_source / description
        Previous value: -"Data source identifier — this is modeled forecast data from CAMS, not measured station data."New value: +"Data source identifier — this is modeled CAMS data, forecast or archive, not measured station data."
      • changedOutput schema / properties / hourly / description
        Previous value: -"Per-hour records with \"time\" (ISO 8601) + one key per requested variable. Units: pm2_5/pm10/dust in μg/m³, carbon_monoxide in μg/m³, nitrogen_dioxide/sulphur_dioxide/ozone in μg/m³, european_aqi/us_aqi as index values."New value: +"Per-hour records with \"time\" (ISO 8601) + one key per requested variable. Units: pm2_5/pm10/dust in μg/m³, carbon_monoxide in μg/m³, nitrogen_dioxide/sulphur_dioxide/ozone in μg/m³, european_aqi/us_aqi as index values. When truncated, contains only a preview — query canvas_id for the full dataset when one is present."
      • addedOutput schema / properties / notice
        Added value: +{
        +  "description": "Warning that a requested variable came back with no data — names each column whose unit is \"undefined\", which is how the endpoint reports a name it parsed but does not serve.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / record_count
        Added value: +{
        +  "description": "Total number of hourly records — the full upstream total when truncated is true, not the length of the hourly preview.",
        +  "type": "number"
        +}
      • addedOutput schema / properties / table_name
        Added value: +{
        +  "description": "DuckDB table name for the staged data — pass to openmeteo_dataframe_query. Present only alongside canvas_id.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / truncated
        Added value: +{
        +  "description": "True when the response was too large to return inline, so hourly carries a bounded preview rather than the full set. With DataCanvas enabled the complete data is staged at canvas_id. With it disabled there is no canvas_id, and the omitted rows are reached only by narrowing the request.",
        +  "type": "boolean"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "latitude",
        -  "longitude",
        -  "timezone",
        -  "data_source"
        -]New value: +[
        +  "latitude",
        +  "longitude",
        +  "timezone",
        +  "record_count",
        +  "data_source",
        +  "truncated"
        +]
    • Changedopenmeteo_get_climate1 field changed
      • addedOutput schema / properties / notice
        Added value: +{
        +  "description": "Warning that a requested variable came back with no data — names each column whose unit is \"undefined\", which is how the endpoint reports a name it parsed but does not serve.",
        +  "type": "string"
        +}
    • Changedopenmeteo_get_ensemble3 fields changed
      • changedInput schema / properties / daily_variables / description
        Previous value: -"Daily 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 hourly_variables or daily_variables required."New value: +"Daily 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, … Daily names only — an hourly name such as precipitation or temperature_2m belongs in hourly_variables and is rejected here; for a daily summary use its published aggregate (precipitation_sum, temperature_2m_max). At least one of hourly_variables or daily_variables required."
      • changedInput schema / properties / hourly_variables / description
        Previous value: -"Hourly 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 output. At least one of hourly_variables or daily_variables required."New value: +"Hourly 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 output. Hourly names only — a daily-only aggregate such as precipitation_sum or wind_speed_10m_max belongs in daily_variables and is rejected here; temperature_2m_max and temperature_2m_min are an exception, published here as 3-hourly aggregations as well as daily. At least one of hourly_variables or daily_variables required."
      • addedOutput schema / properties / notice
        Added value: +{
        +  "description": "Warning that a requested variable came back with no data across every member — names each variable whose unit is \"undefined\", which is how the endpoint reports a name the selected model does not carry.",
        +  "type": "string"
        +}
    • Changedopenmeteo_get_flood1 field changed
      • addedOutput schema / properties / notice
        Added value: +{
        +  "description": "Warning that a requested variable came back with no data — names each column whose unit is \"undefined\", which is how the endpoint reports a name it parsed but does not serve.",
        +  "type": "string"
        +}
    • Changedopenmeteo_get_forecast3 fields changed
      • changedInput schema / properties / daily_variables / description
        Previous value: -"Daily 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_variables is required."New value: +"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 hourly_variables or daily_variables is required."
      • changedInput schema / properties / hourly_variables / description
        Previous value: -"Hourly 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 daily_variables is required."New value: +"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 hourly_variables or daily_variables is required."
      • addedOutput schema / properties / notice
        Added value: +{
        +  "description": "Warning that a requested variable came back with no data — names each column whose unit is \"undefined\", which is how the endpoint reports a name it parsed but does not serve in the requested cadence.",
        +  "type": "string"
        +}
    • Changedopenmeteo_get_historical3 fields changed
      • changedInput schema / properties / daily_variables / description
        Previous value: -"Daily 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."New value: +"Daily summary variables (e.g., [\"temperature_2m_max\", \"temperature_2m_min\", \"precipitation_sum\", \"wind_speed_10m_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 hourly_variables or daily_variables required."
      • changedInput schema / properties / hourly_variables / description
        Previous value: -"Hourly 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_variables required."New value: +"Hourly ERA5 variables (e.g., [\"temperature_2m\", \"precipitation\", \"wind_speed_10m\", \"relative_humidity_2m\", \"cloud_cover\", \"soil_moisture_0_to_7cm\"]). 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 hourly_variables or daily_variables required."
      • addedOutput schema / properties / notice
        Added value: +{
        +  "description": "Warning that a requested variable came back with no data — names each column whose unit is \"undefined\", which is how the archive reports a name it parsed but does not serve in the requested cadence.",
        +  "type": "string"
        +}
    • Changedopenmeteo_get_marine17 fields changed
      • addedInput schema / properties / canvas_id
        Added value: +{
        +  "description": "DataCanvas token for wide past_days, archive-range, 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 for SQL querying. Omit to create a fresh canvas.",
        +  "type": "string"
        +}
      • changedInput schema / properties / daily_variables / description
        Previous value: -"Daily marine summary variables (e.g., [\"wave_height_max\", \"wave_direction_dominant\", \"wave_period_max\"]). At least one of hourly_variables or daily_variables required."New value: +"Daily marine summary variables (e.g., [\"wave_height_max\", \"wave_direction_dominant\", \"wave_period_max\"]). Daily names only — an hourly name such as wave_height belongs in hourly_variables and is rejected here; for a daily summary use its published aggregate (wave_height_max). At least one of hourly_variables or daily_variables required."
      • addedInput schema / properties / end_date
        Added value: +{
        +  "description": "End date for the archive range (YYYY-MM-DD, inclusive). Must be on or after start_date. Requires start_date — the pair must be sent together, and neither combines with forecast_days or past_days.",
        +  "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
        +  "type": "string"
        +}
      • removedInput schema / properties / forecast_days / default
        Removed value: -7
      • changedInput schema / properties / forecast_days / description
        Previous value: -"Forecast horizon in days (1–7). Default 7."New value: +"Forecast horizon in days (1–8). Omit for the upstream default of 7. Mutually exclusive with start_date/end_date — omit it entirely when pulling an archive range."
      • changedInput schema / properties / forecast_days / maximum
        Previous value: -7New value: +8
      • changedInput schema / properties / hourly_variables / description
        Previous value: -"Hourly 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."New value: +"Hourly marine variables (e.g., [\"wave_height\", \"wave_direction\", \"wave_period\", \"wind_wave_height\", \"swell_wave_height\"]). Hourly names only — a daily aggregate such as wave_height_max or wave_direction_dominant belongs in daily_variables and is rejected here. At least one of hourly_variables or daily_variables required."
      • addedInput schema / properties / past_days
        Added value: +{
        +  "default": 0,
        +  "description": "Include this many days of past data before today (0–92). Use for recent history instead of a start_date/end_date range. Default 0. Must stay 0 when start_date/end_date are used.",
        +  "maximum": 92,
        +  "minimum": 0,
        +  "type": "integer"
        +}
      • addedInput schema / properties / start_date
        Added value: +{
        +  "description": "Start date for the archive range (YYYY-MM-DD, e.g., \"2024-07-01\"). Real wave values go back to at least 2022. Requires end_date — the pair must be sent together, and neither combines with forecast_days or past_days.",
        +  "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
        +  "type": "string"
        +}
      • addedOutput schema / properties / canvas_id
        Added value: +{
        +  "description": "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. Query with SQL using this token.",
        +  "type": "string"
        +}
      • changedOutput schema / properties / daily / description
        Previous value: -"Per-day summary records with \"time\" (YYYY-MM-DD) + variable keys (e.g., wave_height_max in meters, wave_direction_dominant in degrees, wave_period_max in seconds)."New value: +"Per-day summary records with \"time\" (YYYY-MM-DD) + variable keys (e.g., wave_height_max in meters, wave_direction_dominant in degrees, wave_period_max in seconds). When truncated, contains only a preview — query canvas_id for the full dataset when one is present."
      • changedOutput schema / properties / hourly / description
        Previous value: -"Per-hour records with \"time\" (ISO 8601) + one key per requested variable (e.g., wave_height in meters, wave_direction in degrees, wave_period in seconds). Absent when only daily_variables were requested."New value: +"Per-hour records with \"time\" (ISO 8601) + one key per requested variable (e.g., wave_height in meters, wave_direction in degrees, wave_period in seconds). Absent when only daily_variables were requested. When truncated, contains only a preview — query canvas_id for the full dataset when one is present."
      • addedOutput schema / properties / notice
        Added value: +{
        +  "description": "Warning that a requested variable came back with no data — names each column whose unit is \"undefined\", which is how the endpoint reports a name it parsed but does not serve.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / record_count
        Added value: +{
        +  "description": "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.",
        +  "type": "number"
        +}
      • addedOutput schema / properties / table_name
        Added value: +{
        +  "description": "DuckDB table name for the staged data — pass to openmeteo_dataframe_query. Present only alongside canvas_id.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / truncated
        Added value: +{
        +  "description": "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.",
        +  "type": "boolean"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "latitude",
        -  "longitude",
        -  "timezone"
        -]New value: +[
        +  "latitude",
        +  "longitude",
        +  "timezone",
        +  "record_count",
        +  "truncated"
        +]
  8. 11 tool updates
    • Changedopenmeteo_dataframe_describe1 field changed
      • changedInput schema / properties / canvas_id / description
        Previous value: -"Canvas ID returned by openmeteo_get_historical, openmeteo_get_ensemble, openmeteo_get_flood, or openmeteo_get_climate when truncated: true."New value: +"Canvas ID returned by openmeteo_get_forecast, openmeteo_get_historical, openmeteo_get_ensemble, openmeteo_get_flood, or openmeteo_get_climate when truncated: true."
    • Changedopenmeteo_dataframe_query1 field changed
      • changedInput schema / properties / canvas_id / description
        Previous value: -"Canvas ID returned by openmeteo_get_historical, openmeteo_get_ensemble, openmeteo_get_flood, or openmeteo_get_climate when truncated: true."New value: +"Canvas ID returned by openmeteo_get_forecast, openmeteo_get_historical, openmeteo_get_ensemble, openmeteo_get_flood, or openmeteo_get_climate when truncated: true."
    • Removedopenmeteo_geocode
    • Changedopenmeteo_get_air_quality1 field changed
      • changedInput schema / properties / latitude / description
        Previous value: -"Latitude in decimal degrees. Use openmeteo_geocode to resolve a place name."New value: +"Latitude in decimal degrees. Use openmeteo_search_locations to resolve a place name."
    • Changedopenmeteo_get_climate6 fields changed
      • changedInput schema / properties / latitude / description
        Previous value: -"Latitude in decimal degrees. Use openmeteo_geocode to resolve a place name to coordinates."New value: +"Latitude in decimal degrees. Use openmeteo_search_locations to resolve a place name to coordinates."
      • changedOutput schema / properties / canvas_id / description
        Previous value: -"DataCanvas token — present only when truncated is true (data spilled). Query with SQL using this token."New value: +"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. Query with SQL using this token."
      • changedOutput schema / properties / daily / description
        Previous value: -"Per-day records with \"time\" (YYYY-MM-DD) + one key per requested variable — per-model suffixed keys when 2+ models were requested (e.g. temperature_2m_max_CMCC_CM2_VHR4). Null values mean the model does not carry that variable. When truncated, contains only a preview; query canvas_id for the full dataset."New value: +"Per-day records with \"time\" (YYYY-MM-DD) + one key per requested variable — per-model suffixed keys when 2+ models were requested (e.g. temperature_2m_max_CMCC_CM2_VHR4). Null values mean the model does not carry that variable. When truncated, contains only a preview — query canvas_id for the full dataset when one is present."
      • changedOutput schema / properties / record_count / description
        Previous value: -"Total number of daily records in this response"New value: +"Total number of daily records — the full upstream total when truncated is true, not the length of the daily preview."
      • changedOutput schema / properties / table_name / description
        Previous value: -"DuckDB table name for the staged data — pass to openmeteo_dataframe_query. Present only when truncated is true."New value: +"DuckDB table name for the staged data — pass to openmeteo_dataframe_query. Present only alongside canvas_id."
      • changedOutput schema / properties / truncated / description
        Previous value: -"True when the response was too large to return inline and data spilled to canvas_id. Query the canvas for the full dataset."New value: +"True when the response was too large to return inline, so daily carries a bounded preview rather than the full set. With DataCanvas enabled the complete data is staged at canvas_id. With it disabled there is no canvas_id, and the omitted rows are reached only by narrowing the request."
    • Changedopenmeteo_get_ensemble7 fields changed
      • changedInput schema / properties / latitude / description
        Previous value: -"Latitude in decimal degrees. Use openmeteo_geocode to resolve a place name to coordinates."New value: +"Latitude in decimal degrees. Use openmeteo_search_locations to resolve a place name to coordinates."
      • changedOutput schema / properties / canvas_id / description
        Previous value: -"DataCanvas token — present only when truncated is true (data spilled). Query with SQL using this token."New value: +"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. Query with SQL using this token."
      • changedOutput schema / properties / daily / description
        Previous value: -"Per-day records with \"time\" (YYYY-MM-DD) + per-member columns (e.g., temperature_2m_max_member01). Absent when only hourly_variables were requested. When truncated, contains a preview only; query canvas_id for the full dataset."New value: +"Per-day records with \"time\" (YYYY-MM-DD) + per-member columns (e.g., temperature_2m_max_member01). Absent when only hourly_variables were requested. When truncated, contains a preview only — query canvas_id for the full dataset when one is present."
      • changedOutput schema / properties / hourly / description
        Previous value: -"Per-hour records with \"time\" (ISO 8601) + per-member columns for each requested variable (e.g., temperature_2m_member01, temperature_2m_member02). Absent when only daily_variables were requested. When truncated, contains a preview only; query canvas_id for the full dataset."New value: +"Per-hour records with \"time\" (ISO 8601) + per-member columns for each requested variable (e.g., temperature_2m_member01, temperature_2m_member02). Absent when only daily_variables were requested. When truncated, contains a preview only — query canvas_id for the full dataset when one is present."
      • changedOutput schema / properties / record_count / description
        Previous value: -"Total number of records (hourly + daily rows) in this response"New value: +"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."
      • changedOutput schema / properties / table_name / description
        Previous value: -"DuckDB table name for the staged data — pass to openmeteo_dataframe_query. Present only when truncated is true."New value: +"DuckDB table name for the staged data — pass to openmeteo_dataframe_query. Present only alongside canvas_id."
      • changedOutput schema / properties / truncated / description
        Previous value: -"True when the response was too large to return inline and data spilled to canvas_id. Query the canvas for the full dataset — it holds every hourly and daily row, including any column the preview omits."New value: +"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."
    • Changedopenmeteo_get_flood5 fields changed
      • changedInput schema / properties / latitude / description
        Previous value: -"Latitude in decimal degrees. The API snaps to the nearest river — no river ID required. Use openmeteo_geocode to resolve a place name."New value: +"Latitude in decimal degrees. The API snaps to the nearest river — no river ID required. Use openmeteo_search_locations to resolve a place name."
      • changedOutput schema / properties / canvas_id / description
        Previous value: -"DataCanvas token — present only when truncated is true (data spilled). Query with SQL using this token."New value: +"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. Query with SQL using this token."
      • changedOutput schema / properties / daily / description
        Previous value: -"Per-day records with \"time\" (YYYY-MM-DD) + one key per requested variable containing discharge in m³/s, or null for coordinates outside GloFAS coverage. When truncated, contains only a preview; query canvas_id for the full dataset."New value: +"Per-day records with \"time\" (YYYY-MM-DD) + one key per requested variable containing discharge in m³/s, or null for coordinates outside GloFAS coverage. When truncated, contains only a preview — query canvas_id for the full dataset when one is present."
      • changedOutput schema / properties / table_name / description
        Previous value: -"DuckDB table name for the staged data — pass to openmeteo_dataframe_query. Present only when truncated is true."New value: +"DuckDB table name for the staged data — pass to openmeteo_dataframe_query. Present only alongside canvas_id."
      • changedOutput schema / properties / truncated / description
        Previous value: -"True when the response was too large to return inline and data spilled to canvas_id. Query the canvas for the full dataset."New value: +"True when the response was too large to return inline, so daily carries a bounded preview rather than the full set. With DataCanvas enabled the complete data is staged at canvas_id. With it disabled there is no canvas_id, and the omitted rows are reached only by narrowing the request."
    • Changedopenmeteo_get_forecast10 fields changed
      • addedInput schema / properties / canvas_id
        Added value: +{
        +  "description": "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 for SQL querying. Omit to create a fresh canvas.",
        +  "type": "string"
        +}
      • changedInput schema / properties / latitude / description
        Previous value: -"Latitude in decimal degrees (e.g., 47.6062 for Seattle). Use openmeteo_geocode to resolve a place name to coordinates."New value: +"Latitude in decimal degrees (e.g., 47.6062 for Seattle). Use openmeteo_search_locations to resolve a place name to coordinates."
      • changedInput schema / properties / timezone / description
        Previous value: -"IANA 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."New value: +"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."
      • addedOutput schema / properties / canvas_id
        Added value: +{
        +  "description": "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. Query with SQL using this token.",
        +  "type": "string"
        +}
      • changedOutput schema / properties / daily / description
        Previous value: -"Per-day records. Each object has a \"time\" field (YYYY-MM-DD) plus one key per requested variable with its value. Units are in the daily_units map. Absent when only hourly_variables were requested."New value: +"Per-day records. Each object has a \"time\" field (YYYY-MM-DD) plus one key per requested variable with its value. 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."
      • changedOutput schema / properties / hourly / description
        Previous value: -"Per-hour records. Each object has a \"time\" field (ISO 8601) plus one key per requested variable with its value. Units are in the hourly_units map. Absent when only daily_variables were requested."New value: +"Per-hour records. Each object has a \"time\" field (ISO 8601) plus one key per requested variable with its value. 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."
      • addedOutput schema / properties / record_count
        Added value: +{
        +  "description": "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.",
        +  "type": "number"
        +}
      • addedOutput schema / properties / table_name
        Added value: +{
        +  "description": "DuckDB table name for the staged data — pass to openmeteo_dataframe_query. Present only alongside canvas_id.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / truncated
        Added value: +{
        +  "description": "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.",
        +  "type": "boolean"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "latitude",
        -  "longitude",
        -  "elevation",
        -  "timezone",
        -  "utc_offset_seconds"
        -]New value: +[
        +  "latitude",
        +  "longitude",
        +  "elevation",
        +  "timezone",
        +  "utc_offset_seconds",
        +  "record_count",
        +  "truncated"
        +]
    • Changedopenmeteo_get_historical7 fields changed
      • changedInput schema / properties / latitude / description
        Previous value: -"Latitude in decimal degrees. Use openmeteo_geocode to resolve a place name to coordinates."New value: +"Latitude in decimal degrees. Use openmeteo_search_locations to resolve a place name to coordinates."
      • changedOutput schema / properties / canvas_id / description
        Previous value: -"DataCanvas token — present only when truncated is true (data spilled). Query with SQL using this token."New value: +"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. Query with SQL using this token."
      • changedOutput schema / properties / daily / description
        Previous value: -"Per-day records with \"time\" (YYYY-MM-DD) + variable keys. Absent when only hourly_variables were requested. When truncated, contains only a preview; query canvas_id for the full dataset."New value: +"Per-day records with \"time\" (YYYY-MM-DD) + variable keys. Absent when only hourly_variables were requested. When truncated, contains only a preview — query canvas_id for the full dataset when one is present."
      • changedOutput schema / properties / hourly / description
        Previous value: -"Per-hour records with \"time\" (ISO 8601) + variable keys. Absent when only daily_variables were requested. When truncated, contains only a preview; query canvas_id for the full dataset."New value: +"Per-hour records with \"time\" (ISO 8601) + variable keys. Absent when only daily_variables were requested. When truncated, contains only a preview — query canvas_id for the full dataset when one is present."
      • changedOutput schema / properties / record_count / description
        Previous value: -"Total number of records (hourly or daily rows) in this response"New value: +"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."
      • changedOutput schema / properties / table_name / description
        Previous value: -"DuckDB table name for the staged data — pass to openmeteo_dataframe_query. Present only when truncated is true."New value: +"DuckDB table name for the staged data — pass to openmeteo_dataframe_query. Present only alongside canvas_id."
      • changedOutput schema / properties / truncated / description
        Previous value: -"True when the response was too large to return inline and data spilled to canvas_id. Query the canvas for the full dataset — it holds every hourly and daily row, including any column the preview omits."New value: +"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."
    • Changedopenmeteo_get_marine1 field changed
      • changedInput schema / properties / latitude / description
        Previous value: -"Latitude of a coastal or ocean point. Use openmeteo_geocode to resolve a place name. Inland points return near-zero wave values."New value: +"Latitude of a coastal or ocean point. Use openmeteo_search_locations to resolve a place name. Inland points return near-zero wave values."
    • Addedopenmeteo_search_locations
  9. 3 tool updates
    • Changedopenmeteo_dataframe_describe1 field changed
      • changedInput schema / properties / canvas_id / description
        Previous value: -"Canvas ID returned by openmeteo_get_historical, openmeteo_get_ensemble, or openmeteo_get_climate when truncated: true."New value: +"Canvas ID returned by openmeteo_get_historical, openmeteo_get_ensemble, openmeteo_get_flood, or openmeteo_get_climate when truncated: true."
    • Changedopenmeteo_dataframe_query1 field changed
      • changedInput schema / properties / canvas_id / description
        Previous value: -"Canvas ID returned by openmeteo_get_historical, openmeteo_get_ensemble, or openmeteo_get_climate when truncated: true."New value: +"Canvas ID returned by openmeteo_get_historical, openmeteo_get_ensemble, openmeteo_get_flood, or openmeteo_get_climate when truncated: true."
    • Changedopenmeteo_get_flood10 fields changed
      • addedInput schema / properties / canvas_id
        Added value: +{
        +  "description": "DataCanvas token for wide reanalysis queries. When a result is too large to return inline — driven by total payload size, so a multi-variable pull can spill at any row count — it spills to this canvas for SQL querying. Omit to create a fresh canvas.",
        +  "type": "string"
        +}
      • changedInput schema / properties / end_date / description
        Previous value: -"End date for historical reanalysis (YYYY-MM-DD, inclusive). Must be on or after start_date."New value: +"End date for historical reanalysis (YYYY-MM-DD, inclusive). Must be on or after start_date. Requires start_date — the pair must be sent together, and neither combines with forecast_days."
      • changedInput schema / properties / forecast_days / description
        Previous value: -"Number of forecast days ahead (1–210). Omit when fetching historical data only via start_date/end_date."New value: +"Number of forecast days ahead (1–210). Mutually exclusive with start_date/end_date — omit it entirely when pulling a historical range."
      • changedInput schema / properties / start_date / description
        Previous value: -"Start date for historical reanalysis (YYYY-MM-DD, e.g., \"2023-01-01\"). GloFAS reanalysis covers from 1984-01-01."New value: +"Start date for historical reanalysis (YYYY-MM-DD, e.g., \"2023-01-01\"). GloFAS reanalysis covers from 1984-01-01. Requires end_date — the pair must be sent together, and neither combines with forecast_days."
      • addedOutput schema / properties / canvas_id
        Added value: +{
        +  "description": "DataCanvas token — present only when truncated is true (data spilled). Query with SQL using this token.",
        +  "type": "string"
        +}
      • changedOutput schema / properties / daily / description
        Previous value: -"Per-day records with \"time\" (YYYY-MM-DD) + one key per requested variable containing discharge in m³/s, or null for coordinates outside GloFAS coverage."New value: +"Per-day records with \"time\" (YYYY-MM-DD) + one key per requested variable containing discharge in m³/s, or null for coordinates outside GloFAS coverage. When truncated, contains only a preview; query canvas_id for the full dataset."
      • addedOutput schema / properties / record_count
        Added value: +{
        +  "description": "Total number of daily discharge records — the full staged count when truncated is true, not the length of the daily preview.",
        +  "type": "number"
        +}
      • addedOutput schema / properties / table_name
        Added value: +{
        +  "description": "DuckDB table name for the staged data — pass to openmeteo_dataframe_query. Present only when truncated is true.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / truncated
        Added value: +{
        +  "description": "True when the response was too large to return inline and data spilled to canvas_id. Query the canvas for the full dataset.",
        +  "type": "boolean"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "latitude",
        -  "longitude",
        -  "timezone",
        -  "daily"
        -]New value: +[
        +  "latitude",
        +  "longitude",
        +  "timezone",
        +  "record_count",
        +  "daily",
        +  "truncated"
        +]
  10. 3 tool updates
    • Changedopenmeteo_get_climate2 fields changed
      • changedInput schema / properties / canvas_id / description
        Previous value: -"DataCanvas 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."New value: +"DataCanvas token for multi-decade or multi-model queries. When a result is too large to return inline — driven by total payload size, so a wide multi-model pull can spill at any row count — it spills to this canvas for SQL querying. Omit to create a fresh canvas."
      • changedOutput schema / properties / truncated / description
        Previous value: -"True when the response exceeded inline record limit and data spilled to canvas_id. Query the canvas for the full dataset."New value: +"True when the response was too large to return inline and data spilled to canvas_id. Query the canvas for the full dataset."
    • Changedopenmeteo_get_ensemble2 fields changed
      • changedInput schema / properties / canvas_id / description
        Previous value: -"DataCanvas token for large multi-member queries. When records exceed ~500, results spill to this canvas for SQL querying. Omit to create a fresh canvas."New value: +"DataCanvas token for large multi-member queries. When a result is too large to return inline — driven by total payload size, so a wide member fan-out can spill at any row count — it spills to this canvas for SQL querying. Omit to create a fresh canvas."
      • changedOutput schema / properties / truncated / description
        Previous value: -"True when the response exceeded the inline record limit and data spilled to canvas_id. Query the canvas for the full dataset."New value: +"True when the response was too large to return inline and data spilled to canvas_id. Query the canvas for the full dataset — it holds every hourly and daily row, including any column the preview omits."
    • Changedopenmeteo_get_historical2 fields changed
      • changedInput schema / properties / canvas_id / description
        Previous value: -"DataCanvas 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."New value: +"DataCanvas token for multi-year 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 for SQL querying. Omit to create a fresh canvas."
      • changedOutput schema / properties / truncated / description
        Previous value: -"True when the response exceeded inline record limit and data spilled to canvas_id. Query the canvas for the full dataset."New value: +"True when the response was too large to return inline and data spilled to canvas_id. Query the canvas for the full dataset — it holds every hourly and daily row, including any column the preview omits."
  11. 5 tool updates
    • Changedopenmeteo_dataframe_query1 field changed
      • changedOutput schema / properties / rows / description
        Previous value: -"Result rows (capped at the canvas row limit, default 10 000)."New value: +"Result rows — a preview capped at 100. When row_count exceeds this, page the rest by re-issuing the SQL with LIMIT / OFFSET."
    • Changedopenmeteo_get_climate3 fields changed
      • removedInput schema / properties / daily_variables / minItems
        Removed value: -1
      • changedInput schema / required
        Previous value: -[
        -  "latitude",
        -  "longitude",
        -  "start_date",
        -  "end_date",
        -  "daily_variables"
        -]New value: +[
        +  "latitude",
        +  "longitude",
        +  "start_date",
        +  "end_date"
        +]
      • addedOutput schema / properties / table_name
        Added value: +{
        +  "description": "DuckDB table name for the staged data — pass to openmeteo_dataframe_query. Present only when truncated is true.",
        +  "type": "string"
        +}
    • Changedopenmeteo_get_ensemble1 field changed
      • addedOutput schema / properties / table_name
        Added value: +{
        +  "description": "DuckDB table name for the staged data — pass to openmeteo_dataframe_query. Present only when truncated is true.",
        +  "type": "string"
        +}
    • Changedopenmeteo_get_flood2 fields changed
      • removedInput schema / properties / daily_variables / minItems
        Removed value: -1
      • changedInput schema / required
        Previous value: -[
        -  "latitude",
        -  "longitude",
        -  "daily_variables"
        -]New value: +[
        +  "latitude",
        +  "longitude"
        +]
    • Changedopenmeteo_get_historical1 field changed
      • addedOutput schema / properties / table_name
        Added value: +{
        +  "description": "DuckDB table name for the staged data — pass to openmeteo_dataframe_query. Present only when truncated is true.",
        +  "type": "string"
        +}
  12. 1 tool update
    • Changedopenmeteo_geocode2 fields changed
      • addedInput schema / properties / country
        Added value: +{
        +  "description": "ISO 3166-1 alpha-2 country code (e.g. \"US\", \"FR\") to disambiguate places that share a name. Omit for a global search.",
        +  "pattern": "^[A-Za-z]{2}$",
        +  "type": "string"
        +}
      • changedInput schema / properties / name / description
        Previous value: -"Place name to search. Can be a city, region, or landmark (e.g., \"Seattle\", \"Mount Rainier\"). Weather tools require coordinates — use the lat/lon from this result."New value: +"Place 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 disambiguate. Weather tools require coordinates — use the lat/lon from this result."
  13. 3 tool updates
    • Changedopenmeteo_dataframe_describe1 field changed
      • changedInput schema / properties / canvas_id / description
        Previous value: -"Canvas ID returned by openmeteo_get_historical or openmeteo_get_ensemble when truncated: true."New value: +"Canvas ID returned by openmeteo_get_historical, openmeteo_get_ensemble, or openmeteo_get_climate when truncated: true."
    • Changedopenmeteo_dataframe_query1 field changed
      • changedInput schema / properties / canvas_id / description
        Previous value: -"Canvas ID returned by openmeteo_get_historical or openmeteo_get_ensemble when truncated: true."New value: +"Canvas ID returned by openmeteo_get_historical, openmeteo_get_ensemble, or openmeteo_get_climate when truncated: true."
    • Addedopenmeteo_get_climate
  14. 5 tool updates
    • Changedopenmeteo_dataframe_describe1 field changed
      • changedInput schema / properties / canvas_id / description
        Previous value: -"Canvas ID returned by openmeteo_get_historical when truncated: true."New value: +"Canvas ID returned by openmeteo_get_historical or openmeteo_get_ensemble when truncated: true."
    • Changedopenmeteo_dataframe_query1 field changed
      • changedInput schema / properties / canvas_id / description
        Previous value: -"Canvas ID returned by openmeteo_get_historical when truncated: true."New value: +"Canvas ID returned by openmeteo_get_historical or openmeteo_get_ensemble when truncated: true."
    • Changedopenmeteo_geocode11 fields changed
      • changedInput schema / properties / language / description
        Previous value: -"Response language for place names (ISO 639-1, e.g., \"en\", \"de\", \"fr\"). Default \"en\"."New value: +"Language 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. language \"zh\" for \"上海\", \"ru\" for \"Москва\". Default \"en\"; a query in a recognized non-Latin script (CJK, Hangul, Cyrillic, Arabic, Greek, Hebrew, Thai, Devanagari) that misses under \"en\" is retried once with the language inferred from its script."
      • changedOutput schema / properties / results / description
        Previous value: -"Ranked matches (most relevant first). Empty when no results match."New value: +"Ranked matches (most relevant first). Never empty — when nothing matches, the tool fails with no_results instead of returning an empty array."
      • addedOutput schema / properties / results / items / properties / country / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedOutput schema / properties / results / items / properties / country / description
        Previous value: -"Country name"New value: +"Country name — null for non-country features like continents and oceans"
      • removedOutput schema / properties / results / items / properties / country / type
        Removed value: -"string"
      • addedOutput schema / properties / results / items / properties / country_code / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedOutput schema / properties / results / items / properties / country_code / description
        Previous value: -"ISO 3166-1 alpha-2 country code"New value: +"ISO 3166-1 alpha-2 country code — null for non-country features like continents and oceans"
      • removedOutput schema / properties / results / items / properties / country_code / type
        Removed value: -"string"
      • addedOutput schema / properties / results / items / properties / timezone / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedOutput schema / properties / results / items / properties / timezone / description
        Previous value: -"IANA timezone (e.g., \"America/Los_Angeles\") — pass to weather tools as the timezone parameter"New value: +"IANA timezone (e.g., \"America/Los_Angeles\") — pass to weather tools as the timezone parameter. Null when the API omits it."
      • removedOutput schema / properties / results / items / properties / timezone / type
        Removed value: -"string"
    • Changedopenmeteo_get_ensemble3 fields changed
      • changedOutput schema / properties / canvas_id / description
        Previous value: -"DataCanvas token — present when record_count exceeded inline limit. Query with SQL using this token."New value: +"DataCanvas token — present only when truncated is true (data spilled). Query with SQL using this token."
      • changedOutput schema / properties / member_count / description
        Previous value: -"Number of ensemble members in the response"New value: +"Number of distinct perturbed ensemble members in the response, counted from the _memberNN column suffixes. The unsuffixed base column (the control run) is not included in this count."
      • changedOutput schema / properties / model / description
        Previous value: -"Ensemble model used (e.g. \"ecmwf_ifs025\")"New value: +"Ensemble model used (e.g. \"ecmwf_ifs025\") — echoes the requested models parameter. Absent when models was omitted (API default blend; the API reports no provenance)."
    • Changedopenmeteo_get_historical1 field changed
      • changedOutput schema / properties / canvas_id / description
        Previous value: -"DataCanvas token — present when record_count exceeded inline limit. Query with SQL using this token."New value: +"DataCanvas token — present only when truncated is true (data spilled). Query with SQL using this token."
  15. 2 tool updates
    • Addedopenmeteo_get_ensemble
    • Addedopenmeteo_get_flood

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    Provides real-time weather forecasts, air quality data, and timezone information via Open-Meteo API, with no API key required.
    -
  • A
    license
    Not graded
    quality
    D
    maintenance
    Provides real-time and historical weather data for any city worldwide, including forecasts, air quality, and marine conditions, using the free Open-Meteo API.
    6
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    Provides comprehensive access to Open-Meteo weather APIs, including forecasts, historical data, air quality, marine weather, and geocoding, enabling LLMs to retrieve weather information and location data.
    17
    554
    1
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.