Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

Switzerland MCP 🇨🇭

NPM · MCP-SWISS

Swiss open data MCP server. 94 tools, zero API keys. Transport, weather, geodata, catalogue.

Available components

+8 this week 94 Trust /100

Last scanned (12 hours ago)

Scores higher than 97% of npm servers

Category Maps and Location

Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →

Supply Chain Security98
  • No malware found by supply-chain analysis.Pass
  • No known CVEs affecting this package version or its production dependencies.Pass
  • No install/post-install scripts declared.Pass
  • 30 of 92 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency100
  • Source repository is publicly reachable at the declared URL. View diagnostics → Pass
  • Cryptographically verified build provenance (signed, bound to vikramgorla/mcp-swiss). View diagnostics → Pass
  • Clear OSI-approved license (MIT).Pass
  • Actively maintained (last published 2 days ago).Pass
  • Publishes a security disclosure policy (SECURITY.md).Pass
Schema Quality & AI Usability71
  • AI-judged instruction clarity (good).Pass
  • Tool/resource definitions use about 6624 tokens (~70/item across 94 items; 94 tools + 0 resources), lean.Pass
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management98
  • Stability check failed: the tool surface changed between 0.7.1 and 0.9.0: 1 tool removals, 1 breaking changes, 19 additions. See how to fix → Fail
Tool Coverage98
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 94% of tool parameters carry a description.Partial
Tool Safety100
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • We read all 94 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
  • An AI judge read all 94 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
What we tested

Checks we ran (16)

  • Malware scan
  • Known CVEs
  • Install scripts
  • Dependency health
  • Source repository
  • Provenance
  • License
  • Maintenance
  • Security disclosure
  • Schema quality
  • Stability
  • Tool coverage
  • Injection markers
  • Destructive annotations
  • Judged manipulation
  • MCP protocol

Does not apply to this package (2)

  • Endpoint SecurityScored on hosted endpoints only. A package has no live endpoint of its own for us to probe.
  • Transport & ReachabilityScored on hosted endpoints only. A package has no live endpoint of its own for us to probe.

The score does not measure everything. What the score does not measure →

Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 5 Nov 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 95 to 98.

  • 3 Nov 26 −3
    • Stability: pass → fail ▼ security
    • Tool coverage: 100% → 94% ▼ functional
    • Schema quality: 89 → 70 ▲ functional
    • Schema quality: excellent → good functional
    • Package version: 0.8.2 → 0.9.0 functional
  • 2 Nov 26 +47
    • Injection markers: unverified → pass ▲ security
    • Stability: unverified → pass ▲ security
    • Tool coverage: unverified → 100 ▲ functional
    • MCP protocol: unverified → pass ▲ functional
    • Package version: 0.8.0 → 0.8.2 functional
  • 1 Nov 26 −32
    • Stability: pass → unverified ▼ security
    • Tool safety: pass → unverified ▼ security
    • Malware scan: unverified → pass ▲ security
    • Capabilities: pass → unverified ▼ functional
    • Tool coverage: 100 → unverified ▼ functional
    • Package version: 0.7.1 → 0.8.2 functional
  • 31 Oct 26 −5
    • Malware scan: pass → unverified ▼ security
    • Provenance: fail → pass ▲ security
    • The attested source repository moved: vikramgorla/mcp-swiss security
    • Package version: 0.7.1 → 0.8.0 functional
  • 28 Oct 26 0
    • Stability: 0.97 → pass security
  • 27 Oct 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 93 to 97. That category is still filling its 30-day observation window: 28 days of observed history at the previous scan, 29 at this one. The score rises as the window fills, whether or not the server changes.

  • 26 Oct 26 −1
    • Stability: pass → 0.93 functional
Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 5 Nov 2026 · Analysed npm/mcp-swiss@0.9.0

Provenance Verified

A signed build attestation was found and verified, binding this exact artifact to the source repository it claims to come from.

Result Verified
Ecosystem npm
Reason Verified
Discovered via Registry attestation endpoint
Source repo vikramgorla/mcp-swiss
Certificate issuer https://token.actions.githubusercontent.com
Certificate SAN https://github.com/vikramgorla/mcp-swiss/.github/workflows/release.yml@refs/heads/main
Rekor log index 3657811132
Predicate type SLSA build provenance https://slsa.dev/provenance/v1
Subject digest sha512:bf4c2ee13905c79d2bc3c963a4eb7d6cb5705fce5df24ef81594cd0f519740a39b31ab909af53dafc6468f20a21f87e1783eeae8095b6f707035d6f60

Background: How many MCP packages publish verified provenance →

