Skip to main content
Glama

Openmeteo Get Flood

openmeteo_get_flood
Read-onlyIdempotent

GloFAS (Global Flood Awareness System) daily river discharge (m³/s) from the GloFAS 0.05° grid cell nearest the given coordinates — no river ID needed. The response's latitude and longitude name that cell. It is not reliably on the river intended: a point near a confluence, a pair of parallel channels, or a bank can resolve to a cell with little flow. When the value is far below what the named river carries, step the coordinate 0.05° across the channel and compare the values. One mode per call: forecast_days for the outlook, or start_date and end_date together for a date range. A date range accepts dates from 1984-01-01, but GloFAS discharge begins 1997-01-01 — every model returns null before it. The two modes are mutually exclusive, and a date range needs both ends — a lone start_date or end_date is rejected. forecast_days accepts up to 210, but the current GloFAS run sets how far the data reaches (about six months ahead); later days come back null and the notice names where the data ends. What a date range holds depends on the model. Omitting models reads seamless_v4: consolidated_v4 reanalysis before 2023-08-05, then forecast-run discharge from 2023-08-05 on, so a range crossing that date changes source mid-series. Set models to pin a source: seamless_v4 (default — consolidated_v4 reanalysis before 2023-08-05, forecast_v4 runs from 2023-08-05 into the live forecast), consolidated_v4 (reanalysis from 1997-01-01 through 2025-05-31; null outside that span and on every forecast_days call), forecast_v4 (forecast runs from 2023-06-01 into the live forecast; null before). consolidated_v4 is the only way to read reanalysis for 2023-08-05 through 2025-05-31. With 2+ models every daily column is suffixed with the model name (river_discharge_consolidated_v4). Available daily variables: "river_discharge" (the daily discharge value; the mean across ensemble members is "river_discharge_mean"), and the ensemble statistics "river_discharge_mean", "river_discharge_median", "river_discharge_min", "river_discharge_max", "river_discharge_p25" (25th percentile), and "river_discharge_p75" (75th percentile). The statistics carry spread across ensemble members on forecast-run days — the forecast_days outlook, and date-range days from 2023-08-05 under seamless_v4 or forecast_v4. On reanalysis days (seamless_v4 before 2023-08-05, consolidated_v4 through 2025-05-31) they repeat river_discharge and are not uncertainty estimates. Returns null for coordinates far from any river or in areas without GloFAS coverage. A wide date 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.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "latitude": "<latitude>",
      "longitude": "<longitude>"
    },
    "name": "openmeteo_get_flood"
  }
}

Input Schema

