open-meteo-mcp-server
Server Details
Global weather via Open-Meteo: forecast, ERA5 archive, marine, air quality, geocoding, elevation.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP
- URL
- Repository
- cyanheads/open-meteo-mcp-server
- GitHub Stars
- 2
- Server Listing
- open-meteo-mcp-server
Glama MCP Gateway
Connect through Glama MCP Gateway for full control over tool access and complete visibility into every call.
Full call logging
Every tool call is logged with complete inputs and outputs, so you can debug issues and audit what your agents are doing.
Tool access control
Enable or disable individual tools per connector, so you decide what your agents can and cannot do.
Managed credentials
Glama handles OAuth flows, token storage, and automatic rotation, so credentials never expire on your clients.
Usage analytics
See which tools your agents call, how often, and when, so you can understand usage patterns and catch anomalies.
Tool Definition Quality
Average 4.6/5 across 11 of 11 tools scored. Lowest: 4/5.
Each weather data tool (forecast, historical, marine, air_quality, ensemble, flood, climate) targets a distinct domain and data source, so they are largely unambiguous. However, openmeteo_get_forecast with past_days and openmeteo_get_historical overlap for recent dates, though the descriptions explicitly clarify which to use when, slightly muddying the boundary.
Tool names follow a consistent openmeteo_<verb>_<object> pattern with clear actions (get, search, describe, query) and objects (forecast, historical, marine, air_quality, ensemble, flood, climate, elevation, locations, dataframe). This is highly predictable and uniform across all 11 tools.
With 11 tools, the server covers a comprehensive set of weather data categories (forecast, historical, marine, air quality, ensemble, flood, climate, elevation) plus location search and dataframe utilities. This is well-scoped for a data-heavy weather API without being bloated, and each tool serves a distinct purpose.
The tool surface covers all major weather data needs: forecasts, historical reanalysis, marine conditions, air quality, ensemble forecasts, flood discharge, climate projections, and elevation. Location search is a proper prerequisite for coordinate-based queries, and dataframe query/describe handle large result sets, filling any gaps for data analysis workflows.
Available Tools
11 toolsopenmeteo_dataframe_describeOpenmeteo Dataframe DescribeARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| canvas_id | Yes | 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. |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | Present when the call failed. Absent on success. |
| tables | No | Tables and views registered on this canvas. |
| canvas_id | No | Canvas ID that was inspected. |
| expires_at | No | ISO 8601 expiry after the sliding 24 h TTL. |
Tool Definition Quality
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.
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.
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.
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.
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.
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 QueryARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| sql | Yes | Read-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_id | Yes | 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. |
Output Schema
| Name | Required | Description |
|---|---|---|
| rows | No | Result rows — a preview capped at 100. When row_count exceeds this, page the rest by re-issuing the SQL with LIMIT / OFFSET. |
| error | No | Present when the call failed. Absent on success. |
| canvas_id | No | Canvas ID that was queried. |
| row_count | No | Total rows in the full result before any cap. |
Tool Definition Quality
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.
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.
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.
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.
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.
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 QualityARead-onlyIdempotentInspect
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, which returns real CAMS values back to at least 2022-10-01. 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. A wide window — a large past_days or date range plus many variables — produces thousands of records; these spill to DataCanvas for SQL querying when canvas is enabled, and return a bounded preview with truncated: true when it is not.
| Name | Required | Description | Default |
|---|---|---|---|
| end_date | No | 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. | |
| latitude | Yes | Latitude in decimal degrees. Use openmeteo_search_locations to resolve a place name. | |
| timezone | No | IANA timezone or "auto". Default "auto". | auto |
| canvas_id | No | 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. | |
| longitude | Yes | Longitude in decimal degrees. | |
| past_days | No | 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. | |
| start_date | No | 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. | |
| forecast_days | No | 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. | |
| hourly_variables | No | Hourly air quality variables (e.g., ["pm2_5", "pm10", "ozone", "nitrogen_dioxide", "european_aqi", "us_aqi"]). At least one required. |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | Present when the call failed. Absent on success. |
| hourly | No | 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. |
| notice | No | 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. |
| latitude | No | Snapped latitude |
| timezone | No | Resolved IANA timezone |
| canvas_id | No | DataCanvas token for the staged full dataset. Present only when truncated is true AND DataCanvas is enabled (CANVAS_PROVIDER_TYPE=duckdb) — absent otherwise, in which case the preview is all this response carries. Query with SQL using this token. |
| longitude | No | Snapped longitude |
| truncated | No | 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. |
| table_name | No | DuckDB table name for the staged data — pass to openmeteo_dataframe_query. Present only alongside canvas_id. |
| data_source | No | Data source identifier — this is modeled CAMS data, forecast or archive, not measured station data. |
| hourly_units | No | Variable → unit string for hourly data (e.g., {"pm2_5": "μg/m³", "european_aqi": "EAQI"}). |
| record_count | No | Total number of hourly records — the full upstream total when truncated is true, not the length of the hourly preview. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds significant context beyond annotations: it explains the modeled vs measured distinction, the data spill behavior to DataCanvas for large windows, and the 7-day forecast limit with past days up to 92. The 'real CAMS values back to at least 2022-10-01' and 'earlier dates return nulls' notes are particularly valuable. Since readOnlyHint and idempotentHint are already set, the description doesn't need to repeat those; it focuses on data characteristics. Minor deduction: it doesn't explicitly state that results are bounded previews with truncated: true when canvas is disabled, but mentions it in passing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but front-loaded: it starts with the core purpose, then adds usage rules, then details edge cases. Every sentence adds information, but it's a bit long (around 200 words). The structure is logical, but some points could be tightened (e.g., the spill behavior). Still, it's well-organized and not redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex tool with 9 parameters and an output schema, the description covers the essential decision points: which time window to use, the exclusivity rules, data type caveats, and spill behavior. The output schema exists, so return values are documented elsewhere. The only missing piece might be a note on coordinate resolution (but that's in the schema) and potential API limits beyond what's mentioned. Given the tool's complexity, this is quite complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds value by summarizing common variables, explaining the mutual exclusivity of date parameters, and clarifying the 'at least one required' for hourly_variables. It also explains canvas_id's role in handling large results, which goes beyond the schema. However, some details like the exact maximum row count are left to the schema, and the description doesn't map every parameter explicitly, but it compensates well.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves modeled CAMS air quality data with specific variables (PM2.5, PM10, etc.) and distinguishes it from measured station data by explicitly naming the alternative (openaq-mcp-server). It differentiates from siblings like openmeteo_get_forecast or openmeteo_get_historical by specifying the air quality domain, making its purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance: when to use forecast_days, past_days, or start_date/end_date for archive ranges, and the exclusivity rules. It also advises against using this for measured data, pointing to openaq-mcp-server. This is clear, actionable routing guidance that prevents common misuse.
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 ClimateARead-onlyIdempotentInspect
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 (ERA5, 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 DataCanvas for SQL querying when canvas is enabled, returning a bounded preview with truncated: true when it is not.
| Name | Required | Description | Default |
|---|---|---|---|
| models | No | 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. | |
| end_date | Yes | End date (YYYY-MM-DD, inclusive, max 2050-12-31). Must be on or after start_date. | |
| latitude | Yes | Latitude in decimal degrees. Use openmeteo_search_locations to resolve a place name to coordinates. | |
| timezone | No | IANA timezone or "auto". Default "auto". | auto |
| canvas_id | No | 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. | |
| longitude | Yes | Longitude in decimal degrees. | |
| start_date | Yes | Start date (YYYY-MM-DD, e.g., "2049-01-01"). CMIP6 projections cover 1950-01-01 to 2050-12-31. | |
| daily_variables | No | Daily 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_unit | No | Wind speed unit. Default "kmh". | kmh |
| temperature_unit | No | Temperature unit. Default "celsius". | celsius |
| precipitation_unit | No | Precipitation unit. Default "mm". | mm |
Output Schema
| Name | Required | Description |
|---|---|---|
| daily | No | 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. |
| error | No | Present when the call failed. Absent on success. |
| models | No | Climate models requested — echoes the models parameter. Absent when models was omitted (API default model; the response carries no provenance). |
| notice | No | 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. |
| latitude | No | Snapped latitude (Open-Meteo snaps to nearest grid point) |
| timezone | No | Resolved IANA timezone |
| canvas_id | No | DataCanvas token for the staged full dataset. Present only when truncated is true AND DataCanvas is enabled (CANVAS_PROVIDER_TYPE=duckdb) — absent otherwise, in which case the preview is all this response carries. Query with SQL using this token. |
| elevation | No | Elevation at grid point (meters) |
| longitude | No | Snapped longitude |
| truncated | No | 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. |
| date_range | No | Date range of returned data |
| table_name | No | DuckDB table name for the staged data — pass to openmeteo_dataframe_query. Present only alongside canvas_id. |
| daily_units | No | Column → unit string for daily data (e.g., {"temperature_2m_max_CMCC_CM2_VHR4": "°C"}). |
| record_count | No | Total number of daily records — the full upstream total when truncated is true, not the length of the daily preview. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With readOnlyHint and idempotentHint already declared, the description goes further: it discloses that unknown model names are sent upstream rather than rejected, error messages name the offending model individually, variable naming depends on model count, missing model-variable combos return null, and large results spill to DataCanvas with a truncated flag. These are valuable behavioral facts beyond 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but front-loaded with the core purpose and structured logically: scope, contrast, resolution, model list, edge cases, and output behavior. Every sentence adds value; it's dense but not redundant. A slight trim could improve readability, but it's efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the 11 parameters, output schema, and sibling tools, the description covers essential operational details: model validation behavior, variable naming, missing data handling, and canvas spill with truncation. It leaves little an agent needs to infer, making it complete for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description adds some contextual notes (e.g., daily resolution requires daily_variables, model suffix behavior) that are also largely present in the schema itself. It doesn't add significant new parameter-level meaning beyond the schema, so a 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb, resource, and scope: 'Long-range climate projections from bias-corrected daily CMIP6 models... at any coordinate.' It explicitly distinguishes from openmeteo_get_historical as the future-projection counterpart, making it clear what this tool does and how it differs from siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly positions the tool as the future counterpart to openmeteo_get_historical, giving a strong when-to-use cue. It also mentions 'Daily resolution only' as a constraint. However, it doesn't explicitly mention when not to use other siblings like get_forecast or get_ensemble, leaving some ambiguity; still, the primary usage context is well covered.
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 ElevationARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| latitudes | Yes | Array of latitudes in decimal degrees (up to 100). Must be same length as longitudes. | |
| longitudes | Yes | Array of longitudes in decimal degrees (up to 100). Must be same length as latitudes. |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | Present when the call failed. Absent on success. |
| elevations | No | Elevation values in input order |
Tool Definition Quality
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.
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.
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.
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.
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.
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 EnsembleARead-onlyIdempotentInspect
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 DataCanvas when canvas is enabled, returning a bounded preview with truncated: true when it is not. At least one of hourly_variables or daily_variables is required.
| Name | Required | Description | Default |
|---|---|---|---|
| models | No | 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. | |
| latitude | Yes | Latitude in decimal degrees. Use openmeteo_search_locations to resolve a place name to coordinates. | |
| timezone | No | IANA timezone (e.g., "America/Los_Angeles") or "auto" to use the location's local timezone. Default "auto". | auto |
| canvas_id | No | 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. | |
| longitude | Yes | Longitude in decimal degrees. | |
| past_days | No | Include this many days of past ensemble data before today (0–92). Default 0. | |
| forecast_days | No | Forecast horizon in days (1–16). Default 7. | |
| daily_variables | No | 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. | |
| wind_speed_unit | No | Wind speed unit. Default "kmh". | kmh |
| hourly_variables | No | 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. | |
| temperature_unit | No | Temperature unit. Default "celsius". | celsius |
| precipitation_unit | No | Precipitation unit. Default "mm". | mm |
Output Schema
| Name | Required | Description |
|---|---|---|
| daily | No | 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. |
| error | No | Present when the call failed. Absent on success. |
| model | No | 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). |
| hourly | No | 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. |
| notice | No | 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. |
| latitude | No | Snapped latitude (Open-Meteo snaps to nearest grid point) |
| timezone | No | Resolved IANA timezone |
| canvas_id | No | DataCanvas token for the staged full dataset. Present only when truncated is true AND DataCanvas is enabled (CANVAS_PROVIDER_TYPE=duckdb) — absent otherwise, in which case the preview is all this response carries. Query with SQL using this token. |
| elevation | No | Terrain elevation at grid point (meters) |
| longitude | No | Snapped longitude |
| truncated | No | True when the response was too large to return inline, so hourly and daily carry a bounded preview rather than the full set. With DataCanvas enabled the complete data is staged at canvas_id — every hourly and daily row, including any column the preview omits. With it disabled there is no canvas_id, and the omitted rows are reached only by narrowing the request. |
| table_name | No | DuckDB table name for the staged data — pass to openmeteo_dataframe_query. Present only alongside canvas_id. |
| daily_units | No | Variable → unit string for daily data. Absent when no daily_variables were requested. |
| hourly_units | No | Variable → unit string for hourly data (e.g., {"temperature_2m_member01": "°C"}). Absent when no hourly_variables were requested. |
| member_count | No | 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. |
| record_count | No | Total number of records (hourly + daily rows) — the full upstream total when truncated is true, not the combined length of the hourly and daily previews. |
Tool Definition Quality
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 covered. The description adds valuable behavioral context: regional models return input errors for out-of-coverage areas (not transient failures), unknown model names are passed upstream, and large queries spill to DataCanvas with truncated: true when canvas is not enabled. This goes beyond the annotations and helps the agent anticipate failure modes and data volume issues.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but well-organized, front-loading the core purpose and member naming, then covering models, failure modes, and data volume. It is long but every sentence carries information an agent needs. The model list is repeated in the schema, which is redundant, but the description's version adds member counts and coverage details that are useful for selection.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (12 parameters, 19 model options, ensemble output), the description is remarkably complete. It covers model selection, coverage limitations, output naming, data volume spill behavior, and the variable requirement. The output schema exists, so return values are documented elsewhere. An agent has everything needed to call this tool correctly and interpret results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 parameters thoroughly. The description adds value by explaining the member-suffix naming convention for output columns, clarifying the distinction between hourly and daily variable names (including the temperature_2m_max/min exception), and emphasizing the requirement for at least one variable array. It also explains the canvas_id spill behavior in more detail than the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool provides probabilistic ensemble weather forecasts with up to 64 members and up to 16 days ahead, and explains the member-suffix column naming. It distinguishes this from sibling tools like openmeteo_get_forecast (deterministic) by emphasizing the ensemble nature and uncertainty quantification use cases.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly explains when to use this tool (for probabilistic forecasts, exceedance probabilities, uncertainty quantification) and provides critical guidance on model selection, including regional model coverage limitations and the instruction to pick a global model or move coordinates rather than retrying. It also notes the requirement for at least one of hourly_variables or daily_variables, and explains the DataCanvas spill behavior for large queries.
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 FloodARead-onlyIdempotentInspect
GloFAS (Global Flood Awareness System) river discharge forecast and historical reanalysis. Returns daily ensemble river discharge (m³/s) for the river nearest to the given coordinates — no river ID needed, the API snaps to the nearest stream. 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 DataCanvas for SQL querying when canvas is enabled, returning a bounded preview with truncated: true when it is not.
| Name | Required | Description | Default |
|---|---|---|---|
| end_date | No | 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. | |
| latitude | Yes | Latitude in decimal degrees. The API snaps to the nearest river — no river ID required. Use openmeteo_search_locations to resolve a place name. | |
| timezone | No | IANA timezone or "auto". Default "auto". | auto |
| canvas_id | No | 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. | |
| longitude | Yes | Longitude in decimal degrees. | |
| start_date | No | 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. | |
| forecast_days | No | Number of forecast days ahead (1–210). Mutually exclusive with start_date/end_date — omit it entirely when pulling a historical range. | |
| daily_variables | No | Daily discharge variables to fetch (e.g., ["river_discharge", "river_discharge_p25", "river_discharge_p75", "river_discharge_min", "river_discharge_max"]). Required. |
Output Schema
| Name | Required | Description |
|---|---|---|
| daily | No | 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. |
| error | No | Present when the call failed. Absent on success. |
| notice | No | 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. |
| latitude | No | Snapped latitude (nearest river grid point) |
| timezone | No | Resolved IANA timezone |
| canvas_id | No | DataCanvas token for the staged full dataset. Present only when truncated is true AND DataCanvas is enabled (CANVAS_PROVIDER_TYPE=duckdb) — absent otherwise, in which case the preview is all this response carries. Query with SQL using this token. |
| longitude | No | Snapped longitude |
| truncated | No | 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. |
| table_name | No | DuckDB table name for the staged data — pass to openmeteo_dataframe_query. Present only alongside canvas_id. |
| daily_units | No | Variable → unit string for daily data (e.g., {"river_discharge": "m³/s"}). |
| record_count | No | Total number of daily discharge records — the full staged count when truncated is true, not the length of the daily preview. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the read-only and idempotent hints in annotations, the description discloses several important behaviors: it returns null for coordinates far from any river or without GloFAS coverage, it spills to DataCanvas for large reanalysis queries with a bounded preview and truncated flag, and it enforces mutual exclusivity of modes. It also explains the snapping behavior to the nearest stream. These details go well beyond annotations and give an agent predictable expectations about output and side-effects, with no contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is comprehensive yet tightly packed. It leads with the core purpose, then the mode selection, then the variable list, and finally edge-case behaviors. Every sentence contributes new information; there is no fluff or repetition. The structure is logical and front-loaded, allowing a quick scan for the most critical information. Despite its length, it is efficient and earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex tool with 8 parameters, a output schema, and multiple interactive behaviors, the description covers all necessary aspects: input coordinates, mode usage, supported variables, output limitations (null return), scaling behavior (spill to DataCanvas), and the existence of output schema means return values need not be restated. The agent has enough to call it correctly and anticipate outcomes in both normal and edge cases.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already covers all 8 parameters at 100% coverage, so a baseline of 3 applies. The description adds meaningful semantic context beyond the schema: it explains why canvas_id is relevant (spill for large results), details the mutual exclusivity of forecast_days vs. start_date/end_date, lists example daily_variables, and clarifies that a date range requires both endpoints. This extra explanation helps the agent reason about parameter combinations and values, justifying a score above baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a precise resource and action: 'GloFAS (Global Flood Awareness System) river discharge forecast and historical reanalysis.' It further clarifies it returns daily ensemble river discharge for the nearest river to given coordinates, immediately distinguishing it from weather, climate, marine, or other Open-Meteo tools. The wording is specific and not a tautology, and the mention of 'no river ID needed' adds a differentiating nuance.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly states the tool's purpose and the two mutually exclusive modes (forecast vs. historical reanalysis), which is strong context for usage. It does not explicitly name alternatives like openmeteo_get_forecast or openmeteo_get_historical, nor does it say 'do not use for X.' However, the specificity of 'river discharge' and 'GloFAS' makes the intended use clear, so the lack of explicit exclusion clauses is a minor gap. This aligns with the 'clear context, no exclusions' anchor.
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 ForecastARead-onlyIdempotentInspect
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 ERA5 has a variable lag. 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. A wide window — a large past_days plus many hourly variables — produces thousands of records; these spill to DataCanvas for SQL querying when canvas is enabled, and return a bounded preview with truncated: true when it is not. At least one of hourly_variables or daily_variables is required.
| Name | Required | Description | Default |
|---|---|---|---|
| latitude | Yes | Latitude in decimal degrees (e.g., 47.6062 for Seattle). Use openmeteo_search_locations to resolve a place name to coordinates. | |
| timezone | No | IANA timezone (e.g., "America/Los_Angeles") or "auto" to use the location's local timezone. Default "auto". The timezone from openmeteo_search_locations is ideal to pass here. | auto |
| canvas_id | No | DataCanvas token for wide past_days or multi-variable queries. When a result is too large to return inline — driven by total payload size, so a wide multi-variable pull can spill at any row count — it spills to this canvas for SQL querying. Omit to create a fresh canvas. | |
| longitude | Yes | Longitude in decimal degrees (e.g., -122.3321 for Seattle). | |
| past_days | No | Include this many days of past data before today (0–92). Use for recent history — ERA5 archive has a variable ~5-day lag. Default 0. | |
| forecast_days | No | Number of forecast days (1–16). Default 7. | |
| daily_variables | No | Daily summary variables (e.g., ["temperature_2m_max", "temperature_2m_min", "precipitation_sum", "wind_speed_10m_max", "sunrise", "sunset", "uv_index_max"]). Daily names only — an hourly name such as cloud_cover or temperature_2m belongs in hourly_variables and is rejected here; for a daily summary of an hourly variable use its published aggregate (cloud_cover_max, cloud_cover_mean, cloud_cover_min). At least one of hourly_variables or daily_variables is required. | |
| wind_speed_unit | No | Wind speed unit: "kmh" (km/h), "mph", "ms" (m/s), or "kn" (knots). Default "kmh". | kmh |
| hourly_variables | No | Hourly variables to fetch (e.g., ["temperature_2m", "precipitation", "wind_speed_10m", "relative_humidity_2m", "cloud_cover", "uv_index", "apparent_temperature"]). Hourly names only — a daily aggregate such as temperature_2m_max or precipitation_sum belongs in daily_variables and is rejected here. At least one of hourly_variables or daily_variables is required. | |
| temperature_unit | No | Temperature unit. Default "celsius". | celsius |
| precipitation_unit | No | Precipitation unit: "mm" or "inch". Default "mm". | mm |
Output Schema
| Name | Required | Description |
|---|---|---|
| daily | No | 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. |
| error | No | Present when the call failed. Absent on success. |
| hourly | No | Per-hour records. Each object has a "time" field (ISO 8601) plus one key per requested variable with its value. 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. |
| notice | No | 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. |
| latitude | No | Snapped latitude (Open-Meteo snaps to nearest grid point) |
| timezone | No | Resolved IANA timezone |
| canvas_id | No | DataCanvas token for the staged full dataset. Present only when truncated is true AND DataCanvas is enabled (CANVAS_PROVIDER_TYPE=duckdb) — absent otherwise, in which case the preview is all this response carries. Query with SQL using this token. |
| elevation | No | Terrain elevation at grid point (meters) |
| longitude | No | Snapped longitude |
| truncated | No | True when the response was too large to return inline, so hourly and daily carry a bounded preview rather than the full set. With DataCanvas enabled the complete data is staged at canvas_id — every hourly and daily row, including any column the preview omits. With it disabled there is no canvas_id, and the omitted rows are reached only by narrowing the request. |
| table_name | No | DuckDB table name for the staged data — pass to openmeteo_dataframe_query. Present only alongside canvas_id. |
| daily_units | No | Map of variable name → unit string for daily data. Absent when no daily_variables were requested. |
| hourly_units | No | Map of variable name → unit string for hourly data (e.g., {"temperature_2m": "°C", "precipitation": "mm"}). Absent when no hourly_variables were requested. |
| record_count | No | Total number of records (hourly + daily rows) — the full upstream total when truncated is true, not the combined length of the hourly and daily previews. |
| utc_offset_seconds | No | UTC offset in seconds for this timezone at query time |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With readOnlyHint and idempotentHint already declared, the description adds meaningful behavior: it discloses that large results 'spill to DataCanvas for SQL querying' and that truncated: true may appear, and it clarifies temporal window semantics (past_days before today, forecast_days ahead). It slightly overlaps with the schema's past_days note about ERA5 lag, but this is complementary reinforcement rather than redundancy. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but highly information-dense)Skip; every paragraph adds unique value: tool differentiation, variable categories, output format, spillover behavior. It is front-loaded with the core purpose ('hourly and/or daily variables for coordinates') and avoids fluff, though the variable lists could be trimmed since they echo the schema examples.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 11-parameter tool, the description covers all decision-relevant context: temporal window (past_days + forecast_days), variable categorization rules with concrete examples, unit options, response structure per entry, spillover behavior for large queries, and the requirement for at least one variable array. The schema itself is rich, but the description adds the 'when to use' guidance and boundary conditions (e.g., hourly names rejected in daily_variables) that the schema alone cannot convey.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but the description adds significant value: it lists common variables per category (e.g., weather_code, wind_gusts_10m for hourly; temperature_2m_max for daily), explains why an hourly variable like cloud_cover must use the 'published aggregate' (cloud_cover_max) for daily requests, and clarifies the past_days vs. historical tool tradeoff. This goes beyond the schema's terse field docs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Get Forecast') and immediately elaborates: 'hourly and/or daily variables for up to 16 days ahead, with optional past_days (up to 92) for recent history.' It clearly differentiates from the sibling openmeteo_get_historical by explicitly saying when to prefer this tool for recent data. The output format is described in detail (per-entry 'time' field and one key per variable), making the tool's purpose unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells the agent when to use this tool over openmeteo_get_historical ('Use past_days... since ERA5 has a variable lag'), explains the hourly vs. daily variable split with rejections, and notes DataCanvas spillover for large queries. It also states the requirement that at least one of hourly_variables or daily_variables must be provided, giving clear invocation guidance.
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 HistoricalARead-onlyIdempotentInspect
Historical weather from the ERA5 reanalysis archive (1940–present). Requires start_date and end_date (ISO 8601 date, e.g., "2024-07-01"). ERA5 has a variable lag of up to ~5 days — for dates within the last week, use openmeteo_get_forecast with past_days instead. 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 DataCanvas for SQL querying when canvas is enabled, and return a bounded preview with truncated: true when it is not. At least one of hourly_variables or daily_variables is required.
| Name | Required | Description | Default |
|---|---|---|---|
| end_date | Yes | 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. | |
| latitude | Yes | Latitude in decimal degrees. Use openmeteo_search_locations to resolve a place name to coordinates. | |
| timezone | No | IANA timezone or "auto". Default "auto". | auto |
| canvas_id | No | 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. | |
| longitude | Yes | Longitude in decimal degrees. | |
| start_date | Yes | Start date (YYYY-MM-DD, e.g., "2024-07-01"). ERA5 covers from 1940-01-01 to approximately 5 days ago. | |
| daily_variables | No | 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. | |
| wind_speed_unit | No | Wind speed unit. Default "kmh". | kmh |
| hourly_variables | No | 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. | |
| temperature_unit | No | Temperature unit. Default "celsius". | celsius |
| precipitation_unit | No | Precipitation unit. Default "mm". | mm |
Output Schema
| Name | Required | Description |
|---|---|---|
| daily | No | 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. |
| error | No | Present when the call failed. Absent on success. |
| hourly | No | 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. |
| notice | No | 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. |
| latitude | No | Snapped latitude |
| timezone | No | Resolved IANA timezone |
| canvas_id | No | DataCanvas token for the staged full dataset. Present only when truncated is true AND DataCanvas is enabled (CANVAS_PROVIDER_TYPE=duckdb) — absent otherwise, in which case the preview is all this response carries. Query with SQL using this token. |
| elevation | No | Elevation at grid point (meters) |
| longitude | No | Snapped longitude |
| truncated | No | True when the response was too large to return inline, so hourly and daily carry a bounded preview rather than the full set. With DataCanvas enabled the complete data is staged at canvas_id — every hourly and daily row, including any column the preview omits. With it disabled there is no canvas_id, and the omitted rows are reached only by narrowing the request. |
| date_range | No | Date range of returned data |
| table_name | No | DuckDB table name for the staged data — pass to openmeteo_dataframe_query. Present only alongside canvas_id. |
| daily_units | No | Variable → unit string for daily data. Absent when no daily_variables were requested. |
| hourly_units | No | Variable → unit string for hourly data (e.g., {"temperature_2m": "°C", "precipitation": "mm"}). Absent when no hourly_variables were requested. |
| record_count | No | Total number of records (hourly + daily rows) — the full upstream total when truncated is true, not the combined length of the hourly and daily previews. |
Tool Definition Quality
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: the ERA5 variable lag of ~5 days, the spill-to-canvas behavior for large results with truncated: true when canvas is disabled, and the bounded preview behavior. This goes beyond the annotations, though it doesn't detail the exact return structure (but an output schema exists).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, dense paragraph that front-loads the core purpose and date range, then covers the lag caveat, variable compatibility, and large-result behavior. Every sentence adds new information with no redundancy, and it's appropriately sized for an 11-parameter tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (11 params, 4 required, output schema present), the description is complete. It covers the data source, date constraints, the alternative tool for recent dates, variable naming conventions, the required parameter condition, and the large-result spill behavior. The output schema handles return values, so nothing critical is missing for an agent to call this correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 11 parameters thoroughly. The description adds value by explaining the relationship between hourly and daily variables (e.g., daily aggregates like temperature_2m_max belong in daily_variables, not hourly), and the spill-to-canvas behavior tied to canvas_id. This complements the schema rather than repeating it, earning a score above the baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves historical weather from the ERA5 reanalysis archive (1940–present), with a specific verb and resource. It distinguishes itself from siblings by explicitly naming openmeteo_get_forecast as the alternative for recent dates, and the variable-name compatibility with the forecast API further clarifies its role.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit when-to-use guidance: it requires start_date and end_date, and explicitly states that for dates within the last week, openmeteo_get_forecast with past_days should be used instead. It also notes the requirement of at least one of hourly_variables or daily_variables, and explains the spill-to-canvas behavior for large ranges, giving clear context for when this tool is appropriate.
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 MarineARead-onlyIdempotentInspect
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 DataCanvas for SQL querying when canvas is enabled, and return a bounded preview with truncated: true when it is not.
| Name | Required | Description | Default |
|---|---|---|---|
| end_date | No | 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. | |
| latitude | Yes | Latitude of a coastal or ocean point. Use openmeteo_search_locations to resolve a place name. Inland points return near-zero wave values. | |
| timezone | No | IANA timezone or "auto". Default "auto". | auto |
| canvas_id | No | 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. | |
| longitude | Yes | Longitude in decimal degrees. | |
| past_days | No | 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. | |
| start_date | No | 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. | |
| forecast_days | No | 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. | |
| daily_variables | No | 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. | |
| hourly_variables | No | 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. |
Output Schema
| Name | Required | Description |
|---|---|---|
| daily | No | 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. |
| error | No | Present when the call failed. Absent on success. |
| hourly | No | 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. |
| notice | No | 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. |
| latitude | No | Snapped latitude |
| timezone | No | Resolved IANA timezone |
| canvas_id | No | DataCanvas token for the staged full dataset. Present only when truncated is true AND DataCanvas is enabled (CANVAS_PROVIDER_TYPE=duckdb) — absent otherwise, in which case the preview is all this response carries. Query with SQL using this token. |
| longitude | No | Snapped longitude |
| truncated | No | True when the response was too large to return inline, so hourly and daily carry a bounded preview rather than the full set. With DataCanvas enabled the complete data is staged at canvas_id — every hourly and daily row, including any column the preview omits. With it disabled there is no canvas_id, and the omitted rows are reached only by narrowing the request. |
| table_name | No | DuckDB table name for the staged data — pass to openmeteo_dataframe_query. Present only alongside canvas_id. |
| daily_units | No | Variable → unit string for daily data. Absent when no daily_variables were requested. |
| hourly_units | No | Variable → unit string for hourly data (e.g., {"wave_height": "m", "wave_period": "s"}). Absent when no hourly_variables were requested. |
| record_count | No | Total number of records (hourly + daily rows) — the full upstream total when truncated is true, not the combined length of the hourly and daily previews. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true and idempotentHint=true, so the description's burden is to disclose behavior beyond that. It does so thoroughly: 'Returns per-timestamp records — each entry contains a "time" field plus one key per requested variable,' and it details the spill behavior ('spill to DataCanvas for SQL querying... return a bounded preview with truncated: true when it is not'). It also flags 'ocean_current_velocity is null for non-open-ocean coordinates.' These behavioral specifics add real value beyond 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is lengthy (over 150 words), but each sentence conveys a distinct fact or constraint. It is well-structured with lists of variables and clearly marked warnings (mutual exclusivity, variable-name rejection, inland near-zero). No sentence is redundant; the information density is high. A small deduction for being longer than strictly necessary, though every part earns its place given the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 windows, variable types), the description is remarkably complete. It explains the forecasting horizon (up to 8 days), past_days (up to 92), archive ranges (back to 2022), the per-timestamp output format, the spill behavior, null conditions, and validation rules. With an output schema already present, there is no need to detail the return structure further. The description fully equips an agent to call the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds meaningful semantics by explaining the mutual exclusivity between date-range and forecast/past_days, the requirement for both start_date and end_date together, and the distinction between hourly and daily variable names (e.g., 'wave_height' vs 'wave_height_max') with rejection warnings. It also enumerates common variables, which helps users pick correct values. While the schema already documents each parameter, the description enriches the semantics with usage nuances.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific purpose: 'Marine wave and ocean conditions for a coastal or ocean coordinate' and enumerates the covered variables (wave height, period, direction, etc.). It clearly distinguishes itself from land-focused siblings like openmeteo_get_forecast or openmeteo_get_climate by emphasizing the marine domain. The verb and resource are explicit and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit when-to-use guidance: 'Best for open-ocean and coastal exposed points — sheltered inland waters return near-zero wave values.' It also clarifies when to choose between forecast_days and date-range windows, and describes the DataCanvas spill mechanism for large queries. It touches on when to use this tool versus avoiding it (inland points), and provides operational context for the archive range and recent history options.
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 LocationsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | 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. | |
| count | No | Max results to return (1–10). Default 5. Return more when disambiguating common names like "Springfield" or "Portland". | |
| country | No | ISO 3166-1 alpha-2 country code (e.g. "US", "FR") to disambiguate places that share a name. Omit for a global search. | |
| language | No | 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. | en |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | No | Number of results returned |
| error | No | Present when the call failed. Absent on success. |
| results | No | Ranked matches (most relevant first). Never empty — when nothing matches, the tool fails with no_results instead of returning an empty array. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint and idempotentHint, so the baseline is lower. The description adds behavioral details like ranking by population/relevance, the localized index matching, and a retry mechanism for non-Latin scripts. This goes beyond the annotation and clarifies how the search behaves.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose, then provides usage guidance and parameter details. It is somewhat verbose, repeating schema descriptions, but remains well-structured and not excessive given the complexity of language handling and disambiguation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description includes the purpose, usage context, parameter nuances, and return behavior (ranked coordinate matches, up to 10 results). Since an output schema exists, it doesn't need to detail the return structure, but it still gives sufficient context for an agent to decide when and how to call it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and each parameter has a description, so baseline is 3. However, the description adds meaningful guidance beyond the schema, such as 'never fold a qualifier into the name' and the language retry logic for non-Latin scripts. This extra context helps the agent use parameters more effectively.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool resolves a place name to ranked coordinate matches with specific fields (country, region, elevation, timezone, population). It explicitly positions itself as a prerequisite for name-based queries, distinguishing it from sibling weather tools that take coordinates.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says this is a required prerequisite for name-based queries, and that all weather tools take latitude/longitude. It provides concrete usage rules: use a bare place name, never fold in qualifiers, and use the country parameter for disambiguation. This leaves no ambiguity about when and how to use the tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Claim this connector by publishing a /.well-known/glama.json file on your server's domain with the following structure:
{
"$schema": "https://glama.ai/mcp/schemas/connector.json",
"maintainers": [{ "email": "your-email@example.com" }]
}The email address must match the email associated with your Glama account. Once published, Glama will automatically detect and verify the file within a few minutes.
Control your server's listing on Glama, including description and metadata
Access analytics and receive server usage reports
Get monitoring and health status updates for your server
Feature your server to boost visibility and reach more users
For users:
Full audit trail – every tool call is logged with inputs and outputs for compliance and debugging
Granular tool control – enable or disable individual tools per connector to limit what your AI agents can do
Centralized credential management – store and rotate API keys and OAuth tokens in one place
Change alerts – get notified when a connector changes its schema, adds or removes tools, or updates tool definitions, so nothing breaks silently
For server owners:
Proven adoption – public usage metrics on your listing show real-world traction and build trust with prospective users
Tool-level analytics – see which tools are being used most, helping you prioritize development and documentation
Direct user feedback – users can report issues and suggest improvements through the listing, giving you a channel you would not have otherwise
The connector status is unhealthy when Glama is unable to successfully connect to the server. This can happen for several reasons:
The server is experiencing an outage
The URL of the server is wrong
Credentials required to access the server are missing or invalid
If you are the owner of this MCP connector and would like to make modifications to the listing, including providing test credentials for accessing the server, please contact support@glama.ai.
Discussions
No comments yet. Be the first to start the discussion!
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceProvides real-time weather forecasts, air quality data, and timezone information via Open-Meteo API, with no API key required.
- FlicenseBqualityDmaintenanceProvides current weather conditions and forecasts for any location using the Open-Meteo API.2
- AlicenseNot gradedqualityDmaintenanceProvides real-time and historical weather data for any city worldwide, including forecasts, air quality, and marine conditions, using the free Open-Meteo API.21MIT
- AlicenseAqualityDmaintenanceProvides 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.176681MIT
Your Connectors
Sign in to create a connector for this server.