Dependencies 92 packages
Packages resolved 92
Stale 30
Tree resolution Complete

Background: SBOMs and build attestations, explained →

MCP tools · 94 exposed · ~6,624 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
buildings_near ~73

GWR buildings nearest a WGS84 point (small radius), with EGIDs

NameTypeReqDescription
latnumberyesLatitude (WGS84)
limitnumber–max 50
lonnumberyesLongitude (WGS84)
radiusnumber–Metres, max 250

No output schema declared.

No examples provided.

compare_electricity_tariffs ~63

Compare electricity tariffs across 2–20 municipalities

NameTypeReqDescription
categorystring––
municipalitiesarrayyesBFS numbers, e.g. ["261", "351"]
yearstring–2011 onward, default: current year

No output schema declared.

No examples provided.

find_map_features ~182

Find geo.admin features on one ech MapServer layer by an attribute value. Identify a point first if you need the attribute names. Example: layer ch.swisstopo.swissboundaries3d-gemeinde-flaeche.fill, search_field gemname, search_text Bern.

NameTypeReqDescription
containsboolean–When true (default), match values that contain the text. When false, match the whole value.
include_historicalboolean–Keep historical versions when a layer has an is_current_jahr attribute (default false).
layerstringyesLayer id from search_map_layers.
limitnumber–Maximum features (default 10, max 25).
search_fieldstringyesAttribute name to search (e.g. gemname, name, label).
search_textstringyesValue to search for.

No output schema declared.

No examples provided.

geocode ~30

Address or place name to WGS84 coordinates (swisstopo)

NameTypeReqDescription
addressstringyes–

No output schema declared.

No examples provided.

get_air_quality ~63

NABEL station info: location, environment type, legal limits (LRV) and a link to BAFU live data (no measurements returned)

NameTypeReqDescription
stationstringyesStation code, e.g. BER, ZUE, LUG, BAS, DAV

No output schema declared.

No examples provided.

get_arrivals ~53

Live arrivals at a station

NameTypeReqDescription
datetimestring–YYYY-MM-DDTHH:MM, default: now
limitnumber–default: 10
stationstringyesStation name

No output schema declared.

No examples provided.

get_avalanche_bulletin ~155

Live SLF avalanche bulletin: danger level (1-5), avalanche problems with aspect and elevation, validity and advice text, for one warning region, a coordinate, or all of Switzerland. Outside the winter season it reports that no bulletin is in force

NameTypeReqDescription
datestring–YYYY-MM-DD or ISO timestamp for an archived bulletin; omit for the current one
languagestring––
latnumber–WGS84 latitude, with lon; alternative to region
lonnumber–WGS84 longitude, with lat
regionstring–EAWS region id (e.g. CH-7114) or name, see list_avalanche_regions

No output schema declared.

No examples provided.

get_building ~82

Full GWR record of one building by EGID: construction, floors, areas, heating/hot-water system and energy source, parcel (EGRID), entrances, dwellings

NameTypeReqDescription
egidnumberyesEGID, e.g. 2119257
max_dwellingsnumber–max 500; 0 = summary only

No output schema declared.

No examples provided.

get_committee_meetings ~43

Federal parliament committee meeting schedule

NameTypeReqDescription
group_idnumber–Committee group ID (omit for all)
limitnumber–max 20

No output schema declared.

No examples provided.

get_company ~37

Full company details by ZEFIX ehraid (from search_companies)

NameTypeReqDescription
ehraidnumberyese.g. 119283

No output schema declared.

No examples provided.

get_connections ~94

Train/bus connections between two locations

NameTypeReqDescription
datestring–YYYY-MM-DD, default: today
fromstringyesStation or address
isArrivalTimeboolean–Treat time as arrival time
limitnumber–1-16, default: 4
timestring–HH:MM, default: now
tostringyesStation or address

No output schema declared.

No examples provided.

get_dam_details ~37

Full technical details of one dam by name

NameTypeReqDescription
namestringyese.g. Grande Dixence (see search_dams)

No output schema declared.

No examples provided.

get_dams_by_canton ~49

Federally supervised dams in a canton

NameTypeReqDescription
cantonstringyesCanton code, e.g. VS
limitnumber–Dams to return (1-100)

No output schema declared.

No examples provided.

get_departures ~53

Live departures from a station

NameTypeReqDescription
datetimestring–YYYY-MM-DDTHH:MM, default: now
limitnumber–default: 10
stationstringyesStation name

No output schema declared.

No examples provided.

get_earthquake_details ~58

Full details of one seismic event by SED event ID