NameRequiredDescriptionDefault
modelsNoGloFAS models to read from: seamless_v4 (default — consolidated_v4 reanalysis before 2023-08-05, forecast_v4 runs from 2023-08-05 into the live forecast), consolidated_v4 (reanalysis from 1997-01-01 through 2025-05-31; null outside that span and on every forecast_days call), forecast_v4 (forecast runs from 2023-06-01 into the live forecast; null before). Omit to use Open-Meteo's seamless_v4 default. With 2+ models each daily column and unit key is suffixed with the model name (river_discharge_consolidated_v4); one model keeps plain names. A model with no data for the requested days answers with null values rather than an error, and the notice names those columns. A name outside this list (the GloFAS v3 selectors included) is sent upstream rather than rejected here.
end_dateNoEnd of the date range (YYYY-MM-DD, inclusive). Must be on or after start_date. Days from 2023-08-05 are forecast-run discharge under the default seamless_v4; consolidated_v4 reanalysis ends 2025-05-31 and answers later days with null. Requires start_date — the pair must be sent together, and neither combines with forecast_days.
latitudeYesLatitude in decimal degrees. Discharge is returned for the GloFAS 0.05° grid cell nearest this point — no river ID required, and that cell is not reliably on the river intended. When the value is far below what the named river carries, step the coordinate 0.05° across the channel and compare. Use openmeteo_search_locations to resolve a place name.
timezoneNoIANA timezone or "auto". Default "auto".auto
canvas_idNoDataCanvas token for wide date-range 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 nearest GloFAS 0.05° grid cell, which is not reliably on the river intended.
start_dateNoStart of a date range (YYYY-MM-DD, e.g., "2023-01-01"). The earliest date accepted is 1984-01-01, but GloFAS discharge begins 1997-01-01, so earlier days come back null. Under the default seamless_v4 a range holds consolidated_v4 reanalysis before 2023-08-05 and forecast-run discharge from 2023-08-05 on; request models: ["consolidated_v4"] for reanalysis through 2025-05-31. Requires end_date — the pair must be sent together, and neither combines with forecast_days.
forecast_daysNoNumber of forecast days ahead (1–210). The API accepts up to 210, but the current GloFAS run sets how far the data reaches (about six months); later days come back null. consolidated_v4 serves no forecast days — with it every row is null. Mutually exclusive with start_date/end_date — omit it entirely when pulling a date range.
daily_variablesNoDaily discharge variables to fetch (e.g., ["river_discharge", "river_discharge_p25", "river_discharge_p75", "river_discharge_min", "river_discharge_max"]). Required. river_discharge is the daily discharge value; the _mean, _median, _min, _max, _p25, and _p75 statistics span the ensemble members on forecast-run days — the forecast_days outlook, and date-range days from 2023-08-05 under seamless_v4 or forecast_v4. On reanalysis days (seamless_v4 before 2023-08-05, consolidated_v4 through 2025-05-31) they repeat river_discharge and are not uncertainty estimates.

Output Schema

