MeteoSwiss MCP Server
Server Details
Swiss weather data for AI assistants — forecasts, measurements, stations, pollen.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP
- URL
- Server Listing
- MeteoSwiss MCP Server
Available Tools
7 toolsfetchAInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | 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 | |
| format | No | The output format for the content | markdown |
| includeMetadata | No | Whether to include metadata in the response |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | The id the content was fetched for (the page URL) |
| url | Yes | Canonical URL field (matches ChatGPT Deep Research spec). For this server `url === id`. |
| text | Yes | Canonical body field (matches ChatGPT Deep Research spec) |
| title | No | Page title |
| format | Yes | Format of `text` |
| metadata | No | Page metadata (present when includeMetadata is true) |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of data rows to return (default 30) | |
| station | No | 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. | |
| end_date | No | End date filter (YYYY-MM-DD). Only rows on or before this date are returned. | |
| resolution | No | Data resolution: daily (temp min/max/mean), monthly (full climate summary), yearly (annual summary) | monthly |
| start_date | No | Start date filter (YYYY-MM-DD). Only rows on or after this date are returned. | |
| coordinates | No | WGS84 coordinates (alternative to station name) |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | Measurement rows, filtered and limited as requested |
| note | No | 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. |
| source | Yes | Data attribution |
| station | Yes | |
| resolution | Yes | Resolution the returned rows are in |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| station | No | 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. | |
| coordinates | No | WGS84 coordinates (alternative to station name) |
Output Schema
| Name | Required | Description |
|---|---|---|
| source | Yes | Data attribution |
| station | Yes | |
| timestamp | Yes | Measurement timestamp (ISO 8601) |
| measurements | Yes | Each measurement is present only when the station reports it |
| visual_observations | No | Visual observations (only for 8 OBS stations: ALT, BAS, CHU, GSB, JUN, SAE, SIO, SMA) |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Number of forecast days (1-9, default 5) | |
| location | Yes | Swiss location: postal code (e.g., "8001"), station abbreviation (e.g., "SMA"), or place name (e.g., "Zurich") |
Output Schema
| Name | Required | Description |
|---|---|---|
| source | Yes | Data attribution |
| forecast | Yes | One entry per forecast day, in date order |
| location | Yes | |
| generated | Yes | Timestamp the forecast was generated (ISO 8601) |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| station | No | Pollen monitoring station name or abbreviation. Omit for an overview of all stations. |
Output Schema
| Name | Required | Description |
|---|---|---|
| source | Yes | Data attribution |
| stations | Yes | One entry per pollen station |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of results (1-200, default 20) | |
| canton | No | Filter by canton abbreviation (e.g., "ZH", "BE", "GR") | |
| search | No | Search by station name or abbreviation |
Output Schema
| Name | Required | Description |
|---|---|---|
| total | Yes | Total number of stations matching the filter |
| source | Yes | Data attribution |
| stations | Yes | Matching stations, up to `limit` |
TDQS
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.
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.
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.
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.
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.
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.
searchAInspect
Search MeteoSwiss website content in multiple languages (DE, FR, IT, EN). Returns relevant pages with URLs that can be passed to the fetch tool. Always returns up to 10 results per page — the upstream API has a fixed page size that cannot be changed. Note: pagination may return duplicate results across pages (upstream API limitation).
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number for pagination (1-based). The upstream API always returns 10 results per page; page size is not configurable. | |
| sort | No | Sort order for results. Note: date-asc severely degrades relevance — results are dominated by page age rather than query match. | relevance |
| query | Yes | The search query string | |
| language | No | The language for search results | de |
| contentType | No | Filter by content type. Defaults to "content" to exclude application pages. Use "publication" for official reports. |
Output Schema
| Name | Required | Description |
|---|---|---|
| page | Yes | Current page number (1-based) |
| results | Yes | Result items for this page |
| pageSize | Yes | Number of items in `results` for this page — at most 10 (the upstream API pages by a fixed 10), fewer on the last page |
| totalResults | Yes | Total number of matches across all pages |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses the fixed 10-result page size and the upstream duplication limitation, which are critical behavioral traits. It does not cover every edge case, but for a search tool these are the key operational constraints.
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 three sentences, front-loaded with the purpose, followed by behavioral notes and a limitation. Every sentence earns its place, with no redundant content.
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?
With an output schema and rich parameter descriptions, the description covers the essential operational quirks (fixed page size, duplicates) and the workflow (pass URLs to fetch). It could mention sort behavior, but that is already in the schema, so the description is sufficiently 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?
All five parameters are fully documented in the schema (100% coverage), so the description adds only marginal value beyond the schema. It mentions language support and the fixed page size, but these are already reflected in parameter descriptions, so baseline 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 clearly states 'Search MeteoSwiss website content' with specific verb and resource, and notes multi-language support. It distinguishes itself from sibling tools like meteoswissCurrentWeather and meteoswissClimateData, which focus on data rather than website content.
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 mentions that returned URLs can be passed to the fetch tool, establishing a clear usage workflow. It does not explicitly name alternatives or exclusions, but the tool's scope is evident from sibling names, so guidance is clear despite lacking explicit 'when not to use' statements.
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.
7 tool updates
- Changed
fetch2 fields changed- added
Input schema / properties / id / maxLengthAdded value: +2048 - changed
Output 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" +}
- Changed
meteoswissClimateData5 fields changed- added
Input schema / properties / end_date / patternAdded value: +"^\\d{4}-\\d{2}-\\d{2}$" - added
Input schema / properties / start_date / patternAdded value: +"^\\d{4}-\\d{2}-\\d{2}$" - changed
Input schema / properties / station / descriptionPrevious 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." - added
Input schema / properties / station / maxLengthAdded value: +200 - changed
Output 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" +}
- Changed
meteoswissCurrentWeather3 fields changed- changed
Input schema / properties / station / descriptionPrevious 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." - added
Input schema / properties / station / maxLengthAdded value: +200 - changed
Output 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" +}
- Changed
meteoswissLocalForecast3 fields changed- changed
Input schema / properties / location / descriptionPrevious 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\")" - added
Input schema / properties / location / maxLengthAdded value: +200 - changed
Output 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" +}
- Changed
meteoswissPollenData2 fields changed- added
Input schema / properties / station / maxLengthAdded value: +200 - changed
Output 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" +}
- Changed
meteoswissStations2 fields changed- added
Input schema / properties / search / maxLengthAdded value: +200 - changed
Output 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" +}
- Changed
search5 fields changed- changed
Input schema / properties / page / descriptionPrevious 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." - changed
Input schema / properties / page / maximumPrevious value: -9007199254740991New value: +1000 - removed
Input schema / properties / pageSizeRemoved value: -{ - "default": 12, - "description": "Number of results per page (max 100)", - "exclusiveMinimum": 0, - "maximum": 100, - "type": "integer" -} - added
Input schema / properties / query / maxLengthAdded value: +200 - changed
Output 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" +}
1 tool update
- Changed
fetch3 fields changed- added
Input schema / properties / idAdded 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" +} - removed
Input schema / properties / urlRemoved 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" -} - changed
Input schema / requiredPrevious value: -[ - "url" -]New value: +[ + "id" +]
2 tool updates
- Changed
fetch3 fields changed- removed
Input schema / properties / idRemoved 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" -} - added
Input schema / properties / urlAdded 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" +} - changed
Input schema / requiredPrevious value: -[ - "id" -]New value: +[ + "url" +]
- Added
meteoswissClimateData
2 tool updates
- Changed
fetch1 field changed- changed
Input schema / properties / id / descriptionPrevious 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"
- Changed
search1 field changed- changed
Input schema / properties / sort / descriptionPrevious 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."
6 tool updates
- First observed
fetch - First observed
meteoswissCurrentWeather - First observed
meteoswissLocalForecast - First observed
meteoswissPollenData - First observed
meteoswissStations - First observed
search
Frequently Asked Questions
Claiming proves that you control a remote MCP connector. It does not move, proxy, or interrupt the server.
Open the connector listing, choose Claim ownership, and sign in to Glama.
Complete one verification method:
GitHub identity — fastest for official registry listings. For a namespace such as
io.github.alice/server, link the matching GitHub user, then choose Claim with GitHub. An organization namespace such asio.github.acme/serveralso needs that organization to have installed the Glama AI GitHub App and approved its permissions, because GitHub discloses organization membership only to apps it has installed. Use HTTP or DNS when it has not.HTTP challenge — works when you can deploy a public file. Generate a token, publish the exact JSON Glama shows at
/.well-known/glama.jsonon the same origin as the connector, then choose Check HTTP challenge.DNS challenge — works when you control DNS but cannot change the server. Generate a token, create the exact TXT record Glama shows, wait for it to propagate, then choose Check DNS challenge.
After verification, Glama sends a confirmation email and gives you access to listing details, thumbnails, health checks, and analytics. Keep the HTTP file or DNS record in place: Glama periodically checks it and ownership remains verified while the token is discoverable.
The HTTP ownership file has this structure:
{
"$schema": "https://glama.ai/mcp/schemas/connector.json",
"claim": "glama_claim_..."
}Claim tokens are opaque, stable, and bound to the signed-in Glama account. They contain no email address or other personal information. If Glama can no longer discover a verified HTTP or DNS token, it starts a seven-day grace period before removing claim-based access. Restore the same token during that period to keep ownership verified. Never publish an email address, Glama session token, GitHub token, or connector credential as ownership proof.
If verification fails, confirm that you copied the current token exactly. The HTTP file must be public, return valid JSON with a successful HTTP response, and stay on the connector's origin. DNS changes may need more time to propagate. A claim cannot transfer to a different origin or hostname: if the connector target changes, Glama starts the grace period and the new target must be claimed separately after the previous claim is released.
For a connector linked to the official MCP Registry, registry updates continue to replace its name, description, and URL by default. After claiming, open Manage connector and enable Use Glama listing details as the source of truth if edits made on Glama should be preserved. Categories and thumbnails are always managed on Glama; registry linkage and technical connection settings continue to sync.
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
To improve your MCP server's ranking:
Claim ownership of the server listing
Complete the server profile with an accurate description and thumbnail
Provide a test profile so Glama can connect to and evaluate the server
Keep tool definitions clear and complete to earn a high Tool Definition Quality Score (TDQS)
Route real usage through the Glama Gateway; more recorded successful server uses also improve the ranking
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 Connectors
Weather data, forecast API, climate data, historical weather, alerts, agricultural & travel weather.
Real-time weather conditions and multi-day forecasts via Open-Meteo — free, no API key required
US weather & geo for AI agents: forecasts, alerts, earthquakes, elevation, geocoding. No keys.
US weather & geo for AI agents: forecasts, alerts, earthquakes, elevation, geocoding. No keys.
61
Related MCP Servers
- AlicenseAqualityAmaintenanceEnables AI models to access Swiss weather and climate data from MeteoSwiss, including current observations, forecasts, and warnings.6MIT
- AlicenseDqualityDmaintenanceProvides Swiss weather forecast data, allowing users to search for Swiss locations and get detailed hourly and daily weather forecasts.22MIT
- AlicenseNot gradedqualityDmaintenanceGlobal 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.1MIT
- AlicenseAqualityAmaintenanceConnects AI assistants to Swiss environmental data from BAFU, including air quality, hydrology, natural hazards, and open datasets, with no API keys required.211MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.
TDQS
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.
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.
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.
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.