NameTypeReqDescription
event_idstringyesFrom the other earthquake tools, e.g. smi:ch.ethz.sed/sc25a/Event/2026errxzt

No output schema declared.

No examples provided.

get_electricity_tariff ~109

ElCom electricity tariff (Rp./kWh) for a municipality, with component breakdown

NameTypeReqDescription
categorystring–H1–H8 household (H4 ≈ 4500 kWh/yr), C1–C7 commercial
municipalitystringyesBFS number, e.g. 261 (Zürich), 351 (Bern); see search_municipality_energy
yearstring–2011 onward, default: current year

No output schema declared.

No examples provided.

get_exchange_rate ~38

Latest SNB monthly-average CHF exchange rate for a currency

NameTypeReqDescription
currencystringyesISO 4217 code, e.g. EUR

No output schema declared.

No examples provided.

get_exchange_rate_history ~61

Historical SNB monthly-average CHF exchange rates (default: last 90 months)

NameTypeReqDescription
currencystringyesISO 4217 code, e.g. EUR
fromstring–YYYY-MM
tostring–YYYY-MM

No output schema declared.

No examples provided.

get_municipality ~22

Municipality info by name

NameTypeReqDescription
namestringyes–

No output schema declared.

No examples provided.

get_nearby_stations ~60

Stations near coordinates

NameTypeReqDescription
distancenumber–Max distance (m)
limitnumber–Max results
xnumberyesLatitude (WGS84)
ynumberyesLongitude (WGS84)

No output schema declared.

No examples provided.

get_ogd_history ~259

Get historical MeteoSwiss OGD measurements for one station and date range by parsing the STAC CSV assets. Daily data defaults to the smaller recent/historical files. Hourly history is limited to 14 days because decade files are large. Times are Swiss local time (no offset).

NameTypeReqDescription
collectionstring–OGD collection alias (default smn). Aliases: smn, smn-precip, smn-tower, nime, nbcn, nbcn-precip, obs, phenology, tot. A full STAC id such as ch.meteoschweiz.ogd-smn is also accepted.
end_datestringyesLast day YYYY-MM-DD (inclusive).
granularitystring–Resolution: t, h, d (daily, default), m, or y.
limitnumber–Maximum rows (default 31, max 100). When truncated, the latest rows in the range are kept.
parametersstring–Comma-separated parameter codes, or omit for the common meteorological columns.
start_datestringyesFirst day YYYY-MM-DD (inclusive).
stationstringyesStation abbreviation (e.g. BER).

No output schema declared.

No examples provided.

get_ogd_recent ~275

Get the latest MeteoSwiss OGD measurements for one station by reading the STAC CSV asset (10-minute/hourly 'now' file when available, otherwise the recent file). Times are Swiss local time. Use list_ogd_stations for codes such as BER, SMA, LUG.

NameTypeReqDescription
collectionstring–OGD collection alias (default smn). Aliases: smn, smn-precip, smn-tower, nime, nbcn, nbcn-precip, obs, phenology, tot. A full STAC id such as ch.meteoschweiz.ogd-smn is also accepted.
granularitystring–Resolution: t (10-minute), h (hourly, default), d (daily), m (monthly), y (yearly).
limitnumber–Number of most recent rows (default 24, max 168).
parametersstring–Comma-separated parameter codes (e.g. tre200h0,rre150h0). Omit for the common temperature, humidity, precipitation, wind, pressure, sunshine, and radiation columns. Use 'all' for the first data colum…
stationstringyesStation abbreviation (e.g. BER, SMA, LUG, BAS).

No output schema declared.

No examples provided.

get_opendata_dataset ~75

Get metadata for one opendata.swiss dataset by its catalogue name or UUID. Includes the publisher, description, keywords, and a short resource summary. Use list_opendata_resources for the full download list.

NameTypeReqDescription
dataset_idstringyesDataset name or id (e.g. weather-station-klosters).

No output schema declared.

No examples provided.

get_parliament_members ~98

Federal parliament members (National Council, Council of States), filterable by canton/party

NameTypeReqDescription
activeboolean–Only currently seated members
cantonstring–Canton name in German, e.g. Zürich, Genf, Waadt
limitnumber–max 50
partystring–Party name/abbreviation, e.g. SVP, SP, FDP, Grüne, Mitte

No output schema declared.

No examples provided.

get_parliament_votes ~40

Recorded votes on a parliamentary affair (Geschäft)

NameTypeReqDescription
affair_idnumberyesOpenParlData affair ID (from search_parliament_business)

No output schema declared.

No examples provided.

get_parliamentary_documents ~58

Official documents (reports, committee opinions, Federal Council statements) for a parliamentary affair