NameRequiredDescriptionDefault
dailyNoPer-day records with "time" (YYYY-MM-DD) + one key per requested variable containing discharge in m³/s — per model, suffixed with the model name (river_discharge_consolidated_v4), when 2+ models were requested — or null for coordinates outside GloFAS coverage and days the selected model does not serve. 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.
modelsNoGloFAS models requested — echoes the models parameter. Absent when models was omitted, which means the data came from seamless_v4: consolidated_v4 reanalysis before 2023-08-05, forecast_v4 runs from 2023-08-05 on.
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 columns that come back null for requested days — days before GloFAS discharge begins on 1997-01-01, days outside the selected model's span, or a cell GloFAS carries no discharge 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 — the GloFAS grid cell the discharge comes from
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 — the GloFAS grid cell the discharge comes from
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"}), model-suffixed like the records when 2+ models were requested.
record_countNoTotal number of daily discharge records — the full staged count when truncated is true, not the length of the daily preview.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed4 schema fields changed
    • changedInput schema / properties / models / description
      Previous value: -"GloFAS models to read from: seamless_v4 (default — consolidated_v4 reanalysis before 2023-08-05, forecast_v4 runs from 2023-08-05 into the live forecast), consolidated_v4 (reanalysis from 1984 through 2025-05-31; null after it and on every forecast_days call), forecast_v4 (forecast runs from 2023-06-01 into the live forecast; null before). Omit to use Open-Meteo's seamless_v4 default. With 2+ models each daily column and unit key is suffixed with the model name (river_discharge_consolidated_v4); one model keeps plain names. A model with no data for the requested days answers with null values rather than an error, and the notice names those columns. A name outside this list (the GloFAS v3 selectors included) is sent upstream rather than rejected here."New value: +"GloFAS models to read from: seamless_v4 (default — consolidated_v4 reanalysis before 2023-08-05, forecast_v4 runs from 2023-08-05 into the live forecast), consolidated_v4 (reanalysis from 1997-01-01 through 2025-05-31; null outside that span and on every forecast_days call), forecast_v4 (forecast runs from 2023-06-01 into the live forecast; null before). Omit to use Open-Meteo's seamless_v4 default. With 2+ models each daily column and unit key is suffixed with the model name (river_discharge_consolidated_v4); one model keeps plain names. A model with no data for the requested days answers with null values rather than an error, and the notice names those columns. A name outside this list (the GloFAS v3 selectors included) is sent upstream rather than rejected here."
    • changedInput schema / properties / start_date / description
      Previous value: -"Start of a date range (YYYY-MM-DD, e.g., \"2023-01-01\"), from 1984-01-01. Under the default seamless_v4 a range holds consolidated_v4 reanalysis before 2023-08-05 and forecast-run discharge from 2023-08-05 on; request models: [\"consolidated_v4\"] for reanalysis through 2025-05-31. Requires end_date — the pair must be sent together, and neither combines with forecast_days."New value: +"Start of a date range (YYYY-MM-DD, e.g., \"2023-01-01\"). The earliest date accepted is 1984-01-01, but GloFAS discharge begins 1997-01-01, so earlier days come back null. Under the default seamless_v4 a range holds consolidated_v4 reanalysis before 2023-08-05 and forecast-run discharge from 2023-08-05 on; request models: [\"consolidated_v4\"] for reanalysis through 2025-05-31. Requires end_date — the pair must be sent together, and neither combines with forecast_days."
    • changedOutput schema / properties / error / properties / data / properties / reason / description
      Previous value: -"Machine-readable failure mode. Declared by this tool: `no_variables_requested`: daily_variables named no variable — omitted, empty, or holding only blank or whitespace-only entries. `date_range_incomplete`: Only one of start_date / end_date was provided — GloFAS requires the pair together. `forecast_days_conflict`: A start_date or end_date range was combined with a forecast_days value. `date_order_invalid`: The end_date value is earlier than the start_date value. `date_out_of_range`: start_date predates 1984-01-01 or date range is otherwise invalid. `invalid_variable`: An unknown discharge variable or model 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. `coverage_gap`: Open-Meteo has no data at this coordinate for the requested dataset or model, because its grid or domain does not reach the point. `rate_limited`: Open-Meteo answered HTTP 429 because a free-tier request limit was reached. `upstream_unavailable`: Open-Meteo was unreachable, answered with a server error, or returned an unreadable response on all three attempts. `upstream_timeout`: Open-Meteo failed on all three attempts, and the last one got no answer within 15 seconds. 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 named no variable — omitted, empty, or holding only blank or whitespace-only entries. `date_range_incomplete`: Only one of start_date / end_date was provided — GloFAS requires the pair together. `forecast_days_conflict`: A start_date or end_date range was combined with a forecast_days value. `date_order_invalid`: The end_date value is earlier than the start_date value. `date_out_of_range`: start_date predates 1984-01-01, the earliest date GloFAS accepts, or end_date falls after the last date it accepts, which upstream rejects with a message naming that date. `invalid_variable`: An unknown discharge variable or model 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. `coverage_gap`: Open-Meteo has no data at this coordinate for the requested dataset or model, because its grid or domain does not reach the point. `rate_limited`: Open-Meteo answered HTTP 429 because a free-tier request limit was reached. `upstream_unavailable`: Open-Meteo was unreachable, answered with a server error, or returned an unreadable response on all three attempts. `upstream_timeout`: Open-Meteo failed on all three attempts, and the last one got no answer within 15 seconds. Other values are possible when a failure originates below the handler."
    • 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 columns whose requested days fall outside the coordinate's discharge record or the selected model's span, 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."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 columns that come back null for requested days — days before GloFAS discharge begins on 1997-01-01, days outside the selected model's span, or a cell GloFAS carries no discharge 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."
  2. Changed4 schema fields changed
    • changedInput schema / properties / latitude / description
      Previous 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."New value: +"Latitude in decimal degrees. Discharge is returned for the GloFAS 0.05° grid cell nearest this point — no river ID required, and that cell is not reliably on the river intended. When the value is far below what the named river carries, step the coordinate 0.05° across the channel and compare. Use openmeteo_search_locations to resolve a place name."
    • changedInput schema / properties / longitude / description
      Previous value: -"Longitude in decimal degrees. With latitude it selects the largest modeled river within 5 km, which is not necessarily the closest one."New value: +"Longitude in decimal degrees. With latitude it selects the nearest GloFAS 0.05° grid cell, which is not reliably on the river intended."
    • changedOutput schema / properties / latitude / description
      Previous value: -"Snapped latitude — grid point of the selected river"New value: +"Snapped latitude — the GloFAS grid cell the discharge comes from"
    • changedOutput schema / properties / longitude / description
      Previous value: -"Snapped longitude — grid point of the selected river"New value: +"Snapped longitude — the GloFAS grid cell the discharge comes from"
  3. Changed12 schema 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: 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."New value: +"DataCanvas token for wide date-range 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."
    • changedInput schema / properties / daily_variables / description
      Previous value: -"Daily discharge variables to fetch (e.g., [\"river_discharge\", \"river_discharge_p25\", \"river_discharge_p75\", \"river_discharge_min\", \"river_discharge_max\"]). Required. river_discharge is the daily discharge value; the _mean, _median, _min, _max, _p25, and _p75 statistics span the ensemble members in forecast mode only — in reanalysis mode they repeat river_discharge and are not uncertainty estimates."New value: +"Daily discharge variables to fetch (e.g., [\"river_discharge\", \"river_discharge_p25\", \"river_discharge_p75\", \"river_discharge_min\", \"river_discharge_max\"]). Required. river_discharge is the daily discharge value; the _mean, _median, _min, _max, _p25, and _p75 statistics span the ensemble members on forecast-run days — the forecast_days outlook, and date-range days from 2023-08-05 under seamless_v4 or forecast_v4. On reanalysis days (seamless_v4 before 2023-08-05, consolidated_v4 through 2025-05-31) they repeat river_discharge and are not uncertainty estimates."
    • changedInput schema / properties / end_date / description
      Previous 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."New value: +"End of the date range (YYYY-MM-DD, inclusive). Must be on or after start_date. Days from 2023-08-05 are forecast-run discharge under the default seamless_v4; consolidated_v4 reanalysis ends 2025-05-31 and answers later days with null. 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). Mutually exclusive with start_date/end_date — omit it entirely when pulling a historical range."New value: +"Number of forecast days ahead (1–210). The API accepts up to 210, but the current GloFAS run sets how far the data reaches (about six months); later days come back null. consolidated_v4 serves no forecast days — with it every row is null. Mutually exclusive with start_date/end_date — omit it entirely when pulling a date range."
    • addedInput schema / properties / models
      Added value: +{
      +  "description": "GloFAS models to read from: seamless_v4 (default — consolidated_v4 reanalysis before 2023-08-05, forecast_v4 runs from 2023-08-05 into the live forecast), consolidated_v4 (reanalysis from 1984 through 2025-05-31; null after it and on every forecast_days call), forecast_v4 (forecast runs from 2023-06-01 into the live forecast; null before). Omit to use Open-Meteo's seamless_v4 default. With 2+ models each daily column and unit key is suffixed with the model name (river_discharge_consolidated_v4); one model keeps plain names. A model with no data for the requested days answers with null values rather than an error, and the notice names those columns. A name outside this list (the GloFAS v3 selectors included) is sent upstream rather than rejected here.",
      +  "items": {
      +    "type": "string"
      +  },
      +  "maxItems": 6,
      +  "type": "array"
      +}
    • 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. Requires end_date — the pair must be sent together, and neither combines with forecast_days."New value: +"Start of a date range (YYYY-MM-DD, e.g., \"2023-01-01\"), from 1984-01-01. Under the default seamless_v4 a range holds consolidated_v4 reanalysis before 2023-08-05 and forecast-run discharge from 2023-08-05 on; request models: [\"consolidated_v4\"] for reanalysis through 2025-05-31. Requires end_date — the pair must be sent together, and neither combines with forecast_days."
    • 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 when one is present."New value: +"Per-day records with \"time\" (YYYY-MM-DD) + one key per requested variable containing discharge in m³/s — per model, suffixed with the model name (river_discharge_consolidated_v4), when 2+ models were requested — or null for coordinates outside GloFAS coverage and days the selected model does not serve. When truncated, contains only a preview — query canvas_id for the full dataset when one is present."
    • changedOutput schema / properties / daily_units / description
      Previous value: -"Variable → unit string for daily data (e.g., {\"river_discharge\": \"m³/s\"})."New value: +"Variable → unit string for daily data (e.g., {\"river_discharge\": \"m³/s\"}), model-suffixed like the records when 2+ models were requested."
    • changedOutput schema / properties / error / properties / data / properties / reason / description
      Previous value: -"Machine-readable failure mode. Declared by this tool: `no_variables_requested`: daily_variables named no variable — omitted, empty, or holding only blank or whitespace-only entries. `date_range_incomplete`: Only one of start_date / end_date was provided — GloFAS requires the pair together. `forecast_days_conflict`: A start_date or end_date range was combined with a forecast_days value. `date_order_invalid`: The end_date value is earlier than the start_date value. `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. `rate_limited`: Open-Meteo answered HTTP 429 because a free-tier request limit was reached. 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 named no variable — omitted, empty, or holding only blank or whitespace-only entries. `date_range_incomplete`: Only one of start_date / end_date was provided — GloFAS requires the pair together. `forecast_days_conflict`: A start_date or end_date range was combined with a forecast_days value. `date_order_invalid`: The end_date value is earlier than the start_date value. `date_out_of_range`: start_date predates 1984-01-01 or date range is otherwise invalid. `invalid_variable`: An unknown discharge variable or model 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. `coverage_gap`: Open-Meteo has no data at this coordinate for the requested dataset or model, because its grid or domain does not reach the point. `rate_limited`: Open-Meteo answered HTTP 429 because a free-tier request limit was reached. `upstream_unavailable`: Open-Meteo was unreachable, answered with a server error, or returned an unreadable response on all three attempts. `upstream_timeout`: Open-Meteo failed on all three attempts, and the last one got no answer within 15 seconds. 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",
      -  "request_too_large",
      -  "rate_limited"
      -]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",
      +  "coverage_gap",
      +  "rate_limited",
      +  "upstream_unavailable",
      +  "upstream_timeout"
      +]
    • addedOutput schema / properties / models
      Added value: +{
      +  "description": "GloFAS models requested — echoes the models parameter. Absent when models was omitted, which means the data came from seamless_v4: consolidated_v4 reanalysis before 2023-08-05, forecast_v4 runs from 2023-08-05 on.",
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
    • 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, 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."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 columns whose requested days fall outside the coordinate's discharge record or the selected model's span, 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."
  4. Changed7 schema fields changed
    • changedInput schema / properties / daily_variables / description
      Previous value: -"Daily discharge variables to fetch (e.g., [\"river_discharge\", \"river_discharge_p25\", \"river_discharge_p75\", \"river_discharge_min\", \"river_discharge_max\"]). Required."New value: +"Daily discharge variables to fetch (e.g., [\"river_discharge\", \"river_discharge_p25\", \"river_discharge_p75\", \"river_discharge_min\", \"river_discharge_max\"]). Required. river_discharge is the daily discharge value; the _mean, _median, _min, _max, _p25, and _p75 statistics span the ensemble members in forecast mode only — in reanalysis mode they repeat river_discharge and are not uncertainty estimates."
    • addedInput schema / properties / end_date / format
      Added value: +"date"
    • changedInput schema / properties / end_date / pattern
      Previous value: -"^\\d{4}-\\d{2}-\\d{2}$"New value: +"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
    • addedInput schema / properties / start_date / format
      Added value: +"date"
    • changedInput schema / properties / start_date / pattern
      Previous value: -"^\\d{4}-\\d{2}-\\d{2}$"New value: +"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
    • 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`: A start_date or end_date range was combined with a forecast_days value. `date_order_invalid`: The end_date value is earlier than the start_date value. `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."New value: +"Machine-readable failure mode. Declared by this tool: `no_variables_requested`: daily_variables named no variable — omitted, empty, or holding only blank or whitespace-only entries. `date_range_incomplete`: Only one of start_date / end_date was provided — GloFAS requires the pair together. `forecast_days_conflict`: A start_date or end_date range was combined with a forecast_days value. `date_order_invalid`: The end_date value is earlier than the start_date value. `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. `rate_limited`: Open-Meteo answered HTTP 429 because a free-tier request limit was reached. 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",
      -  "request_too_large"
      -]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",
      +  "rate_limited"
      +]
  5. Changed1 schema field 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. `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: `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`: A start_date or end_date range was combined with a forecast_days value. `date_order_invalid`: The end_date value is earlier than the start_date value. `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."
  6. Changed2 schema fields changed
    • addedInput schema / properties / canvas_id / pattern
      Added value: +"^[A-Za-z0-9_-]{10}$"
    • 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 `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: `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."
  7. Changed4 schema 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"
  8. Changed3 schema 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."
  9. Changed4 schema 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."
  10. Changed2 schema 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"
      +]
  11. Changed6 schema 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"
      -]
  12. Changed1 schema 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"
      +}
  13. Changed5 schema 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."
  14. Changed10 schema 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"
      +]
  15. Changed2 schema fields changed
    • removedInput schema / properties / daily_variables / minItems
      Removed value: -1
    • changedInput schema / required
      Previous value: -[
      -  "latitude",
      -  "longitude",
      -  "daily_variables"
      -]New value: +[
      +  "latitude",
      +  "longitude"
      +]
  16. Added

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, yet the description adds substantial behavior beyond them: null returns before 1997-01-01, null returns beyond the live GloFAS run, null for coordinates away from rivers, ensemble statistics degenerating to repeated values on reanalysis days, mid-series source changes on crossing 2023-08-05, and canvas spilling with canvas_id, table_name, and truncated: true. It also warns that the nearest cell may not lie on the intended river, which no annotation conveys.

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?

Purpose and the grid-cell caveat are front-loaded, but the body is a dense wall of text that restates the seamless_v4/consolidated_v4 spans two or three times and repeats the daily-variable statistics list already present in the schema. Sentence count could be roughly halved with no loss of meaning.

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 9-parameter, multi-model, potentially canvas-spilling tool, the description covers temporal coverage limits, model-driven source switching, null semantics, ensemble-statistic interpretation, and the spill-and-query workflow. With an output schema present, it need not document return shapes, and it does not waste space doing so.

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% and the models paragraph is nearly duplicated verbatim between description and schema, so much of the parameter meaning is already structured data. Still, the description ties parameters together in ways the schema does not: the mutual exclusivity of the two modes, the requirement that both date ends be sent, and the column-suffix behavior with 2+ models.

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?

Names a specific product and measurement (GloFAS daily river discharge in m³/s from the 0.05° grid cell nearest the coordinates) and immediately states the key scoping fact that no river ID is needed. An agent can distinguish this from the weather, marine, and air-quality siblings without opening a 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?

Gives explicit mode selection (forecast_days vs start_date+end_date, mutually exclusive), explicit model-selection guidance (omit models for seamless_v4; consolidated_v4 is the only way to read reanalysis for 2023-08-05 to 2025-05-31), and an operational remedy when the returned cell is wrong (step 0.05° across the channel and compare). It also routes oversized results to openmeteo_dataframe_describe and openmeteo_dataframe_query.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.