MeteoSwiss MCP Server

io.github.eins78Published by GitHub account eins78v2.0.2Updated Oct 26, 2026

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

VerifiedStreamable HTTPWeb executableLocation & LifestyleWeb Search & Scraping

Overview

AI-generated overview

MeteoSwiss weather MCP server giving assistants Swiss forecasts, live station measurements, pollen data, climate series and website search.

What you can do
  • Look up multi-day forecasts for Swiss locations by postal code, station or place name
  • Read real-time measurements from around 300 automatic weather stations
  • Search and browse the station network by name, canton or coordinates
  • Retrieve current pollen concentrations for seven measured species
  • Pull decades-long climate series and indicators from the national climate network
  • Search MeteoSwiss website content in German, French, Italian and English and fetch pages as markdown or text
When to use it
Useful when you want an assistant to answer questions about Swiss weather, forecasts, live conditions, pollen or long-term climate data, in any of the four supported languages, without building your own data pipeline.
Requirements
Either the hosted remote endpoint (no setup) or a local instance. The npm package runs on Node.js; self-hosting via Docker or from source needs Node.js v22+ and pnpm. No accounts, API keys or headers are declared. Self-hosted instances are configured with variables such as PORT, PUBLIC_URL, BIND_ADDRESS, MAX_SESSIONS and TRUST_PROXY.
Before you install
The server is read-only: it retrieves public weather and website data and does not change anything. Requests go to MeteoSwiss Open Data and the MeteoSwiss website, so queries are visible to those upstream services. When self-hosting, set TRUST_PROXY correctly, since a wrong value lets clients spoof their IP past the rate limit.

Installation

In SourceWeft

  1. Open MeteoSwiss MCP Server in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.

Use with an agent

Paste this prompt into Claude Code, Codex, Cursor or another agent — or into SourceWeft chat. The agent reads this server's install guide, shows you its publisher, endpoint and sign-in, and adds it to your client once you agree. Keys never go into a command.

Read https://sourceweft.com/mcp/io.github.eins78%2Fmeteoswiss-mcp/install.md and connect the MCP server it describes to my client. Before changing any config, show me its publisher, endpoint and sign-in method and wait for my OK. Never put an API key in a command or in a file I would commit; ask me where it should come from.

Read the install guide the agent follows

Other MCP clients

Add this to your client's mcpServers config.

{
  "mcpServers": {
    "meteoswiss": {
      "type": "http",
      "url": "https://meteoswiss-mcp.ars.is/mcp"
    }
  }
}

README

🌦️ MeteoSwiss MCP Server

[npm version] [License: CC0-1.0] [Node.js >= 22] [Cursor Directory]

MCP server for MeteoSwiss weather data — powered by MeteoSwiss Open Data, the same data behind the MeteoSwiss app and website.

This package is the server half of the repo's skill vs. MCP case study — the same data is also available as a no-infrastructure agent skill.

meteoswiss-mcp.ars.is — try it now, no setup needed.

📖 Documentation — using the tools, running your own instance (full environment variable reference), and development.

  • Multi-day forecasts for ~6000 Swiss locations (postal codes, stations, place names)
  • Real-time measurements from ~300 stations (~160 full weather + ~140 precipitation-only), updated every 10 minutes
  • Station discovery by name, canton, or GPS coordinates
  • Pollen monitoring from ~15 stations across Switzerland
  • Climate series from the National Basic Climatic Network (NBCN), going back decades
  • MeteoSwiss website search and content retrieval

Use the Hosted Service

No installation required — the server is hosted at https://meteoswiss-mcp.ars.is.

Claude Code

bash
claude mcp add --transport http meteoswiss https://meteoswiss-mcp.ars.is/mcp

Claude Desktop

Add to your configuration file (~/Library/Application Support/Claude/claude_desktop_config.json on macOS):

json
{  "mcpServers": {    "meteoswiss": {      "command": "npx",      "args": ["mcp-remote", "https://meteoswiss-mcp.ars.is/mcp"]    }  }}

Cursor

Install from the Cursor Directory, or add manually via Settings → MCP → Add Server → paste https://meteoswiss-mcp.ars.is/mcp.

Claude.ai

Go to Settings → Integrations → Add MCP Server → paste https://meteoswiss-mcp.ars.is/mcp.

Example Questions

  • "What's the weather forecast for Zurich this week?"
  • "Wie wird das Wetter in Bern morgen?"
  • "Quelle est la météo à Genève?"
  • "Che tempo fa a Lugano?"
  • "How windy is it at Jungfraujoch right now?"
  • "Show me pollen data for Zurich"

Available Tools