NameTypeReqDescription
affair_idnumberyesOpenParlData affair ID (from search_parliament_business)
limitnumber–max 20

No output schema declared.

No examples provided.

get_politician_interests ~49

Declared interests and mandates (boards, consulting roles) of a federal parliament member

NameTypeReqDescription
person_idnumberyesOpenParlData person ID (from get_parliament_members)

No output schema declared.

No examples provided.

get_pollen_current ~60

Latest hourly pollen concentrations (alder, birch, hazel, beech, ash, oak, grasses) at a MeteoSwiss station

NameTypeReqDescription
stationstringyese.g. PZH Zürich, PBE Bern, PBS Basel

No output schema declared.

No examples provided.

get_pollen_daily ~51

Daily average pollen concentrations at a MeteoSwiss station

NameTypeReqDescription
daysnumber–Recent days, max 90
stationstringyese.g. PZH Zürich, PBE Bern

No output schema declared.

No examples provided.

get_population ~79

Permanent resident population (BFS STATPOP) for Switzerland, a canton or all cantons

NameTypeReqDescription
cantonstring–Canton code or name (e.g. ZH, Geneva); 'all' for every canton; omit for national total
yearnumber–STATPOP year, from 2010; default is the latest published

No output schema declared.

No examples provided.

get_property_price_index ~93

BFS residential property price index (IMPI), quarterly since 2017Q1, Q4 2019 = 100

NameTypeReqDescription
fromstring–Inclusive, e.g. 2020Q1 or 2020 (default: earliest)
tostring–Inclusive, e.g. 2024Q4 or 2024 (default: latest)
typestring––

No output schema declared.

No examples provided.

get_public_holidays ~53

Public holidays for a year, national and cantonal

NameTypeReqDescription
cantonstring–Canton code, e.g. ZH (omit for all)
yearnumberyese.g. 2026

No output schema declared.

No examples provided.

get_recent_earthquakes ~69

Recent earthquakes in and around Switzerland (SED, ETH Zürich)

NameTypeReqDescription
daysnumber–Past days, max 365
include_blastsboolean–Include quarry blasts
limitnumber–max 100
min_magnitudenumber––

No output schema declared.

No examples provided.

get_rent_index ~84

BFS consumer price index (CPI/LIK, incl. rents), monthly, Dec 1982 = 100. Not a dedicated rent index; for purchase prices use get_property_price_index

NameTypeReqDescription
limitnumber–Recent months, 1–60; ignored if year set
yearnumber–1982 onward (omit for recent months)

No output schema declared.

No examples provided.

get_school_holidays ~52

School holiday periods for a year, by canton

NameTypeReqDescription
cantonstring–Canton code, e.g. ZH (omit for all)
yearnumberyese.g. 2026

No output schema declared.

No examples provided.

get_session_schedule ~26

Upcoming and recent federal parliament sessions

NameTypeReqDescription
limitnumber–max 20

No output schema declared.

No examples provided.

get_snow_conditions ~64

Current snow depth and 24h new snow at SLF IMIS stations, deepest first

NameTypeReqDescription
cantonstring–Canton code, e.g. GR
limitnumber–max 100
min_altitudenumber–Metres

No output schema declared.

No examples provided.

get_snow_measurements ~71

Measurements for one SLF station: IMIS 30-min snow/weather data, or study-plot daily snow data

NameTypeReqDescription
station_codestringyese.g. DAV2, WFJ2, 4AO0 (see list_snow_stations)
typestring––

No output schema declared.

No examples provided.

get_solar_potential ~44

Rooftop solar potential at a location

NameTypeReqDescription
latnumberyesLatitude (WGS84)
lngnumberyesLongitude (WGS84)

No output schema declared.

No examples provided.

get_station_accessibility ~109

Platform accessibility for an SBB station: platform number, length, type, and whether access is rail-free (step-free). Source: data.sbb.ch platform dataset.

NameTypeReqDescription
containsboolean–When true, match station names that contain the text. Default false matches the whole name.
limitnumber–Maximum platforms (default 30, max 80).
stationstringyesStation name as published by SBB (e.g. Bern, Zürich HB, Genève).

No output schema declared.

No examples provided.

get_station_passengers ~142

Passenger counts for an SBB station from the data.sbb.ch frequency dataset. Returns average daily, weekday, and weekend boardings and alightings (Ein- und Aussteigende). Newest year first.

NameTypeReqDescription
containsboolean–When true, match station names that contain the text. Default false matches the whole name.
limitnumber–Maximum rows (default 10, max 30).
stationstringyesStation name as published by SBB (e.g. Bern, Zürich HB, Genève).
yearnumber–Optional year (e.g. 2024). Omit to return the newest years.

