Skip to main content
Glama

Server Details

Swiss weather data for AI assistants — forecasts, measurements, stations, pollen.

If you are the author of this connector, you can claim ownership with GitHub, an HTTP challenge, or a DNS record. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Last Tested
Transport
Streamable HTTP
URL
Server Listing
MeteoSwiss MCP Server

Available Tools

7 tools
fetchAInspect

Fetch full content from a MeteoSwiss webpage and convert to markdown or plain text. Use the search tool first to discover valid page URLs, then pass the full URL as the id parameter.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesIdentifier of a MeteoSwiss page to fetch. For this server the id is a full URL returned by the search tool. Example: https://www.meteoschweiz.admin.ch/klima/klimawandel/steigende-temperaturen.html
formatNoThe output format for the contentmarkdown
includeMetadataNoWhether to include metadata in the response

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYesThe id the content was fetched for (the page URL)
urlYesCanonical URL field (matches ChatGPT Deep Research spec). For this server `url === id`.
textYesCanonical body field (matches ChatGPT Deep Research spec)
titleNoPage title
formatYesFormat of `text`
metadataNoPage metadata (present when includeMetadata is true)

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description carries the full burden. It discloses that the id must be a full URL discovered via the search tool, that the tool converts content to markdown or plain text, and that it retrieves 'full content'. It does not mention side effects, but for a fetch operation the read-only nature is implicit and sufficient given the output schema.

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

Conciseness5/5

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

Two sentences: the first states the purpose and output, the second provides the prerequisite workflow. No filler words, front-loaded with the actionable verb.

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

Completeness4/5

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

The tool is a simple fetch with an output schema and fully documented parameters. The description covers the core operation and the critical workflow constraint, but does not elaborate on error handling or rate limits, which are less essential given the schema richness.

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

Parameters3/5

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

The input schema already documents all three parameters with descriptions, reaching 100% coverage, so the description is not required to elaborate. It does reinforce the id requirement (full URL from search tool), but adds no new semantics beyond the schema.

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

Purpose5/5

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

The description uses specific verbs ('Fetch', 'convert') and identifies the resource ('MeteoSwiss webpage') and output formats (markdown/plain text). It clearly distinguishes this tool from the data-specific sibling tools (climate, weather, forecast, pollen, stations) and the search tool.

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

Usage Guidelines4/5

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

The description explicitly instructs to use the search tool first to discover valid page URLs before calling fetch, establishing a clear workflow. It does not explicitly state exclusions for using data tools, but the workflow guidance is strong enough for an agent to select this tool appropriately.

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

meteoswissClimateDataAInspect

Get homogeneous climate measurement series from Switzerland's National Basic Climatic Network (NBCN). Returns temperature, precipitation, sunshine, radiation, wind, pressure, and climate indicators (frost days, summer days, heat days) going back decades.

29 climate stations + 46 precipitation stations with daily, monthly, and yearly resolution.

Use cases: "What are typical January temperatures in Zurich?", "How has precipitation changed in Basel over 50 years?", "How many heat days did Lugano have last year?"

