
Meteoswiss Mcp
io.github.malkreidePublished by GitHub account malkreidev0.7.0Updated Oct 24, 2026
MeteoSwiss Open Data for weather, climate normals, warnings
Overview
Gives an assistant Swiss weather and climate data: station readings, ICON forecasts, climate normals and official warnings.
- What you can do
- Wraps MeteoSwiss open data in six read-only tools: meteo_stations lists SwissMetNet stations by canton, meteo_current returns 10-minute observations, meteo_forecast gives 1-16 day forecasts for a place or coordinates, meteo_school_check returns a green/yellow/red suitability rating for outdoor school events, meteo_climate_normals returns 1991-2020 monthly normals, and meteo_warnings reports active official warnings nationwide, by canton or by postcode.
- When to use it
- Useful when questions concern Swiss weather, forecasts, climate comparisons or official warnings, for example planning an outdoor event or checking conditions at a specific location. It is limited to Switzerland and its data sources.
- Requirements
- Runs locally over stdio, typically started with uvx meteoswiss-mcp, so a Python/uv runtime is needed. No accounts or API keys are required; the data sources are public. Network access to the listed upstream hosts is needed for live data. Optional HTTP mode adds environment variables such as MCP_TRANSPORT, MCP_HOST, MCP_PORT and MCP_API_KEY.
Installation
In SourceWeft
- Open Meteoswiss Mcp in the dashboard and add it to a workspace.
- Enable the server for the chats that should use its tools.
Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.
Other MCP clients
Follow the launch instructions in the repository.
README
🌦️ meteoswiss-mcp
[CI] [PyPI] [Python] [License: MIT] [swiss-public-data-mcp]
MCP server for Swiss weather and climate data from MeteoSwiss.
Connects AI models to the SwissMetNet measurement network (160+ stations, 10-minute interval), MeteoSwiss ICON-CH1/CH2-EPS forecasts and climate normals 1991–2020. Part of the swiss-public-data-mcp portfolio.
Demo query (anchor example)
[Demo: Claude asks about sports-day suitability → meteo_school_check tool call → structured weather traffic-light response]→ meteo_school_check(location="Zürich Oerlikon", activity="Sporttag") returns a 🟢/🟡/🔴 traffic light for each day of the coming week — straight from the MeteoSwiss ICON model.
Combined with swiss-environment-mcp:
→ meteo_current(station='REH') + env_nabel_current(station='ZUE') = a complete environmental picture.
→ More use cases by audience →
Tools (6)
Tool annotations (MCP hints)
All tools carry explicit MCP annotations — relevant for the client approval UI and for the LLM's safety decisions.
Read rules: all 6 tools are readOnly + non-destructive — the server fundamentally cannot write or delete anything. idempotentHint=False marks tools that return different values depending on when they are called.
MCP protocol version
→ Full roadmap & update strategy: docs/roadmap.md
Quick start
Claude Desktop
Claude Desktop (local development)
Cloud / Render.com (Streamable HTTP)
Configuration via ENV variables (the CLI flags --http / --port N still work as an override):
Docker / Render
The repo includes a production-ready multi-stage Dockerfile (non-root user, HEALTHCHECK) and a render.yaml blueprint:
On Render: "New → Blueprint" → select the repo. Defaults (plan starter, Frankfurt, single instance) are set in render.yaml.
Important: numInstances: 1 is set deliberately — sticky-session routing for multi-replica (audit SCALE-002/003) is not yet implemented.
Structured logging
All tool invocations, upstream failures and egress blocks are emitted as JSON events on stderr (stdio-transport safe). Example:
HTTP-mode security
MCP_HOSTdeliberately defaults to127.0.0.1so that--httpon a dev laptop is not accidentally exposed to the local subnet (audit finding SEC-016).- All outgoing HTTP calls (including redirect follows) are validated against an allow-list:
data.geo.admin.ch,api.open-meteo.com,geocoding-api.open-meteo.com,opendata.swiss. Other hosts and IP literals (in particular169.254.169.254, RFC1918) are rejected withEgressBlocked(SEC-004 / SEC-021). - CORS: disabled by default (same-origin only). Browser clients (e.g. claude.ai web) need
MCP_ALLOWED_ORIGINS=<csv>— theMcp-Session-Idheader is then automatically inAccess-Control-Expose-Headers(SDK-004). - API-key auth: disabled by default. In a production HTTP setup, always set
MCP_API_KEY=<random>— requests without a validX-API-KeyorAuthorization: Bearer …are rejected with 401 (SEC-009 / SEC-013)./healthstays open for container health probes.
Example: production HTTP stack
Example queries
School planning
Climate comparison
Infrastructure & environment
Architecture
Data sources
Safety & limits
Known limitations
Responsibility matrix — snow & precipitation (delineation vs. swiss-environment-mcp)
To avoid duplicating snow and precipitation data across the portfolio,
responsibilities are split as follows. meteoswiss-mcp owns atmospheric
precipitation and weather; swiss-environment-mcp (SLF domain) owns snow on the
ground and avalanche danger.
Rule: atmospheric precipitation (rain/snowfall as mm) plus weather,
forecast, warnings and climate normals belong to meteoswiss-mcp; snow on the
ground and avalanche danger belong to swiss-environment-mcp (SLF). The SLF
IMIS precipitation sensor is used there only as context for the snowpack and is
never exposed as a precipitation tool, so it does not duplicate MeteoSwiss.
¹ SLF/snow tools in swiss-environment-mcp are in preparation (Phase-1 live-probe
completed 2026-07-19, see that repo's docs/probe-slf.md); the demarcation is
fixed now so the two servers do not collide once implemented.
Portfolio synergies
MCP Protocol Version
This server speaks two protocol eras over the same endpoint. The client's first request on a connection decides which one applies; a later claim from the other era is refused.
Both revisions are pinned in
tests/test_protocol_version.py and asserted
against the installed SDK, so a Dependabot bump of mcp cannot move either one
silently. It is also measured on the wire:
tests/test_spec_2026.py sends real requests of
both eras through the same ASGI stack main() hands to uvicorn — a
2026-07-28 tool call with no handshake and no session, and an initialize
that is capped at 2025-11-25.
No deprecated capability. 2026-07-28 deprecates logging, sampling and
roots (SEP-2577). The server calls none of them: in-flight status goes out as
notifications/progress (reaching any client that sends a progressToken, in
both eras), and failures are stated in the tool result itself. A test keeps
the source free of ctx.info/ctx.warning and friends.
Note that the SDK's LATEST_PROTOCOL_VERSION is an alias for the modern
era, not for the handshake era — pinning against it alone would leave the era
that current clients actually negotiate free to drift.
Update policy. When the gate fails, do not edit the constant blindly: read
the spec changelog between the two revisions, verify the server still behaves,
then move the constant, this section, README.de.md and
CHANGELOG.md together.
Testing
Development
MCP Inspector (local test)
Contributing
See the contributing guidelines (Deutsch).
Security
See the security policy (Deutsch) for the security posture and how to report a vulnerability.
License
MIT License – see LICENSE.
Source data: MeteoSwiss Open Government Data (CC BY 4.0). When using the data, cite: Source: MeteoSwiss.
Author
Hayal Oezkan · github.com/malkreide
Related servers
[swiss-environment-mcp] [zurich-opendata-mcp] [swiss-transport-mcp]
Installation
Run via uv's uvx — no clone or manual install needed. Add to your MCP client config (mcpServers for Claude Desktop, Cursor and Windsurf; use a top-level servers key for VS Code in .vscode/mcp.json):
Source: README.md at commit 19aca71
Tools
0Version history
2- v0.7.0LatestSep 27, 2026
- v0.6.1Sep 16, 2026
Score
50% 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 days25 pts
Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.
- Auth declared10 pts
Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.
- Tools listed15 pts
Answer tools/list without a credential, or ship a package that starts in a sandbox without one.
- DescriptionRequired15 pts
- Logo10 pts
- Documentation15 pts
- License10 pts