No output schema declared.

No examples provided.

get_station_punctuality ~171

Punctuality for an SBB stop on the previous operating day (ist-daten-sbb target vs actual times). Returns stop counts, arrival and departure delay counts, cancellations, and a short sample of delayed arrivals. A stop is delayed when SBB flags it, which is generally a delay of about three minutes or more.

NameTypeReqDescription
containsboolean–When true, match station names that contain the text. Default false matches the whole name.
limitnumber–Delayed-arrival samples to include (default 5, max 15).
linestring–Optional line filter (e.g. IC1, IR15, S7).
stationstringyesStation name as published by SBB (e.g. Bern, Zürich HB, Genève).

No output schema declared.

No examples provided.

get_statistic ~48

Details and resource links for a BFS dataset by opendata.swiss ID (from search_statistics)

NameTypeReqDescription
dataset_idstringyese.g. bevolkerungsstatistik-einwohner

No output schema declared.

No examples provided.

get_swiss_news ~33

Latest SRF news headlines

NameTypeReqDescription
categorystring––
limitnumber–max 50

No output schema declared.

No examples provided.

get_traffic_by_canton ~40

ASTRA traffic counting stations in a canton (max 20)

NameTypeReqDescription
cantonstringyesCanton code, e.g. ZH

No output schema declared.

No examples provided.

get_traffic_count ~33

ASTRA traffic counting station volumes by location name

NameTypeReqDescription
locationstringyese.g. Gotthard

No output schema declared.

No examples provided.

get_traffic_nearby ~57

ASTRA traffic counting stations near a WGS84 point

NameTypeReqDescription
latnumberyesLatitude (WGS84)
lonnumberyesLongitude (WGS84)
radiusnumber–Metres

No output schema declared.

No examples provided.

get_trail_closures ~74

Current hiking trail closures and detours (ASTRA/Schweizer Wanderwege)

NameTypeReqDescription
limitnumber–max 100
reasonstring–Partial match, e.g. Steinschlag, Bauarbeiten, Hangrutsch
typestring–Omit for both

No output schema declared.

No examples provided.

get_trail_closures_nearby ~66

Hiking trail closures and detours near a WGS84 point

NameTypeReqDescription
latnumberyesLatitude (WGS84)
lonnumberyesLongitude (WGS84)
radiusnumber–Metres, max 50000

No output schema declared.

No examples provided.

get_vote_details ~68

Per-district Basel-Stadt results (Basel, Riehen, Bettingen, abroad) for one vote. Give vote_title and/or date

NameTypeReqDescription
datestring–YYYY-MM-DD
vote_titlestring–Partial title, e.g. CO2-Gesetz

No output schema declared.

No examples provided.

Install

How do I install the Switzerland MCP 🇨🇭 server?

Switzerland MCP 🇨🇭 runs locally as an npm package, launched with npx -y mcp-swiss. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

npm · mcp-swiss

# add to Claude Code
claude mcp add vikramgorla-swiss -- npx -y mcp-swiss
Common questions

What is the Switzerland MCP 🇨🇭 server?

Switzerland MCP 🇨🇭 is listed in the public MCP registry as io.github.vikramgorla/swiss. Swiss open data MCP server. 94 tools, zero API keys. Transport, weather, geodata, catalogue. This page covers its npm package (mcp-swiss).

Is the Switzerland MCP 🇨🇭 server safe to use?

Switzerland MCP 🇨🇭 scores 94 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 5 November 2026. It declares no install or post-install scripts. Its build provenance is signed and verified. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the Switzerland MCP 🇨🇭 server expose?

Switzerland MCP 🇨🇭 exposes 94 tools: search_stations, get_connections, get_departures, get_arrivals, get_nearby_stations, and 89 more. Their descriptions and schemas cost roughly 6,624 tokens of context every time the server is loaded.

Is the Switzerland MCP 🇨🇭 server still maintained?

Switzerland MCP 🇨🇭 is still listed as active in the MCP registry. We last reached this channel on 5 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

What licence is the Switzerland MCP 🇨🇭 server under?

Switzerland MCP 🇨🇭 declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.

What did VerifyMCP test on the Switzerland MCP 🇨🇭 server?

VerifyMCP ran 16 checks on Switzerland MCP 🇨🇭, covering Malware scan, Known CVEs, Install scripts, Dependency health and 12 more. Endpoint Security and Transport & Reachability do not apply to an npm package, so they were not tested. The score does not measure everything, and the scoring documentation lists what it leaves out.