ToolDescription
meteoswissLocalForecastMulti-day forecasts for any Swiss location by postal code, station, or place name
meteoswissCurrentWeatherReal-time measurements from automatic weather stations (temperature, wind, humidity, pressure)
meteoswissStationsSearch and browse the MeteoSwiss station network by name, canton, or coordinates
meteoswissPollenDataCurrent pollen concentration data from monitoring stations
meteoswissClimateDataNBCN climate series — temperature, precipitation, sunshine, and climate indicators going back decades
searchSearch MeteoSwiss website content (DE, FR, IT, EN)
fetchFetch full content from MeteoSwiss pages in markdown, text, or HTML

Prompts

Pre-configured prompts for common weather queries:

PromptLanguageDescription
wetterNordschweizGermanForecast and current weather for Northern Switzerland
wetterSchweizGermanWeather for any Swiss location
meteoSuisseRomandeFrenchForecast and current weather for Western Switzerland
meteoTicinoItalianForecast and current weather for Southern Switzerland

Self-Hosting

Docker

bash
docker run -p 3000:3000 ghcr.io/eins78/meteoswiss-mcp:latest

With custom URL:

bash
docker run -p 3000:3000 -e PUBLIC_URL=https://your-domain.com ghcr.io/eins78/meteoswiss-mcp:latest

Docker Compose

bash
docker compose up

From Source

bash
git clone https://github.com/eins78/meteoswiss-llm-tools.gitcd meteoswiss-llm-tools/packages/meteoswiss-mcppnpm installpnpm buildpnpm start

The server will be available at http://localhost:3000. MCP endpoint: http://localhost:3000/mcp.

Local MCP Configuration

json
{  "mcpServers": {    "meteoswiss-local": {      "command": "npx",      "args": ["mcp-remote", "http://localhost:3000/mcp"]    }  }}

Environment Variables

VariableDefaultDescription
PORT3000Server port
PUBLIC_URL—Full public URL for URL generation (e.g. https://meteoswiss-mcp.ars.is)
USE_TEST_FIXTURESfalseUse local test data instead of live API
BIND_ADDRESS0.0.0.0Interface to bind to
MAX_SESSIONS100Maximum concurrent sessions
MAX_SESSIONS_PER_CLIENT10Maximum concurrent sessions per client IP (as seen through TRUST_PROXY); further initialize requests get 429
SESSION_TIMEOUT_MS300000Session timeout in milliseconds
TRUST_PROXY0Number of reverse-proxy hops to trust for the client IP (X-Forwarded-For). Set 1 behind one proxy such as Caddy; leave 0 when clients reach the server directly, or they can spoof their IP past the rate limit
DEBUG—Debug namespaces (e.g. mcp:*)

This table lists the commonly used variables. The configuration reference documents all of them, including rate limiting, the data cache and the content cache.


Development

Prerequisites

  • Node.js v22+ (nvm recommended)
  • pnpm

Setup

bash
nvm usepnpm install

Commands

CommandDescription
pnpm devStart with hot reloading
pnpm startStart the server
pnpm buildBuild TypeScript
pnpm testRun tests
pnpm run lintType checking + ESLint
pnpm run fixAuto-fix lint errors
pnpm run ciFull CI (lint + build + test)
pnpm run dev:inspectTest with MCP Inspector

Project Structure

src/  index.ts              # Entry point  server.ts             # MCP server (factory pattern)  data/                 # Data access and transformation  schemas/              # Zod schemas for validation  tools/                # MCP tool implementations  support/              # Logging, validation, HTTP, sessions  views/homepage/       # Server homepage contenttest/  integration/          # Integration tests for all tools  __fixtures__/         # Test data

Debugging

Enable debug output with the DEBUG environment variable:

bash
DEBUG=mcp:* pnpm dev          # All debug outputDEBUG=mcp:tools pnpm dev      # Tool execution onlyDEBUG=mcp:transport pnpm dev  # Transport layer only

See docs/debugging-guide.md for more.

Contributing

Contributions are welcome! Run pnpm run fix && pnpm run ci before committing.

See docs/releasing.md for the release process.

License

CC0-1.0 — public domain

Source: packages/meteoswiss-mcp/README.md at commit 3d96194

Tools

7

fetch

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.

ParametersidrequiredformatincludeMetadata

meteoswissLocalForecast

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-cura

Parametersdayslocationrequired

meteoswissCurrentWeather

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.

Parametersstationcoordinates

meteoswissStations

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.

Parameterslimitcantonsearch

meteoswissPollenData

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.

Parametersstation

meteoswissClimateData

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.

Parameterslimitstationend_dateresolutionstart_datecoordinates

Version history

1
  1. v2.0.2LatestSep 16, 2026

Score

100% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 daysRequired25 pts
  • Auth declaredRequired10 pts
  • Tools listedRequired15 pts
  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts