Atlas / MCP servers / vikramgorla / Swiss Open Data

Swiss Open DataSAFE

mcp/vikramgorla/swiss-open-data

Swiss open data MCP server — transport, weather, geodata, companies, etc,. Zero API keys.

Verdict
SAFE
Grade
B
Trust score
89 /100
Exposed tools
78 75r · 3w · 0d
Transport
stdio
License
MIT
Stars
23
01

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
Read from source at commit 5fbf288220b3OBSERVED · 2026-10-10
02

Connect

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-code (npm)
claude mcp add mcp-swiss -- npx -y [email protected]
03

Exposed tools (78)

75 read · 3 write · 0 destructive.

ToolRiskDescription
compare_electricity_tariffsreadCompare Swiss electricity tariffs across multiple municipalities side-by-side. Returns prices sorted from cheapest to most expensive. Useful for relocation decisions or cost analysis.
geocodereadConvert a Swiss address or place name to coordinates (swisstopo)
get_air_qualityreadGet 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_arrivalsreadGet live arrivals at a Swiss transport station
get_avalanche_bulletinreadGet the current Swiss avalanche danger bulletin from SLF (WSL Institute for Snow and Avalanche Research).
get_committee_meetingswriteGet Swiss parliament committee/commission meeting schedule. Optionally filter by committee group ID.
get_companyreadGet 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_connectionsreadGet train/bus connections between two Swiss locations
get_dams_by_cantonreadList 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_departuresreadGet live departures from a Swiss transport station
get_earthquake_detailsreadGet full details for a specific seismic event by its SED (Swiss Seismological Service) event ID.
get_electricity_tariffreadGet 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_ratereadGet 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_historyreadGet 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_municipalityreadGet information about a Swiss municipality by name
get_nearby_stationsreadFind Swiss public transport stations near given coordinates
get_parliament_membersreadList current or past Swiss Parliament members (National Council and Council of States). Filter by canton or party.
get_parliament_votesreadGet voting results for a specific parliamentary affair (Geschäft). Returns all recorded votes for the given affair ID from OpenParlData.
get_parliamentary_documentsreadGet official documents for a parliamentary affair — reports, committee opinions, federal council statements.
get_politician_interestsreadGet declared interests and mandates of a Swiss parliament member — board memberships, consulting roles, organizations.
get_pollen_currentreadGet 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_dailyreadGet 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_populationreadGet Swiss population data from the Federal Statistical Office (FSO/BFS).
get_property_price_indexreadGet the Swiss Residential Property Price Index (SWRPI) — official BFS data.
get_public_holidaysreadGet Swiss public holidays for a given year, optionally filtered by canton (e.g. ZH, BE, GE). Returns national and canton-specific holidays.
get_recent_earthquakesreadGet recent seismic events in and around Switzerland from the Swiss Seismological Service (SED) at ETH Zürich.
get_rent_indexreadGet the Swiss Consumer Price Index (CPI/LIK), which tracks cost of living including
get_school_holidaysreadGet Swiss school holidays for a given year, optionally filtered by canton. Returns holiday periods (start/end dates) by canton.
get_session_schedulewriteGet upcoming and recent Swiss parliament sessions (Sessionen). Shows session names, dates and types.
get_snow_conditionsreadGet current snow conditions across Switzerland from SLF (WSL Institute for Snow and Avalanche Research).
get_snow_measurementsreadGet detailed snow and weather measurements for a specific SLF station.
get_solar_potentialreadGet rooftop solar energy potential for a location in Switzerland
get_statisticreadFetch details and resource links for a specific BFS/OFS dataset by its opendata.swiss identifier.
get_swiss_newsreadGet 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_cantonreadList ASTRA traffic counting stations in a Swiss canton. Returns up to 20 stations with traffic data.
get_traffic_countreadGet traffic volume at an ASTRA counting station in Switzerland by location name (e.g.
get_traffic_nearbyreadFind ASTRA traffic counting stations near a geographic coordinate in Switzerland. Returns nearby stations with traffic volume data.
get_trail_closuresreadGet current Swiss hiking trail closures and detours from the official ASTRA/Schweizer Wanderwege dataset.
get_trail_closures_nearbyreadFind Swiss hiking trail closures and detours near a given GPS coordinate.
get_vote_detailsread
get_voting_resultsread
get_waste_calendarreadGet a full monthly waste collection calendar for a Zurich city ZIP code.
get_waste_collectionreadGet upcoming waste collection dates for a Zurich city ZIP code. Returns the next scheduled pickups sorted by date.
get_water_historyreadGet historical river/lake water level data for a Swiss hydrological station
get_water_levelreadGet current river or lake water level and temperature at a Swiss hydrological station
get_weatherreadGet current weather conditions at a Swiss MeteoSwiss station (e.g. BER=Bern, ZUE=Zürich, LUG=Lugano)
get_weather_historyreadGet historical weather data for a Swiss station
identify_locationreadIdentify geographic features and data layers at a specific Swiss location
is_holiday_todayreadCheck whether today is a Swiss public holiday, optionally for a specific canton. Returns the holiday name if it is one.
list_air_quality_stationsreadList 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_regionsreadList all Swiss avalanche warning regions as defined by SLF/EAWS.
list_cantonsreadList all Swiss cantons with their codes
list_currenciesreadList all currencies available from the Swiss National Bank (SNB) for CHF exchange rate data. Returns currency codes, names, and regions.
list_hydro_stationsreadList all available BAFU hydrological monitoring stations (rivers and lakes) in Switzerland
list_legal_formsreadList all Swiss company legal forms (AG, GmbH, etc.)
list_pollen_stationsreadList all 16 MeteoSwiss automatic pollen monitoring stations in Switzerland. Returns station codes, names, cantons, altitude, and coordinates. Source: MeteoSwiss.
list_postcodes_in_cantonreadList 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_stationsreadList all SLF snow measurement stations in Switzerland (IMIS automatic stations and manual study plots).
list_waste_typesreadList all supported waste collection types for Zurich city.
list_weather_stationsreadList all available MeteoSwiss weather stations in Switzerland
lookup_postcodereadLook up a Swiss postcode (PLZ) to get locality name, canton, and coordinates. Source: Swiss federal geodata (swisstopo).
reverse_geocodereadConvert coordinates to a Swiss address (swisstopo)
search_cantonal_affairsreadSearch political affairs across Swiss cantonal parliaments (Kantonsräte). Covers all 26 cantons via OpenParlData.
search_companiesreadSearch Swiss company registry (ZEFIX) by name, canton, or legal form
search_companies_by_addressreadSearch Swiss companies registered at a specific address or locality
search_damsreadSearch 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_locationreadSearch for earthquakes near a geographic location using the Swiss Seismological Service (SED) FDSN API.
search_municipality_energyreadSearch 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_businessreadSearch Swiss Parliament political affairs — bills, motions, interpellations, postulates, questions, and initiatives. Uses OpenParlData.ch full-text search across the Federal Assembly (Bundesversammlung).
search_parliament_speechesreadGet debate speeches and contributions for a specific parliamentary affair. Returns speaker info and speech details.
search_placesreadSearch Swiss place names, localities, mountains, and geographic features
search_postcodereadSearch Swiss postcodes by city or locality name. Returns all PLZ entries matching the name. Source: Swiss federal geodata (swisstopo).
search_real_estate_datareadSearch opendata.swiss for Swiss real estate and housing datasets.
search_stationsreadSearch for Swiss public transport stations/stops by name or coordinates
search_statisticsreadSearch Swiss Federal Statistical Office (BFS/OFS/UST) datasets on opendata.swiss.
search_swiss_newsreadSearch Swiss news headlines from SRF by keyword. Searches across all available news categories and returns matching articles.
search_votesread
track_parcelwriteGenerate 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.
04

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.

LayerWhat it checksResult
L0Provenance & inventoryPASS
L1Static analysis of the codePASS
L2Instruction surface (what it tells the agent)PASS
L3Class-specific surfacePASS
L4Behavioural (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)

LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
tests/integration/airquality.integration.test.ts:3
import { handleAirQuality } from '../../src/modules/airquality.js';
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
tests/integration/avalanche.integration.test.ts:11
import { handleAvalanche, avalancheTools, SWISS_AVALANCHE_REGIONS } from "../../src/modules/avalanche.js";
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
tests/integration/companies.integration.test.ts:3
import { handleCompanies } from '../../src/modules/companies.js';
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
tests/integration/dams.integration.test.ts:3
import { handleDams } from "../../src/modules/dams.js";
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
tests/integration/earthquakes.integration.test.ts:3
import { handleEarthquakes } from '../../src/modules/earthquakes.js';
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
package.json
@modelcontextprotocol/sdk, @eslint/js, @types/node, @vitest/coverage-v8, eslint, typescript, typescript-eslint, vitest
Why it matters. 8 dependency range(s) float
Fix. pin exact versions or ship a lockfile
LOWPrompt injection · prompt.transfer_instruction · CWE-94, CWE-1427
docs/DISTRIBUTION-RESEARCH.md:761
- **How:** Email [email protected] with pitch: "68 tools for Swiss open data, zero API keys, unique niche"
Why it matters. an instruction to move sensitive data to an outside destination
Fix. remove; a skill never needs the user's secrets off the machine
INFOPrompt injection · prompt.credential_read · CWE-94, CWE-1427
README.md:7
**Swiss open data for AI — zero config, zero API keys**
Why it matters. asks the agent to read credentials
INFOPrompt injection · prompt.credential_read · CWE-94, CWE-1427
README.md:547
All official Swiss open data — no API keys required:
Why it matters. asks the agent to read credentials
INFOPrompt injection · prompt.credential_read · CWE-94, CWE-1427
docs/DISTRIBUTION-RESEARCH.md:653
1. **Dev.to:** "I built an MCP server for Swiss open data — 68 tools, zero API keys"
Why it matters. asks the agent to read credentials
INFOPrompt injection · prompt.credential_read · CWE-94, CWE-1427
docs/DISTRIBUTION-RESEARCH.md:654
2. **Hacker News (Show HN):** "Show HN: MCP-Swiss – Swiss open data for AI assistants (68 tools, zero API keys)"
Why it matters. asks the agent to read credentials
INFOPrompt injection · prompt.credential_read · CWE-94, CWE-1427
docs/DISTRIBUTION-RESEARCH.md:761
- **How:** Email [email protected] with pitch: "68 tools for Swiss open data, zero API keys, unique niche"
Why it matters. asks the agent to read credentials

Gates applied: no_behavioural_pass.

Audited 2026-10-10 · audit v0.4.1 · source sha 5fbf288220b3full audit observations/trust-audit/mcp-server/vikramgorla__swiss-open-data.json · Report an issue / request a re-scan
05

Audit history

Every audit this server has had. A grade with a past is a grade somebody is still checking.

DateSourceVerdictGradeScoreChange
2026-10-105fbf288220b3SAFEB89first audit
06

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.

Advertisement