Swiss Open DataSAFE
Swiss open data MCP server — transport, weather, geodata, companies, etc,. Zero API keys.
Overview
From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.
Swiss open data for AI — zero config, zero API keys
[](https://www.npmjs.com/package/mcp-swiss) [](https://github.com/vikramgorla/mcp-swiss/actions/workflows/ci.yml) [](https://opensource.org/licenses/MIT) [](https://modelcontextprotocol.io) [](https://www.npmjs.com/package/mcp-swiss) [](https://github.com/vikramgorla/mcp-swiss) [](https://nodejs.org) [](https://github.com/vikramgorla/mcp-swiss/releases/latest/download/mcp-swiss.mcpb) [](https://github.com/vikramgorla/mcp-swiss/releases/latest/download/mcp-swiss.mcpb)
Install · Tools · Demo · Data Sources
mcp-swiss is a Model Context Protocol server that gives any AI assistant direct access to Swiss open data — trains, weather, rivers, maps, and companies.
79 tools. No API keys. No registration. No server to run. Just `npx mcp-swiss`.
🚆 Transport — SBB, PostBus, trams, live departures, journey planning 🌤️ Weather — MeteoSwiss live conditions + historical data 🌊 Hydrology — BAFU river & lake levels (great for Aare s
5fbf288220b3OBSERVED · 2026-10-10Connect
Built from this server's own package name, version and transport as found in its source — not copied from anyone's documentation, so it cannot drift against a page we do not control.
claude mcp add mcp-swiss -- npx -y [email protected]
Exposed tools (78)
75 read · 3 write · 0 destructive.
| Tool | Risk | Description |
|---|---|---|
compare_electricity_tariffs | read | Compare Swiss electricity tariffs across multiple municipalities side-by-side. Returns prices sorted from cheapest to most expensive. Useful for relocation decisions or cost analysis. |
geocode | read | Convert a Swiss address or place name to coordinates (swisstopo) |
get_air_quality | read | Get information about a Swiss NABEL air quality monitoring station, including location, environment type, Swiss legal limits (LRV), and a direct link to the BAFU live data portal. Use station codes from list_air_quality_stations (e.g. BER=Bern, ZUE=Zürich, LUG=Lugano). |
get_arrivals | read | Get live arrivals at a Swiss transport station |
get_avalanche_bulletin | read | Get the current Swiss avalanche danger bulletin from SLF (WSL Institute for Snow and Avalanche Research). |
get_committee_meetings | write | Get Swiss parliament committee/commission meeting schedule. Optionally filter by committee group ID. |
get_company | read | Get full details of a Swiss company by its ZEFIX internal ID (ehraid). Use search_companies first to find the ehraid — it is returned in company search results. |
get_connections | read | Get train/bus connections between two Swiss locations |
get_dams_by_canton | read | List all Swiss dams under federal supervision in a given canton. Returns up to 20 dams with basic details. Data source: Swiss Federal Office of Energy (SFOE) via swisstopo BGDI. |
get_departures | read | Get live departures from a Swiss transport station |
get_earthquake_details | read | Get full details for a specific seismic event by its SED (Swiss Seismological Service) event ID. |
get_electricity_tariff | read | Get Swiss electricity tariff (price in Rappen/kWh) for a municipality from ElCom (Swiss Federal Electricity Commission). Returns total price and price breakdown by component (energy, grid, taxes). Valid years: 2011–2026. |
get_exchange_rate | read | Get the current CHF exchange rate for a currency from the Swiss National Bank (SNB). Returns the latest monthly average rate and currency details. |
get_exchange_rate_history | read | Get historical CHF exchange rates for a currency from the Swiss National Bank (SNB). Returns monthly average rates with optional date filtering. Without date range, returns the most recent 90 months. |
get_municipality | read | Get information about a Swiss municipality by name |
get_nearby_stations | read | Find Swiss public transport stations near given coordinates |
get_parliament_members | read | List current or past Swiss Parliament members (National Council and Council of States). Filter by canton or party. |
get_parliament_votes | read | Get voting results for a specific parliamentary affair (Geschäft). Returns all recorded votes for the given affair ID from OpenParlData. |
get_parliamentary_documents | read | Get official documents for a parliamentary affair — reports, committee opinions, federal council statements. |
get_politician_interests | read | Get declared interests and mandates of a Swiss parliament member — board memberships, consulting roles, organizations. |
get_pollen_current | read | Get current hourly pollen concentrations at a MeteoSwiss pollen monitoring station. Returns the most recent hours of data for 7 pollen types: Alder, Birch, Hazel, Beech, Ash, Oak, and Grasses. Source: MeteoSwiss. |
get_pollen_daily | read | Get daily pollen concentration averages at a MeteoSwiss pollen monitoring station. Returns daily readings for 7 pollen types over the requested number of days. Source: MeteoSwiss. |
get_population | read | Get Swiss population data from the Federal Statistical Office (FSO/BFS). |
get_property_price_index | read | Get the Swiss Residential Property Price Index (SWRPI) — official BFS data. |
get_public_holidays | read | Get Swiss public holidays for a given year, optionally filtered by canton (e.g. ZH, BE, GE). Returns national and canton-specific holidays. |
get_recent_earthquakes | read | Get recent seismic events in and around Switzerland from the Swiss Seismological Service (SED) at ETH Zürich. |
get_rent_index | read | Get the Swiss Consumer Price Index (CPI/LIK), which tracks cost of living including |
get_school_holidays | read | Get Swiss school holidays for a given year, optionally filtered by canton. Returns holiday periods (start/end dates) by canton. |
get_session_schedule | write | Get upcoming and recent Swiss parliament sessions (Sessionen). Shows session names, dates and types. |
get_snow_conditions | read | Get current snow conditions across Switzerland from SLF (WSL Institute for Snow and Avalanche Research). |
get_snow_measurements | read | Get detailed snow and weather measurements for a specific SLF station. |
get_solar_potential | read | Get rooftop solar energy potential for a location in Switzerland |
get_statistic | read | Fetch details and resource links for a specific BFS/OFS dataset by its opendata.swiss identifier. |
get_swiss_news | read | Get the latest Swiss news headlines from SRF (Schweizer Radio und Fernsehen). Returns top news articles with title, description, link, and publication date. |
get_traffic_by_canton | read | List ASTRA traffic counting stations in a Swiss canton. Returns up to 20 stations with traffic data. |
get_traffic_count | read | Get traffic volume at an ASTRA counting station in Switzerland by location name (e.g. |
get_traffic_nearby | read | Find ASTRA traffic counting stations near a geographic coordinate in Switzerland. Returns nearby stations with traffic volume data. |
get_trail_closures | read | Get current Swiss hiking trail closures and detours from the official ASTRA/Schweizer Wanderwege dataset. |
get_trail_closures_nearby | read | Find Swiss hiking trail closures and detours near a given GPS coordinate. |
get_vote_details | read | |
get_voting_results | read | |
get_waste_calendar | read | Get a full monthly waste collection calendar for a Zurich city ZIP code. |
get_waste_collection | read | Get upcoming waste collection dates for a Zurich city ZIP code. Returns the next scheduled pickups sorted by date. |
get_water_history | read | Get historical river/lake water level data for a Swiss hydrological station |
get_water_level | read | Get current river or lake water level and temperature at a Swiss hydrological station |
get_weather | read | Get current weather conditions at a Swiss MeteoSwiss station (e.g. BER=Bern, ZUE=Zürich, LUG=Lugano) |
get_weather_history | read | Get historical weather data for a Swiss station |
identify_location | read | Identify geographic features and data layers at a specific Swiss location |
is_holiday_today | read | Check whether today is a Swiss public holiday, optionally for a specific canton. Returns the holiday name if it is one. |
list_air_quality_stations | read | List all official Swiss NABEL (Nationales Beobachtungsnetz für Luftfremdstoffe) air quality monitoring stations operated by BAFU/EMPA. Returns station codes, names, cantons, coordinates, and environment types. |
list_avalanche_regions | read | List all Swiss avalanche warning regions as defined by SLF/EAWS. |
list_cantons | read | List all Swiss cantons with their codes |
list_currencies | read | List all currencies available from the Swiss National Bank (SNB) for CHF exchange rate data. Returns currency codes, names, and regions. |
list_hydro_stations | read | List all available BAFU hydrological monitoring stations (rivers and lakes) in Switzerland |
list_legal_forms | read | List all Swiss company legal forms (AG, GmbH, etc.) |
list_pollen_stations | read | List all 16 MeteoSwiss automatic pollen monitoring stations in Switzerland. Returns station codes, names, cantons, altitude, and coordinates. Source: MeteoSwiss. |
list_postcodes_in_canton | read | List all Swiss postcodes (PLZ) in a given canton. Accepts 2-letter canton codes (ZH, BE, GR...) or full names. Source: Swiss federal geodata (swisstopo). |
list_snow_stations | read | List all SLF snow measurement stations in Switzerland (IMIS automatic stations and manual study plots). |
list_waste_types | read | List all supported waste collection types for Zurich city. |
list_weather_stations | read | List all available MeteoSwiss weather stations in Switzerland |
lookup_postcode | read | Look up a Swiss postcode (PLZ) to get locality name, canton, and coordinates. Source: Swiss federal geodata (swisstopo). |
reverse_geocode | read | Convert coordinates to a Swiss address (swisstopo) |
search_cantonal_affairs | read | Search political affairs across Swiss cantonal parliaments (Kantonsräte). Covers all 26 cantons via OpenParlData. |
search_companies | read | Search Swiss company registry (ZEFIX) by name, canton, or legal form |
search_companies_by_address | read | Search Swiss companies registered at a specific address or locality |
search_dams | read | Search Swiss dams and reservoirs under federal supervision by name. Searches both dam names and reservoir names. Returns dam type, height, crest length, reservoir volume, purpose, canton, and year built. Data source: Swiss Federal Office of Energy (SFOE) via swisstopo BGDI. |
search_earthquakes_by_location | read | Search for earthquakes near a geographic location using the Swiss Seismological Service (SED) FDSN API. |
search_municipality_energy | read | Search for Swiss municipality IDs needed for electricity tariff lookup. Returns BFS municipality numbers for use with get_electricity_tariff and compare_electricity_tariffs. |
search_parliament_business | read | Search Swiss Parliament political affairs — bills, motions, interpellations, postulates, questions, and initiatives. Uses OpenParlData.ch full-text search across the Federal Assembly (Bundesversammlung). |
search_parliament_speeches | read | Get debate speeches and contributions for a specific parliamentary affair. Returns speaker info and speech details. |
search_places | read | Search Swiss place names, localities, mountains, and geographic features |
search_postcode | read | Search Swiss postcodes by city or locality name. Returns all PLZ entries matching the name. Source: Swiss federal geodata (swisstopo). |
search_real_estate_data | read | Search opendata.swiss for Swiss real estate and housing datasets. |
search_stations | read | Search for Swiss public transport stations/stops by name or coordinates |
search_statistics | read | Search Swiss Federal Statistical Office (BFS/OFS/UST) datasets on opendata.swiss. |
search_swiss_news | read | Search Swiss news headlines from SRF by keyword. Searches across all available news categories and returns matching articles. |
search_votes | read | |
track_parcel | write | Generate a Swiss Post parcel tracking URL for a given tracking number. Swiss Post does not provide a public tracking API, so this returns the official tracking page URL to open in a browser. |
Trust audit
SAFEgrade B · trust 89/100 Nothing in the source contradicts what it says it does. Grade A is reserved for packages that have also passed the behavioural sandbox.
| Layer | What it checks | Result |
|---|---|---|
| L0 | Provenance & inventory | PASS |
| L1 | Static analysis of the code | PASS |
| L2 | Instruction surface (what it tells the agent) | PASS |
| L3 | Class-specific surface | PASS |
| L4 | Behavioural (sandbox) | SKIPPED |
What the source does
- Filesystem
- none-observed
- Network
- declared (5 observation(s))
- Shell
- none-observed
- Dependencies
- not all pinned
- Secrets in source
- none-found
Findings (12)
import { handleAirQuality } from '../../src/modules/airquality.js';import { handleAvalanche, avalancheTools, SWISS_AVALANCHE_REGIONS } from "../../src/modules/avalanche.js";import { handleCompanies } from '../../src/modules/companies.js';import { handleDams } from "../../src/modules/dams.js";import { handleEarthquakes } from '../../src/modules/earthquakes.js';@modelcontextprotocol/sdk, @eslint/js, @types/node, @vitest/coverage-v8, eslint, typescript, typescript-eslint, vitest
- **How:** Email [email protected] with pitch: "68 tools for Swiss open data, zero API keys, unique niche"
**Swiss open data for AI — zero config, zero API keys**
All official Swiss open data — no API keys required:
1. **Dev.to:** "I built an MCP server for Swiss open data — 68 tools, zero API keys"
2. **Hacker News (Show HN):** "Show HN: MCP-Swiss – Swiss open data for AI assistants (68 tools, zero API keys)"
- **How:** Email [email protected] with pitch: "68 tools for Swiss open data, zero API keys, unique niche"
Gates applied: no_behavioural_pass.
5fbf288220b3full audit observations/trust-audit/mcp-server/vikramgorla__swiss-open-data.json · Report an issue / request a re-scanAudit history
Every audit this server has had. A grade with a past is a grade somebody is still checking.
| Date | Source | Verdict | Grade | Score | Change |
|---|---|---|---|---|---|
| 2026-10-10 | 5fbf288220b3 | SAFE | B | 89 | first audit |
Questions
What is the Swiss Open Data MCP server?
Swiss open data MCP server — transport, weather, geodata, companies, etc,. Zero API keys.
What tools does Swiss Open Data expose?
78 in total: 75 read-only, 3 that write, and 0 that can delete or overwrite. Every one is listed on this page with its risk.
Is Swiss Open Data safe to connect to an agent?
The audit found nothing in the source that contradicts what it says it does, and graded it B (89/100). Grade A is held back for packages that have also passed a sandboxed behavioural run, which is why a clean server reads B.
What credentials does Swiss Open Data need?
No credential environment variables were found in its source, so it appears to need none.
How does Swiss Open Data run?
It speaks stdio, so it runs as a local process your client starts. It is published on npm as mcp-swiss at 0.8.0.
How current is this page?
The grade is for one exact copy of the source (5fbf288220b3), read on 2026-10-10. The repository is watched and re-audited when it changes.