Tools reference
The server exposes seven tools. The weather tools read MeteoSwiss Open Government Data;
search and fetch read the MeteoSwiss website. Every tool declares an output schema, so clients see the response shape in tools/list
and receive the result as structuredContent (the same JSON also comes back as text).
| Tool | Answers | Source |
|---|---|---|
meteoswissLocalForecast |
What will the weather be like at a place? | OGD forecast |
meteoswissCurrentWeather |
What is the weather right now? | OGD measurements |
meteoswissStations |
Which stations exist, and where? | OGD station metadata |
meteoswissPollenData |
How high is the pollen load? | OGD pollen network |
meteoswissClimateData |
What is the long-term climate at a station? | OGD NBCN |
search |
Which MeteoSwiss pages cover a topic? | MeteoSwiss website |
fetch |
What does this MeteoSwiss page say? | MeteoSwiss website |
meteoswissLocalForecast
Section titled “meteoswissLocalForecast”A multi-day forecast for any Swiss location: ~6000 points (all postal codes, weather stations and mountain points), up to 9 days ahead, updated hourly.
| Parameter | Type | Required | Description |
|---|---|---|---|
location |
string (max 200) | yes | Postal code ("8001"), station abbreviation ("SMA") or place name ("Zurich") |
days |
integer 1-9 | no | Number of forecast days, default 5 |
Returns per day: minimum and maximum temperature, precipitation total, sunshine minutes, mean wind and maximum gust, a weather
description and the official icon URL. Each day also carries an hourly array with one object per hour covering every series
(temperature_c, precip_mm, sunshine_minutes, wind_kmh, wind_gust_kmh). hourly is null when a location has no hourly data at all, and [] for a day without data.
Things worth knowing:
- Hourly
timevalues are local wall-clock time (Europe/Zurich) with the UTC offset, e.g.2026-07-09T14:00:00+02:00. They are not UTC. This was chosen by measuring how models read the data. - A dry hour is reported as
0, not omitted. A field isnullonly when that one series has no reading for that hour.
Try: “Will it rain in Bern tomorrow afternoon?” · “Wie wird das Wetter in Lugano am Wochenende?”
meteoswissCurrentWeather
Section titled “meteoswissCurrentWeather”Real-time measurements from ~300 automatic stations (~160 full weather stations plus ~140 precipitation-only stations), updated every 10 minutes. Includes temperature, precipitation, wind, humidity, pressure, sunshine and more; a value is present only when the station reports it. Precipitation-only stations return rainfall only.
For eight stations (Zurich, Basel, Chur, Sion, Altdorf, Säntis, Jungfraujoch, Grand St-Bernard) the response also contains the daily visual observations: cloud cover, fog, rain, snowfall, hail and snow cover.
| Parameter | Type | Required | Description |
|---|---|---|---|
station |
string (max 200) | one of the two | Station name, abbreviation or an address ("Bahnhofplatz 1 Bern") |
coordinates |
{ lat, lon } |
one of the two | WGS84; the nearest station is used. Takes precedence if both are given |
Coordinates must lie within Switzerland’s bounding box (lat 45.5-48, lon 5.9-10.6).
Try: “What’s the temperature in Zurich right now?” · “How windy is it at Jungfraujoch?”
meteoswissStations
Section titled “meteoswissStations”Searches the station network.
| Parameter | Type | Required | Description |
|---|---|---|---|
search |
string (max 200) | no | Name or abbreviation |
canton |
2 letters | no | Canton code, e.g. "ZH", "BE", "GR" |
limit |
integer 1-200 | no | Default 20 |
Returns total and, per station: abbreviation, name, canton, elevation, coordinates and the date it started reporting.
Try: “Which weather stations are in canton Graubünden?”
meteoswissPollenData
Section titled “meteoswissPollenData”Current pollen concentrations from ~15 monitoring stations. Seven species are measured: alder, birch, hazel, beech, ash, oak and grasses.
Each species always appears; a species with no current reading (out of season) is reported with the status no-current-data rather than
omitted. Ragweed (ambrosia) is not part of the OGD measurement network and is therefore not included.
| Parameter | Type | Required | Description |
|---|---|---|---|
station |
string (max 200) | no | Station name or abbreviation. Omit for an overview of all stations |
Concentrations are in particles/m³.
Try: “How bad are grass pollen in Zurich today?”
meteoswissClimateData
Section titled “meteoswissClimateData”Homogeneous long-term series from the National Basic Climatic Network (NBCN): 29 climate stations and 46 precipitation stations, going back decades (monthly and yearly series hold the full history; daily data covers only roughly the last two years). Temperature, precipitation, sunshine, radiation, wind, pressure and the climate indicators (frost, summer, heat, ice and tropical-night counts, rain days).
| Parameter | Type | Required | Description |
|---|---|---|---|
station |
string (max 200) | one of the two | NBCN station name or abbreviation ("Zurich", "BAS", "Davos") |
coordinates |
{ lat, lon } |
one of the two | WGS84; takes precedence if both are given |
resolution |
daily | monthly | yearly |
no | Default monthly. Daily has temperature min/max/mean; monthly and yearly have the full summary |
start_date, end_date |
YYYY-MM-DD |
no | Inclusive filters. A daily request older than the ~2-year window returns no rows, with a note |
limit |
integer 1-365 | no | Maximum rows, default 30 |
Try: “How has precipitation changed in Basel over 50 years?” · “How many heat days did Lugano have last year?”
search
Section titled “search”Full-text search of the MeteoSwiss website.
| Parameter | Type | Required | Description |
|---|---|---|---|
query |
string (max 200) | yes | Search text |
language |
de | fr | it | en |
no | Default de |
contentType |
content | press-release | blog-article | publication |
no | Default content; use publication for official reports |
page |
integer 1-1000 | no | The upstream API always returns 10 results per page; page size can’t be changed, and pages may overlap |
sort |
relevance | date-desc | date-asc |
no | Default relevance. date-asc degrades relevance badly |
Try: “Find MeteoSwiss articles about thunderstorms” · “Search the MeteoSwiss publications on climate change”
Fetches a MeteoSwiss page and converts it to markdown or plain text. The id is a full page URL, normally one returned by search.
| Parameter | Type | Required | Description |
|---|---|---|---|
id |
string (max 2048) | yes | Page URL, e.g. https://www.meteoschweiz.admin.ch/klima/klimawandel/steigende-temperaturen.html |
format |
markdown | text |
no | Default markdown |
includeMetadata |
boolean | no | Default true |
Query strings, fragments and credentials are dropped from the URL before fetching. The converted page is cached and served
stale-while-revalidate, so a short MeteoSwiss outage does not break repeat requests for pages already seen. search has no such fallback.
Try: “Get the MeteoSwiss page on rising temperatures and summarise it.”
Prompts
Section titled “Prompts”The server also registers four conversation starters: wetterNordschweiz and wetterSchweiz (German), meteoSuisseRomande (French) and meteoTicino (Italian).
They are optional; clients that don’t surface MCP prompts simply don’t show them.