Accepts station names ("Zurich", "Basel"), abbreviations ("SMA", "BAS"), or WGS84 coordinates.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of data rows to return (default 30)
stationNoClimate station name or abbreviation (e.g., "Zurich", "BAS", "Davos"). Part of the National Basic Climatic Network (29 climate + 46 precipitation stations). Provide either this or `coordinates`; if both are given, `coordinates` takes precedence.
end_dateNoEnd date filter (YYYY-MM-DD). Only rows on or before this date are returned.
resolutionNoData resolution: daily (temp min/max/mean), monthly (full climate summary), yearly (annual summary)monthly
start_dateNoStart date filter (YYYY-MM-DD). Only rows on or after this date are returned.
coordinatesNoWGS84 coordinates (alternative to station name)

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYesMeasurement rows, filtered and limited as requested
noteNoPresent only when `data` is empty because the requested date range fell outside the fetched series (e.g. a daily request older than the ~2-year `_recent` window). Explains why and suggests a fallback resolution.
sourceYesData attribution
stationYes
resolutionYesResolution the returned rows are in

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It explains the data source (NBCN), the resolutions available (daily, monthly, yearly), the number and type of stations, and the accepted input formats. It falls short of mentioning potential error behavior, date range limitations (beyond 'going back decades'), or any data adjustments (e.g., 'homogeneous' implies homogenization but isn't explained). Overall, it is transparent about what the tool returns and how to invoke it.

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

Conciseness4/5

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

The description is moderately long but well-organized: it opens with a direct statement of purpose, then details network and resolution, provides use cases, and ends with input formats. Every sentence earns its place, and the structure helps the agent quickly grasp the tool's scope. It is slightly verbose in the station count detail, but that is useful context for selecting the tool.

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

Completeness4/5

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

Given the tool's complexity (6 parameters, nested coordinates object, output schema), the description covers the essential aspects: data content, geographic scope, resolution options, station types, and input alternatives. It does not explain the output structure, but an output schema exists to handle that. It also omits specific date range limits or station list details, but the sibling 'meteoswissStations' likely covers that. Overall, it is sufficiently complete for an agent to understand when and how to invoke it.

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

Parameters4/5

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

The input schema already describes all parameters with 100% coverage, giving a baseline of 3. The description adds value beyond the schema by providing concrete examples of valid station abbreviations ('SMA', 'BAS'), clarifying the meaning of 'homogeneous' (though not fully), summarizing resolution differences (daily temp min/max/mean, monthly full summary, yearly annual summary), and illustrating the precedence of coordinates over station. This extra semantic context justifies a score above baseline.

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

Purpose5/5

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

The description clearly states the tool's function: 'Get homogeneous climate measurement series from Switzerland's National Basic Climatic Network (NBCN)' and enumerates the types of data returned (temperature, precipitation, sunshine, radiation, wind, pressure, climate indicators). It is specific about the verb (Get), resource (climate series), and scope (Switzerland, NBCN), and it effectively distinguishes itself from sibling tools by focusing on historical climate data rather than current weather or forecasts.

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

Usage Guidelines4/5

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

The description provides clear usage context through example use cases ('What are typical January temperatures in Zurich?') and input options (station names, abbreviations, coordinates). It does not explicitly state when not to use the tool or name alternative tools, but the context strongly implies this for historical climate queries versus current conditions. A clear exclusion statement would make it a 5.

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

meteoswissCurrentWeatherAInspect

Get real-time weather measurements from ~300 Swiss automatic weather stations (~160 full weather + ~140 precipitation-only). Returns temperature, precipitation, wind, humidity, pressure, sunshine, and more. Data updates every 10 minutes. Precipitation-only stations return only rainfall data.

For 8 stations (Zurich, Basel, Chur, Sion, Altdorf, Säntis, Jungfraujoch, Grand St-Bernard), also includes daily visual observations: cloud cover, fog, rain, snowfall, hail, and snow coverage.

Accepts station names ("Zurich"), abbreviations ("SMA"), addresses ("Bahnhofplatz 1 Bern"), or WGS84 coordinates. Automatically finds the nearest station.

ParametersJSON Schema
NameRequiredDescriptionDefault
stationNoSwiss weather station or location: name (e.g., "Zurich"), abbreviation (e.g., "SMA"), or address (e.g., "Bahnhofplatz 1 Bern"). Provide either this or `coordinates`; if both are given, `coordinates` takes precedence.
coordinatesNoWGS84 coordinates (alternative to station name)

Output Schema

ParametersJSON Schema
NameRequiredDescription
sourceYesData attribution
stationYes
timestampYesMeasurement timestamp (ISO 8601)
measurementsYesEach measurement is present only when the station reports it
visual_observationsNoVisual observations (only for 8 OBS stations: ALT, BAS, CHU, GSB, JUN, SAE, SIO, SMA)

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden. It discloses key behavioral traits: station coverage (~300 stations, with ~140 being precipitation-only), data update frequency (every 10 minutes), the limitation that precipitation-only stations return only rainfall, and that 8 specific stations also include daily visual observations. It also mentions automatic nearest-station matching. This goes well beyond a minimal description, though it could still detail error handling or output format, but the output schema covers the latter.

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

Conciseness5/5

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

The description is concise and well-structured, with three short paragraphs: general data, special observations, and input methods. Every sentence adds value and no redundant information exists. It is front-loaded with the core purpose and quickly covers important details.

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

Completeness5/5

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

Given two optional parameters, no annotations, and the presence of an output schema, the description is remarkably complete. It explains what data is returned, the update interval, station types and limitations, special observational additions, and all accepted input formats. Nothing critical for invocation appears missing.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3. The description adds meaningful semantics beyond the schema: it explains that station accepts names, abbreviations, and addresses (with examples), and that coordinates are an alternative. It also adds the key behavior of automatically finding the nearest station, which is not in the schema. This enhances understanding of both parameters.

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

Purpose5/5

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

The description clearly states the tool provides 'real-time weather measurements' from Swiss automatic weather stations, listing specific data types and station counts. This distinctively separates it from sibling tools like meteoswissLocalForecast (forecast), meteoswissClimateData (historical), and meteoswissStations (station metadata). The verb 'Get' and specific resource are explicit.

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

Usage Guidelines4/5

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

The description gives clear context for when to use this tool: for current, real-time observations updated every 10 minutes. It also details input methods (station names, abbreviations, addresses, coordinates) and automatic nearest-station selection. However, it does not explicitly mention alternatives or state 'when not to use', so it lacks explicit exclusions that would earn a 5.

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

meteoswissLocalForecastAInspect

Get a multi-day weather forecast for any Swiss location. Returns daily summaries (temperature, precipitation, sunshine, wind, weather icon) plus a hierarchical hourly breakdown of every series.

This uses official MeteoSwiss Open Data — the same forecasts powering the MeteoSwiss app and website.

Accepts:

  • Postal codes: "8001" (Zurich), "3000" (Bern), "1200" (Geneva)

  • Station abbreviations: "SMA" (Zurich Fluntern), "BER" (Bern)

  • Place names: "Zurich", "Basel", "Lugano"

Coverage: ~6000 Swiss locations (all postal codes + weather stations + mountain points). Forecast horizon: up to 9 days. Updated hourly.

Each day's summary fields: temperature_min_c, temperature_max_c, precipitation_total_mm, sunshine_total_minutes, wind_avg_kmh, wind_gust_max_kmh, weather, weather_icon_url.

Each day also includes "hourly": one array of per-hour objects covering every series together — { time, temperature_c, precip_mm, sunshine_minutes, wind_kmh, wind_gust_kmh } — useful for judging when rain, sun, or wind is expected, not just the daily summary:

  • Each entry's "time" is already local wall-clock time for the location (Europe/Zurich), with the UTC offset included, e.g. "2026-07-09T14:00:00+02:00". It is NOT UTC — do not convert it.

  • A dry/calm/sunless hour is reported as its measured value (often 0), not omitted. A fully dry day is still a full array of zero-precipitation hours, not an empty array.

  • Each field is independently null if just THAT series has no reading for a given hour — the other fields for that same hour are still populated. An hour is omitted entirely only when every series is missing for it.

  • "hourly" itself is null when no hourly breakdown exists for this location at all (a total data gap); [] only when this location supports hourly data but none was available for that specific day.

  • For weather stations, temperature_min_c/temperature_max_c/precipitation_total_mm are MeteoSwiss's own official daily aggregates — a different, separately-curated product from the hourly series shown alongside them. They can legitimately NOT match summing/ averaging the hourly entries for that day; this is expected, not a data error. sunshine_total_minutes/wind_avg_kmh/wind_gust_max_kmh have no official daily product for stations and are always derived from the hourly series. For postal codes/mountain points, every summary field is derived from the same hourly series shown alongside it, so it always matches summing/averaging that series exactly.

ParametersJSON Schema
NameRequiredDescriptionDefault
daysNoNumber of forecast days (1-9, default 5)
locationYesSwiss location: postal code (e.g., "8001"), station abbreviation (e.g., "SMA"), or place name (e.g., "Zurich")

Output Schema

ParametersJSON Schema
NameRequiredDescription
sourceYesData attribution
forecastYesOne entry per forecast day, in date order
locationYes
generatedYesTimestamp the forecast was generated (ISO 8601)

TDQS

A4.8/5.0
Behavior5/5

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

With no annotations provided, the description fully carries the behavioral transparency burden. It explains timezone handling ('NOT UTC — do not convert it'), zero-hour inclusion, null-field semantics, empty-array vs null distinctions, and the expected mismatch between official station daily aggregates and hourly-derived values.

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

Conciseness5/5

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

The description is long, but it is well-structured with clear paragraphs and bullet-like lists. Every section addresses a real need for safe invocation and output interpretation, and the core purpose is front-loaded in the first sentence.

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?

The description is complete for this tool's complexity, covering input variants, output structure, edge cases, and data quirks. Given the output schema exists, the description goes beyond what is minimally required and would allow an agent to correctly invoke the tool and interpret results without additional context.

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

Parameters5/5

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

Even though schema description coverage is 100%, the description adds substantial meaning beyond the schema by providing concrete location examples, forecast horizon details, field definitions for the returned summaries, and hourly object semantics. This helps an agent accurately construct inputs and interpret outputs.

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

Purpose5/5

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

The description opens with a specific verb and resource: 'Get a multi-day weather forecast for any Swiss location', and explicitly lists what is returned (daily summaries plus a hierarchical hourly breakdown). This clearly differentiates the tool from siblings like meteoswissCurrentWeather and meteoswissClimateData.

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

Usage Guidelines4/5

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

The description gives clear context for when to use the tool: multi-day forecasts for Swiss locations, including accepted input formats, coverage of ~6000 locations, forecast horizon, and update frequency. However, it does not explicitly name sibling alternatives or state when not to use this tool, so it falls just short of a 5.

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

meteoswissPollenDataAInspect

Get current pollen concentration data from MeteoSwiss monitoring stations (~15 stations across Switzerland). Shows pollen levels for 7 measured species (alder, birch, hazel, beech, ash, oak, grasses) — each is always included, with a "no-current-data" status when out of season. Ambrosia (ragweed) is a MeteoSwiss forecast-only category and is not part of this OGD measurement network, so it is not included. Useful for allergy sufferers.

ParametersJSON Schema
NameRequiredDescriptionDefault
stationNoPollen monitoring station name or abbreviation. Omit for an overview of all stations.

Output Schema

ParametersJSON Schema
NameRequiredDescription
sourceYesData attribution
stationsYesOne entry per pollen station

TDQS

A4.5/5.0
Behavior5/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It adds valuable details: all 7 species are always included, out-of-season species show a 'no-current-data' status, and ambrosia is excluded because it is forecast-only. This goes beyond the schema and clearly explains edge cases and limitations, giving the agent a realistic expectation of the output.

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

Conciseness5/5

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

The description is three sentences long, with the primary purpose front-loaded in the first sentence. The following sentences add crucial context (species list, out-of-season behavior, exclusion) without any filler. Every sentence earns its place, making it both concise and informative.

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?

An output schema exists, so return value details are covered separately. The description covers the station network size, exact species measured, the always-included behavior with a no-data status, and an explicit exclusion. It gives a complete picture of what the tool does and its quirks, leaving no significant gaps for an agent to fill.

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

Parameters3/5

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

Schema coverage is 100% for the only parameter ('station'), and the schema description already explains omission behavior. The tool description does not add any extra parameter-specific semantics; it remains entirely at the data-level. A baseline score of 3 is appropriate since the schema handles the parameter documentation adequately.

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

Purpose5/5

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

The description clearly states the tool's function: 'Get current pollen concentration data from MeteoSwiss monitoring stations.' It specifies the resource (MeteoSwiss stations), the action (get), and the scope (current pollen concentration, ~15 stations). It also distinguishes from siblings by listing the 7 measured species, making it unmistakable for pollen data.

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

Usage Guidelines4/5

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

The description provides a clear use case: 'Useful for allergy sufferers.' While it doesn't explicitly contrast with sibling tools (e.g., meteoswissCurrentWeather) or state when not to use it, the domain is so specific that the usage context is clear. No explicit alternatives or exclusions are mentioned, but the context is sufficient for an agent to decide.

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

meteoswissStationsAInspect

List and search MeteoSwiss measurement stations. Filter by name, canton, or browse the full network of ~300 stations (~160 full weather + ~140 precipitation-only) across Switzerland.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of results (1-200, default 20)
cantonNoFilter by canton abbreviation (e.g., "ZH", "BE", "GR")
searchNoSearch by station name or abbreviation

Output Schema

ParametersJSON Schema
NameRequiredDescription
totalYesTotal number of stations matching the filter
sourceYesData attribution
stationsYesMatching stations, up to `limit`

TDQS

A4.3/5.0
Behavior4/5

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

No annotations are provided, so the description carries the behavioral transparency burden. It discloses the scope of the tool ('~300 stations across Switzerland') and breaks down station types ('~160 full weather + ~140 precipitation-only'), which adds useful context beyond a generic listing tool. It doesn't mention rate limits or side effects, but for a read-only catalog, this is sufficient.

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

Conciseness5/5

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

The description is two sentences: the first states the primary action and resource, the second adds network composition detail. No wasted words, and the most important information is front-loaded. It earns every word it uses.

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 list/search tool with an output schema, the description covers the essential aspects: purpose, filtering options, and network scope. The output schema handles return format, and sibling names clarify this is the station reference tool. No significant gaps remain.

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

Parameters3/5

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

The input schema has 100% coverage with descriptions for all three parameters (limit, canton, search), including examples. The description reiterates the filtering concepts ('Filter by name, canton') but adds little beyond what the schema already captures. Baseline 3 is appropriate since the schema does the heavy lifting.

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

Purpose5/5

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

The description clearly states the tool's function: 'List and search MeteoSwiss measurement stations.' It names the specific resource (MeteoSwiss stations) and the actions (list, search), and distinguishes it from sibling tools like meteoswissClimateData or meteoswissCurrentWeather by focusing on station metadata.

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

Usage Guidelines4/5

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

It provides clear usage context: filter by name/canton or browse the full network. While it doesn't explicitly mention alternatives or when-not-to-use, the sibling tools are clearly for different data (weather, climate, pollen), so the station-focused purpose implicitly guides selection. The context is clear, but explicit exclusions are absent.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 7 tool updates
    • Changedfetch2 fields changed
      • addedInput schema / properties / id / maxLength
        Added value: +2048
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "format": {
        +      "description": "Format of `text`",
        +      "enum": [
        +        "markdown",
        +        "text"
        +      ],
        +      "type": "string"
        +    },
        +    "id": {
        +      "description": "The id the content was fetched for (the page URL)",
        +      "type": "string"
        +    },
        +    "metadata": {
        +      "additionalProperties": false,
        +      "description": "Page metadata (present when includeMetadata is true)",
        +      "properties": {
        +        "contentType": {
        +          "type": "string"
        +        },
        +        "description": {
        +          "type": "string"
        +        },
        +        "keywords": {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        "language": {
        +          "type": "string"
        +        },
        +        "lastModified": {
        +          "type": "string"
        +        },
        +        "url": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "url"
        +      ],
        +      "type": "object"
        +    },
        +    "text": {
        +      "description": "Canonical body field (matches ChatGPT Deep Research spec)",
        +      "type": "string"
        +    },
        +    "title": {
        +      "description": "Page title",
        +      "type": "string"
        +    },
        +    "url": {
        +      "description": "Canonical URL field (matches ChatGPT Deep Research spec). For this server `url === id`.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "id",
        +    "text",
        +    "format",
        +    "url"
        +  ],
        +  "type": "object"
        +}
    • ChangedmeteoswissClimateData5 fields changed
      • addedInput schema / properties / end_date / pattern
        Added value: +"^\\d{4}-\\d{2}-\\d{2}$"
      • addedInput schema / properties / start_date / pattern
        Added value: +"^\\d{4}-\\d{2}-\\d{2}$"
      • changedInput schema / properties / station / description
        Previous value: -"Climate station name or abbreviation (e.g., \"Zurich\", \"BAS\", \"Davos\"). Part of the National Basic Climatic Network (29 climate + 46 precipitation stations)."New value: +"Climate station name or abbreviation (e.g., \"Zurich\", \"BAS\", \"Davos\"). Part of the National Basic Climatic Network (29 climate + 46 precipitation stations). Provide either this or `coordinates`; if both are given, `coordinates` takes precedence."
      • addedInput schema / properties / station / maxLength
        Added value: +200
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "data": {
        +      "description": "Measurement rows, filtered and limited as requested",
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "date": {
        +            "description": "Measurement date (YYYY-MM-DD; first day of period for monthly/yearly)",
        +            "type": "string"
        +          },
        +          "frost_days": {
        +            "description": "Days with minimum below 0 °C (monthly/yearly)",
        +            "type": "number"
        +          },
        +          "heat_days": {
        +            "description": "Days with maximum of 30 °C or above (monthly/yearly)",
        +            "type": "number"
        +          },
        +          "ice_days": {
        +            "description": "Days with maximum below 0 °C (monthly/yearly)",
        +            "type": "number"
        +          },
        +          "precipitation": {
        +            "description": "Precipitation total, mm",
        +            "type": "number"
        +          },
        +          "pressure_hpa": {
        +            "description": "Air pressure, hPa",
        +            "type": "number"
        +          },
        +          "radiation_w_m2": {
        +            "description": "Global radiation, W/m²",
        +            "type": "number"
        +          },
        +          "rain_days": {
        +            "description": "Days with measurable precipitation (monthly/yearly)",
        +            "type": "number"
        +          },
        +          "summer_days": {
        +            "description": "Days with maximum of 25 °C or above (monthly/yearly)",
        +            "type": "number"
        +          },
        +          "sunshine_duration_min": {
        +            "description": "Sunshine duration, minutes",
        +            "type": "number"
        +          },
        +          "temperature_max": {
        +            "description": "Maximum temperature, °C",
        +            "type": "number"
        +          },
        +          "temperature_mean": {
        +            "description": "Mean temperature, °C",
        +            "type": "number"
        +          },
        +          "temperature_min": {
        +            "description": "Minimum temperature, °C",
        +            "type": "number"
        +          },
        +          "tropical_nights": {
        +            "description": "Nights with minimum of 20 °C or above (monthly/yearly)",
        +            "type": "number"
        +          },
        +          "wind_speed_m_s": {
        +            "description": "Wind speed, m/s",
        +            "type": "number"
        +          }
        +        },
        +        "required": [
        +          "date"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "note": {
        +      "description": "Present only when `data` is empty because the requested date range fell outside the fetched series (e.g. a daily request older than the ~2-year `_recent` window). Explains why and suggests a fallback resolution.",
        +      "type": "string"
        +    },
        +    "resolution": {
        +      "description": "Resolution the returned rows are in",
        +      "enum": [
        +        "daily",
        +        "monthly",
        +        "yearly"
        +      ],
        +      "type": "string"
        +    },
        +    "source": {
        +      "description": "Data attribution",
        +      "type": "string"
        +    },
        +    "station": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "abbreviation": {
        +          "description": "Official station abbreviation (e.g. \"SMA\")",
        +          "type": "string"
        +        },
        +        "canton": {
        +          "description": "Canton abbreviation (e.g. \"ZH\")",
        +          "type": "string"
        +        },
        +        "coordinates": {
        +          "additionalProperties": false,
        +          "description": "WGS84 coordinates of the station",
        +          "properties": {
        +            "lat": {
        +              "type": "number"
        +            },
        +            "lon": {
        +              "type": "number"
        +            }
        +          },
        +          "required": [
        +            "lat",
        +            "lon"
        +          ],
        +          "type": "object"
        +        },
        +        "distance_km": {
        +          "description": "Distance from the queried location to this station, km (when resolved by proximity)",
        +          "type": "number"
        +        },
        +        "elevation": {
        +          "description": "Elevation in metres above sea level",
        +          "type": "number"
        +        },
        +        "name": {
        +          "description": "Climate station name",
        +          "type": "string"
        +        },
        +        "network": {
        +          "description": "NBCN network kind: \"nbcn\" (full climate series) or \"nbcn-precip\" (precipitation-only)",
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "name",
        +        "abbreviation",
        +        "elevation",
        +        "coordinates",
        +        "network"
        +      ],
        +      "type": "object"
        +    }
        +  },
        +  "required": [
        +    "station",
        +    "resolution",
        +    "data",
        +    "source"
        +  ],
        +  "type": "object"
        +}
    • ChangedmeteoswissCurrentWeather3 fields changed
      • changedInput schema / properties / station / description
        Previous value: -"Swiss weather station or location: name (e.g., \"Zurich\"), abbreviation (e.g., \"SMA\"), or address (e.g., \"Bahnhofplatz 1 Bern\")"New value: +"Swiss weather station or location: name (e.g., \"Zurich\"), abbreviation (e.g., \"SMA\"), or address (e.g., \"Bahnhofplatz 1 Bern\"). Provide either this or `coordinates`; if both are given, `coordinates` takes precedence."
      • addedInput schema / properties / station / maxLength
        Added value: +200
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "measurements": {
        +      "additionalProperties": false,
        +      "description": "Each measurement is present only when the station reports it",
        +      "properties": {
        +        "dew_point": {
        +          "additionalProperties": false,
        +          "properties": {
        +            "unit": {
        +              "type": "string"
        +            },
        +            "value": {
        +              "type": "number"
        +            }
        +          },
        +          "required": [
        +            "value",
        +            "unit"
        +          ],
        +          "type": "object"
        +        },
        +        "humidity": {
        +          "additionalProperties": false,
        +          "properties": {
        +            "unit": {
        +              "type": "string"
        +            },
        +            "value": {
        +              "type": "number"
        +            }
        +          },
        +          "required": [
        +            "value",
        +            "unit"
        +          ],
        +          "type": "object"
        +        },
        +        "precipitation": {
        +          "additionalProperties": false,
        +          "properties": {
        +            "unit": {
        +              "type": "string"
        +            },
        +            "value": {
        +              "type": "number"
        +            }
        +          },
        +          "required": [
        +            "value",
        +            "unit"
        +          ],
        +          "type": "object"
        +        },
        +        "pressure_sea_level": {
        +          "additionalProperties": false,
        +          "properties": {
        +            "unit": {
        +              "type": "string"
        +            },
        +            "value": {
        +              "type": "number"
        +            }
        +          },
        +          "required": [
        +            "value",
        +            "unit"
        +          ],
        +          "type": "object"
        +        },
        +        "pressure_station": {
        +          "additionalProperties": false,
        +          "properties": {
        +            "unit": {
        +              "type": "string"
        +            },
        +            "value": {
        +              "type": "number"
        +            }
        +          },
        +          "required": [
        +            "value",
        +            "unit"
        +          ],
        +          "type": "object"
        +        },
        +        "radiation": {
        +          "additionalProperties": false,
        +          "properties": {
        +            "unit": {
        +              "type": "string"
        +            },
        +            "value": {
        +              "type": "number"
        +            }
        +          },
        +          "required": [
        +            "value",
        +            "unit"
        +          ],
        +          "type": "object"
        +        },
        +        "snow_depth": {
        +          "additionalProperties": false,
        +          "properties": {
        +            "unit": {
        +              "type": "string"
        +            },
        +            "value": {
        +              "type": "number"
        +            }
        +          },
        +          "required": [
        +            "value",
        +            "unit"
        +          ],
        +          "type": "object"
        +        },
        +        "sunshine": {
        +          "additionalProperties": false,
        +          "properties": {
        +            "unit": {
        +              "type": "string"
        +            },
        +            "value": {
        +              "type": "number"
        +            }
        +          },
        +          "required": [
        +            "value",
        +            "unit"
        +          ],
        +          "type": "object"
        +        },
        +        "temperature": {
        +          "additionalProperties": false,
        +          "properties": {
        +            "unit": {
        +              "type": "string"
        +            },
        +            "value": {
        +              "type": "number"
        +            }
        +          },
        +          "required": [
        +            "value",
        +            "unit"
        +          ],
        +          "type": "object"
        +        },
        +        "wind_direction": {
        +          "additionalProperties": false,
        +          "properties": {
        +            "unit": {
        +              "type": "string"
        +            },
        +            "value": {
        +              "type": "number"
        +            }
        +          },
        +          "required": [
        +            "value",
        +            "unit"
        +          ],
        +          "type": "object"
        +        },
        +        "wind_gust": {
        +          "additionalProperties": false,
        +          "properties": {
        +            "unit": {
        +              "type": "string"
        +            },
        +            "value": {
        +              "type": "number"
        +            }
        +          },
        +          "required": [
        +            "value",
        +            "unit"
        +          ],
        +          "type": "object"
        +        },
        +        "wind_speed": {
        +          "additionalProperties": false,
        +          "properties": {
        +            "unit": {
        +              "type": "string"
        +            },
        +            "value": {
        +              "type": "number"
        +            }
        +          },
        +          "required": [
        +            "value",
        +            "unit"
        +          ],
        +          "type": "object"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "source": {
        +      "description": "Data attribution",
        +      "type": "string"
        +    },
        +    "station": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "abbreviation": {
        +          "description": "Official station abbreviation (e.g. \"SMA\")",
        +          "type": "string"
        +        },
        +        "canton": {
        +          "description": "Canton abbreviation (e.g. \"ZH\")",
        +          "type": "string"
        +        },
        +        "coordinates": {
        +          "additionalProperties": false,
        +          "description": "WGS84 coordinates of the station",
        +          "properties": {
        +            "lat": {
        +              "type": "number"
        +            },
        +            "lon": {
        +              "type": "number"
        +            }
        +          },
        +          "required": [
        +            "lat",
        +            "lon"
        +          ],
        +          "type": "object"
        +        },
        +        "distance_km": {
        +          "description": "Distance from the queried location to this station, km (when resolved by proximity)",
        +          "type": "number"
        +        },
        +        "elevation": {
        +          "description": "Elevation in metres above sea level",
        +          "type": "number"
        +        },
        +        "municipality": {
        +          "type": "string"
        +        },
        +        "name": {
        +          "description": "Station name",
        +          "type": "string"
        +        },
        +        "network": {
        +          "description": "Measurement network (\"smn\" full weather, \"smn-precip\" precipitation-only)",
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "name",
        +        "abbreviation",
        +        "elevation",
        +        "coordinates"
        +      ],
        +      "type": "object"
        +    },
        +    "timestamp": {
        +      "description": "Measurement timestamp (ISO 8601)",
        +      "type": "string"
        +    },
        +    "visual_observations": {
        +      "additionalProperties": false,
        +      "description": "Visual observations (only for 8 OBS stations: ALT, BAS, CHU, GSB, JUN, SAE, SIO, SMA)",
        +      "properties": {
        +        "cloud_cover_percent": {
        +          "type": "number"
        +        },
        +        "date": {
        +          "type": "string"
        +        },
        +        "has_fog": {
        +          "type": "boolean"
        +        },
        +        "has_hail": {
        +          "type": "boolean"
        +        },
        +        "has_rain": {
        +          "type": "boolean"
        +        },
        +        "has_rain_and_snow": {
        +          "type": "boolean"
        +        },
        +        "has_snow_coverage": {
        +          "type": "boolean"
        +        },
        +        "has_snowfall": {
        +          "type": "boolean"
        +        },
        +        "is_clear_day": {
        +          "type": "boolean"
        +        },
        +        "is_overcast_day": {
        +          "type": "boolean"
        +        }
        +      },
        +      "required": [
        +        "date"
        +      ],
        +      "type": "object"
        +    }
        +  },
        +  "required": [
        +    "station",
        +    "timestamp",
        +    "measurements",
        +    "source"
        +  ],
        +  "type": "object"
        +}
    • ChangedmeteoswissLocalForecast3 fields changed
      • changedInput schema / properties / location / description
        Previous value: -"Swiss location: postal code (e.g., \"8001\"), station abbreviation (e.g., \"ZUE\"), or place name (e.g., \"Zurich\")"New value: +"Swiss location: postal code (e.g., \"8001\"), station abbreviation (e.g., \"SMA\"), or place name (e.g., \"Zurich\")"
      • addedInput schema / properties / location / maxLength
        Added value: +200
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "forecast": {
        +      "description": "One entry per forecast day, in date order",
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "date": {
        +            "description": "Local Europe/Zurich calendar date (YYYY-MM-DD) for postal codes/mountain points; the station data source's native daily date for weather stations.",
        +            "type": "string"
        +          },
        +          "hourly": {
        +            "anyOf": [
        +              {
        +                "items": {
        +                  "additionalProperties": false,
        +                  "properties": {
        +                    "precip_mm": {
        +                      "anyOf": [
        +                        {
        +                          "type": "number"
        +                        },
        +                        {
        +                          "type": "null"
        +                        }
        +                      ],
        +                      "description": "Precipitation sum for this hour, in mm"
        +                    },
        +                    "sunshine_minutes": {
        +                      "anyOf": [
        +                        {
        +                          "type": "number"
        +                        },
        +                        {
        +                          "type": "null"
        +                        }
        +                      ],
        +                      "description": "Sunshine duration within this hour, in minutes"
        +                    },
        +                    "temperature_c": {
        +                      "anyOf": [
        +                        {
        +                          "type": "number"
        +                        },
        +                        {
        +                          "type": "null"
        +                        }
        +                      ],
        +                      "description": "Temperature at this hour, in °C"
        +                    },
        +                    "time": {
        +                      "description": "ISO 8601 timestamp with UTC offset, in local Europe/Zurich time (e.g. \"2026-03-28T09:00:00+01:00\")",
        +                      "type": "string"
        +                    },
        +                    "wind_gust_kmh": {
        +                      "anyOf": [
        +                        {
        +                          "type": "number"
        +                        },
        +                        {
        +                          "type": "null"
        +                        }
        +                      ],
        +                      "description": "Peak wind gust for this hour, in km/h"
        +                    },
        +                    "wind_kmh": {
        +                      "anyOf": [
        +                        {
        +                          "type": "number"
        +                        },
        +                        {
        +                          "type": "null"
        +                        }
        +                      ],
        +                      "description": "Mean wind speed for this hour, in km/h"
        +                    }
        +                  },
        +                  "required": [
        +                    "time",
        +                    "temperature_c",
        +                    "precip_mm",
        +                    "sunshine_minutes",
        +                    "wind_kmh",
        +                    "wind_gust_kmh"
        +                  ],
        +                  "type": "object"
        +                },
        +                "type": "array"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "Per-hour breakdown across every series, keyed to the local Europe/Zurich calendar day this `date` represents (each entry's `time` always falls within this day). `null` when no hourly breakdown exists for this location at all (a total data gap); `[]` when the point type supports hourly data but none was available for this specific day. A dry/calm/sunless hour still appears with its measured 0 value — 0-valued readings are kept, not omitted."
        +          },
        +          "precipitation_total_mm": {
        +            "anyOf": [
        +              {
        +                "type": "number"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "Daily precipitation total, mm. For postal codes/mountain points, the sum of `hourly`'s `precip_mm` (cannot disagree with the series). For weather stations, MeteoSwiss's official daily aggregate (`rka150d0`) — a *different* product than re-summing the station's hourly series, so it may legitimately NOT equal `sum(hourly precip_mm)` for stations. This is expected, not a data inconsistency."
        +          },
        +          "sunshine_total_minutes": {
        +            "anyOf": [
        +              {
        +                "type": "number"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "Daily sunshine total, minutes. Derived from `hourly`'s `sunshine_minutes` for every point type (no official daily aggregate exists for this parameter)."
        +          },
        +          "temperature_max_c": {
        +            "anyOf": [
        +              {
        +                "type": "number"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "Daily temperature maximum, °C. Same sourcing rules as temperature_min_c (station aggregate: `tre200dx`)."
        +          },
        +          "temperature_min_c": {
        +            "anyOf": [
        +              {
        +                "type": "number"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "Daily temperature minimum, °C. For postal codes/mountain points, derived from the same hourly series as `hourly` (so they cannot disagree). For weather stations, MeteoSwiss's official daily aggregate (`tre200dn`) — may capture sub-hourly extremes the hourly series alone wouldn't show."
        +          },
        +          "weather": {
        +            "anyOf": [
        +              {
        +                "type": "string"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "Human-readable weather description"
        +          },
        +          "weather_icon_url": {
        +            "anyOf": [
        +              {
        +                "type": "string"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "URL of the official MeteoSwiss weather icon"
        +          },
        +          "wind_avg_kmh": {
        +            "anyOf": [
        +              {
        +                "type": "number"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "Daily mean wind speed, km/h. Derived from `hourly`'s `wind_kmh` for every point type."
        +          },
        +          "wind_gust_max_kmh": {
        +            "anyOf": [
        +              {
        +                "type": "number"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "Daily peak wind gust, km/h. Derived from `hourly`'s `wind_gust_kmh` for every point type."
        +          }
        +        },
        +        "required": [
        +          "date",
        +          "weather",
        +          "weather_icon_url",
        +          "temperature_min_c",
        +          "temperature_max_c",
        +          "precipitation_total_mm",
        +          "sunshine_total_minutes",
        +          "wind_avg_kmh",
        +          "wind_gust_max_kmh",
        +          "hourly"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "generated": {
        +      "description": "Timestamp the forecast was generated (ISO 8601)",
        +      "type": "string"
        +    },
        +    "location": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "coordinates": {
        +          "additionalProperties": false,
        +          "description": "WGS84 coordinates of the resolved point",
        +          "properties": {
        +            "lat": {
        +              "type": "number"
        +            },
        +            "lon": {
        +              "type": "number"
        +            }
        +          },
        +          "required": [
        +            "lat",
        +            "lon"
        +          ],
        +          "type": "object"
        +        },
        +        "elevation": {
        +          "description": "Elevation in metres above sea level",
        +          "type": "number"
        +        },
        +        "name": {
        +          "description": "Resolved location name",
        +          "type": "string"
        +        },
        +        "type": {
        +          "description": "Point type: \"station\", \"postal_code\", or \"mountain\"",
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "name",
        +        "type",
        +        "elevation",
        +        "coordinates"
        +      ],
        +      "type": "object"
        +    },
        +    "source": {
        +      "description": "Data attribution",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "location",
        +    "generated",
        +    "forecast",
        +    "source"
        +  ],
        +  "type": "object"
        +}
    • ChangedmeteoswissPollenData2 fields changed
      • addedInput schema / properties / station / maxLength
        Added value: +200
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "source": {
        +      "description": "Data attribution",
        +      "type": "string"
        +    },
        +    "stations": {
        +      "description": "One entry per pollen station",
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "pollen": {
        +            "description": "One entry per measured species — every known species always appears",
        +            "items": {
        +              "oneOf": [
        +                {
        +                  "additionalProperties": false,
        +                  "properties": {
        +                    "status": {
        +                      "const": "measured",
        +                      "type": "string"
        +                    },
        +                    "type": {
        +                      "description": "Pollen species (e.g. \"birch\", \"grasses\")",
        +                      "type": "string"
        +                    },
        +                    "unit": {
        +                      "description": "Concentration unit (particles/m³)",
        +                      "type": "string"
        +                    },
        +                    "value": {
        +                      "description": "Concentration reading",
        +                      "type": "number"
        +                    }
        +                  },
        +                  "required": [
        +                    "type",
        +                    "status",
        +                    "value",
        +                    "unit"
        +                  ],
        +                  "type": "object"
        +                },
        +                {
        +                  "additionalProperties": false,
        +                  "properties": {
        +                    "status": {
        +                      "const": "no-current-data",
        +                      "description": "No current reading for this species (e.g. out of season) — explicit, not omitted",
        +                      "type": "string"
        +                    },
        +                    "type": {
        +                      "description": "Pollen species (e.g. \"birch\", \"grasses\")",
        +                      "type": "string"
        +                    }
        +                  },
        +                  "required": [
        +                    "type",
        +                    "status"
        +                  ],
        +                  "type": "object"
        +                }
        +              ]
        +            },
        +            "type": "array"
        +          },
        +          "station": {
        +            "additionalProperties": false,
        +            "properties": {
        +              "abbreviation": {
        +                "description": "Pollen station abbreviation (e.g. \"PZH\")",
        +                "type": "string"
        +              },
        +              "coordinates": {
        +                "additionalProperties": false,
        +                "description": "WGS84 coordinates of the station",
        +                "properties": {
        +                  "lat": {
        +                    "type": "number"
        +                  },
        +                  "lon": {
        +                    "type": "number"
        +                  }
        +                },
        +                "required": [
        +                  "lat",
        +                  "lon"
        +                ],
        +                "type": "object"
        +              },
        +              "name": {
        +                "description": "Pollen station name",
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "name",
        +              "abbreviation",
        +              "coordinates"
        +            ],
        +            "type": "object"
        +          },
        +          "timestamp": {
        +            "description": "Measurement timestamp (ISO 8601)",
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "station",
        +          "timestamp",
        +          "pollen"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    }
        +  },
        +  "required": [
        +    "stations",
        +    "source"
        +  ],
        +  "type": "object"
        +}
    • ChangedmeteoswissStations2 fields changed
      • addedInput schema / properties / search / maxLength
        Added value: +200
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "source": {
        +      "description": "Data attribution",
        +      "type": "string"
        +    },
        +    "stations": {
        +      "description": "Matching stations, up to `limit`",
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "abbreviation": {
        +            "description": "Official station abbreviation (e.g. \"SMA\")",
        +            "type": "string"
        +          },
        +          "canton": {
        +            "description": "Canton abbreviation (e.g. \"ZH\")",
        +            "type": "string"
        +          },
        +          "coordinates": {
        +            "additionalProperties": false,
        +            "description": "WGS84 coordinates of the station",
        +            "properties": {
        +              "lat": {
        +                "type": "number"
        +              },
        +              "lon": {
        +                "type": "number"
        +              }
        +            },
        +            "required": [
        +              "lat",
        +              "lon"
        +            ],
        +            "type": "object"
        +          },
        +          "data_since": {
        +            "description": "Date the station started reporting data",
        +            "type": "string"
        +          },
        +          "elevation": {
        +            "description": "Elevation in metres above sea level",
        +            "type": "number"
        +          },
        +          "name": {
        +            "description": "Station name",
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "abbreviation",
        +          "name",
        +          "canton",
        +          "elevation",
        +          "coordinates",
        +          "data_since"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "total": {
        +      "description": "Total number of stations matching the filter",
        +      "type": "number"
        +    }
        +  },
        +  "required": [
        +    "total",
        +    "stations",
        +    "source"
        +  ],
        +  "type": "object"
        +}
    • Changedsearch5 fields changed
      • changedInput schema / properties / page / description
        Previous value: -"Page number for pagination (1-based)"New value: +"Page number for pagination (1-based). The upstream API always returns 10 results per page; page size is not configurable."
      • changedInput schema / properties / page / maximum
        Previous value: -9007199254740991New value: +1000
      • removedInput schema / properties / pageSize
        Removed value: -{
        -  "default": 12,
        -  "description": "Number of results per page (max 100)",
        -  "exclusiveMinimum": 0,
        -  "maximum": 100,
        -  "type": "integer"
        -}
      • addedInput schema / properties / query / maxLength
        Added value: +200
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "page": {
        +      "description": "Current page number (1-based)",
        +      "type": "number"
        +    },
        +    "pageSize": {
        +      "description": "Number of items in `results` for this page — at most 10 (the upstream API pages by a fixed 10), fewer on the last page",
        +      "type": "number"
        +    },
        +    "results": {
        +      "description": "Result items for this page",
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "contentType": {
        +            "description": "Content type of the result",
        +            "type": "string"
        +          },
        +          "description": {
        +            "description": "Short description of the page",
        +            "type": "string"
        +          },
        +          "id": {
        +            "description": "Result identifier — the page URL (pass to the fetch tool)",
        +            "type": "string"
        +          },
        +          "lastModified": {
        +            "description": "Last modification date",
        +            "type": "string"
        +          },
        +          "lead": {
        +            "description": "Lead/teaser text",
        +            "type": "string"
        +          },
        +          "path": {
        +            "description": "Site path of the page",
        +            "type": "string"
        +          },
        +          "publicationDate": {
        +            "description": "Publication date",
        +            "type": "string"
        +          },
        +          "title": {
        +            "description": "Page title",
        +            "type": "string"
        +          },
        +          "url": {
        +            "description": "Full page URL",
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "id",
        +          "title",
        +          "url"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "totalResults": {
        +      "description": "Total number of matches across all pages",
        +      "type": "number"
        +    }
        +  },
        +  "required": [
        +    "totalResults",
        +    "page",
        +    "pageSize",
        +    "results"
        +  ],
        +  "type": "object"
        +}
  2. 1 tool update
    • Changedfetch3 fields changed
      • addedInput schema / properties / id
        Added value: +{
        +  "description": "Identifier of a MeteoSwiss page to fetch. For this server the id is a full URL returned by the search tool. Example: https://www.meteoschweiz.admin.ch/klima/klimawandel/steigende-temperaturen.html",
        +  "minLength": 1,
        +  "type": "string"
        +}
      • removedInput schema / properties / url
        Removed value: -{
        -  "description": "Full URL of a MeteoSwiss page to fetch. Use the search tool first to discover valid URLs. Example: https://www.meteoschweiz.admin.ch/klima/klimawandel/steigende-temperaturen.html",
        -  "minLength": 1,
        -  "type": "string"
        -}
      • changedInput schema / required
        Previous value: -[
        -  "url"
        -]New value: +[
        +  "id"
        +]
  3. 2 tool updates
    • Changedfetch3 fields changed
      • removedInput schema / properties / id
        Removed value: -{
        -  "description": "Full URL of a MeteoSwiss page to fetch. Use the search tool first to discover valid URLs. Example: https://www.meteoschweiz.admin.ch/klima/klimawandel/steigende-temperaturen.html",
        -  "minLength": 1,
        -  "type": "string"
        -}
      • addedInput schema / properties / url
        Added value: +{
        +  "description": "Full URL of a MeteoSwiss page to fetch. Use the search tool first to discover valid URLs. Example: https://www.meteoschweiz.admin.ch/klima/klimawandel/steigende-temperaturen.html",
        +  "minLength": 1,
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "id"
        -]New value: +[
        +  "url"
        +]
    • AddedmeteoswissClimateData
  4. 2 tool updates
    • Changedfetch1 field changed
      • changedInput schema / properties / id / description
        Previous value: -"The content ID or path to fetch"New value: +"Full URL of a MeteoSwiss page to fetch. Use the search tool first to discover valid URLs. Example: https://www.meteoschweiz.admin.ch/klima/klimawandel/steigende-temperaturen.html"
    • Changedsearch1 field changed
      • changedInput schema / properties / sort / description
        Previous value: -"Sort order for results"New value: +"Sort order for results. Note: date-asc severely degrades relevance — results are dominated by page age rather than query match."
  5. 6 tool updates
    • First observedfetch
    • First observedmeteoswissCurrentWeather
    • First observedmeteoswissLocalForecast
    • First observedmeteoswissPollenData
    • First observedmeteoswissStations
    • First observedsearch

Frequently Asked Questions

Discussions

No comments yet. Be the first to start the discussion!

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    A
    maintenance
    Enables AI models to access Swiss weather and climate data from MeteoSwiss, including current observations, forecasts, and warnings.
    6
    MIT
  • A
    license
    D
    quality
    D
    maintenance
    Provides Swiss weather forecast data, allowing users to search for Swiss locations and get detailed hourly and daily weather forecasts.
    2
    2
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Global weather intelligence for AI assistants providing 10 weather tools — forecasts, historical data, air quality, marine, geocoding, elevation, and climate projections at 1km resolution with 80+ years of archive.
    1
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    Connects AI assistants to Swiss environmental data from BAFU, including air quality, hydrology, natural hazards, and open datasets, with no API keys required.
    21
    1
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

TDQS

A4.3/5.0
Disambiguation5/5

Each tool has a clearly distinct purpose: current conditions, forecasts, historical climate, pollen, station metadata, and web content search/retrieval. There is no meaningful overlap or ambiguity between any two tools.

Naming Consistency3/5

The five weather-domain tools share a consistent 'meteoswiss' prefix with camelCase noun suffixes, but 'search' and 'fetch' are generic lowercase verbs that do not follow this pattern. The mix of verb-style and noun-style names is readable but not fully predictable.

Tool Count5/5

Seven tools is well-scoped for a national weather service. Each tool covers a major capability (current weather, forecast, climate, pollen, stations, website access) without being too few or unnecessarily numerous.

Completeness4/5

The set covers the core weather data needs comprehensively, including real-time, forecast, historical, pollen, and station discovery. Obvious gaps are severe weather warnings and radar/satellite products, but the addition of search/fetch partially compensates by allowing access to the full MeteoSwiss website.

Resources