# Switzerland MCP 🇨🇭 (npm · mcp-swiss)

Swiss open data MCP server. 76 tools, zero API keys. Transport, weather, geodata, news, rates.

- Trust score: 65/100 (medium)
- Change this week: +19
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-03

## Components

- npm · `mcp-swiss`: 65/100 (this document), [markdown](https://verifymcp.io/servers/vikramgorla-swiss/mcp-swiss.md), [page](https://verifymcp.io/servers/vikramgorla-swiss/mcp-swiss)

## Channel facts

- Registry: `npm`
- Package: `mcp-swiss`
- Version: `0.7.1`
- Transport: `stdio`

## Trust breakdown

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. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-08-03.

- **Supply Chain Security**: 86/100
  - No malware found by supply-chain analysis.
  - Only part of the dependency tree could be resolved (94 of 98), so this covers what we could see, not the whole tree.
  - No install/post-install scripts declared.
  - Only part of the dependency tree could be resolved (94 of 98), so this covers what we could see, not the whole tree.
- **Provenance & Transparency**: 45/100
  - Source repository is publicly reachable at the declared URL.
  - Provenance check failed: no build-provenance attestation is published.
  - Clear OSI-approved license (MIT).
  - Actively maintained (last published 126 days ago).
  - Disclosure check failed: no security disclosure policy was found in the source repository.
- **Schema Quality & AI Usability**: 77/100
  - AI-judged instruction clarity (excellent).
  - Tool/resource definitions use about 6760 tokens (~88/item across 76 items; 76 tools + 0 resources), lean.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 0/100
  - Stability not yet verified: not enough scan history yet (needs a 30-day window).
- **Tool Coverage**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

**Unverified: 1 category.** A category scored 0 because we could not verify it: a data source with nothing on this package, evidence we could not reach, or a check we could not run. We only credit what we can confirm.

## Install

### Claude

```bash
claude mcp add vikramgorla-swiss -- npx -y mcp-swiss
```

### Codex

```bash
codex mcp add vikramgorla-swiss -- npx -y mcp-swiss
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "vikramgorla-swiss": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "mcp-swiss"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add vikramgorla-swiss --command npx --arg -y --arg mcp-swiss
```

### Hermes

```yaml
mcp_servers:
  vikramgorla-swiss:
    command: "npx"
    args: ["-y", "mcp-swiss"]
```

### Other

```json
{
  "mcpServers": {
    "vikramgorla-swiss": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-swiss"
      ]
    }
  }
}
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-08-02 (score 65, +44)

- [security regression] Provenance: unverified → fail
- [security improvement] Known CVEs: unverified → partial
- [security improvement] Install scripts: unverified → pass
- [security improvement] Malware scan: unverified → pass
- [security] Stability: Stability not yet verified: not enough scan history yet (needs a 30-day window).
- [functional regression] Tool coverage: 100 → unverified
- [functional improvement] MCP protocol: unverified → pass
- [functional improvement] Maintenance: unverified → pass
- [functional improvement] License: unverified → pass
- [functional improvement] Schema quality: unverified → excellent
- [functional improvement] Dependency health: unverified → partial
- [functional] Licence: MIT

### 2026-08-01 (score 21, −5)

- [security] Stability: Stability not yet verified: we do not have a sandbox capture of the MCP schema this version of the package serves yet.
- [functional regression] Capabilities: pass → unverified

### 2026-07-31 (score 26, −20)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-30 (score 46, +22)

- [functional improvement] Tool coverage: unverified → 100

### 2026-07-28 (score 24, −22)

- [functional regression] Tool coverage: 100 → unverified
- [functional] First check of Schema quality: unverified

### 2026-07-27 (score 46)

First indexed and scored.

## MCP tools (76)

### `search_stations` (~74 tokens)

Search for Swiss public transport stations/stops by name or coordinates

Input parameters:

- `query` (string): Station name to search for
- `type` (string): Filter: all, station, poi, address
- `x` (number): Longitude (WGS84)
- `y` (number): Latitude (WGS84)

### `get_connections` (~102 tokens)

Get train/bus connections between two Swiss locations

Input parameters:

- `date` (string): Date YYYY-MM-DD (default: today)
- `from` (string, required): Departure station/address
- `isArrivalTime` (boolean): True if time is arrival time
- `limit` (number): Number of connections (1-16, default: 4)
- `time` (string): Time HH:MM (default: now)
- `to` (string, required): Arrival station/address

### `get_departures` (~62 tokens)

Get live departures from a Swiss transport station

Input parameters:

- `datetime` (string): DateTime YYYY-MM-DDTHH:MM (default: now)
- `limit` (number): Number of departures (default: 10)
- `station` (string, required): Station name

### `get_arrivals` (~62 tokens)

Get live arrivals at a Swiss transport station

Input parameters:

- `datetime` (string): DateTime YYYY-MM-DDTHH:MM (default: now)
- `limit` (number): Number of arrivals (default: 10)
- `station` (string, required): Station name

### `get_nearby_stations` (~71 tokens)

Find Swiss public transport stations near given coordinates

Input parameters:

- `distance` (number): Max distance in meters
- `limit` (number): Number of results (default: 10)
- `x` (number, required): Longitude (WGS84)
- `y` (number, required): Latitude (WGS84)

### `get_weather` (~65 tokens)

Get current weather conditions at a Swiss MeteoSwiss station (e.g. BER=Bern, ZUE=Zürich, LUG=Lugano)

Input parameters:

- `station` (string, required): Station code (e.g. BER, ZUE, LUG, GVE, SMA)

### `list_weather_stations` (~21 tokens)

List all available MeteoSwiss weather stations in Switzerland

### `get_weather_history` (~58 tokens)

Get historical weather data for a Swiss station

Input parameters:

- `end_date` (string, required): End date YYYY-MM-DD
- `start_date` (string, required): Start date YYYY-MM-DD
- `station` (string, required): Station code (e.g. BER)

### `get_water_level` (~55 tokens)

Get current river or lake water level and temperature at a Swiss hydrological station

Input parameters:

- `station` (string, required): Hydro station ID (e.g. 2135 for Aare/Bern, 2243 for Rhine/Basel)

### `list_hydro_stations` (~30 tokens)

List all available BAFU hydrological monitoring stations (rivers and lakes) in Switzerland

### `get_water_history` (~60 tokens)

Get historical river/lake water level data for a Swiss hydrological station

Input parameters:

- `end_date` (string, required): End date YYYY-MM-DD
- `start_date` (string, required): Start date YYYY-MM-DD
- `station` (string, required): Hydro station ID

### `geocode` (~35 tokens)

Convert a Swiss address or place name to coordinates (swisstopo)

Input parameters:

- `address` (string, required): Swiss address or place name

### `reverse_geocode` (~45 tokens)

Convert coordinates to a Swiss address (swisstopo)

Input parameters:

- `lat` (number, required): Latitude (WGS84)
- `lng` (number, required): Longitude (WGS84)

### `search_places` (~47 tokens)

Search Swiss place names, localities, mountains, and geographic features

Input parameters:

- `query` (string, required): Place name to search
- `type` (string): Type filter: locations, featuresearch

### `get_solar_potential` (~46 tokens)

Get rooftop solar energy potential for a location in Switzerland

Input parameters:

- `lat` (number, required): Latitude (WGS84)
- `lng` (number, required): Longitude (WGS84)

### `identify_location` (~61 tokens)

Identify geographic features and data layers at a specific Swiss location

Input parameters:

- `lat` (number, required): Latitude (WGS84)
- `layers` (string): Comma-separated layer ids (default: all visible)
- `lng` (number, required): Longitude (WGS84)

### `get_municipality` (~28 tokens)

Get information about a Swiss municipality by name

Input parameters:

- `name` (string, required): Municipality name

### `search_companies` (~105 tokens)

Search Swiss company registry (ZEFIX) by name, canton, or legal form

Input parameters:

- `canton` (string): Canton abbreviation (e.g. ZH, BE, GE, ZG)
- `legal_form` (string): Legal form code (e.g. 0106=GmbH, 0101=AG)
- `limit` (number): Max results (default: 20)
- `name` (string, required): Company name or partial name to search

### `get_company` (~76 tokens)

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.

Input parameters:

- `ehraid` (number, required): Company internal ZEFIX ID (ehraid integer, e.g. 119283). Returned by search_companies.

### `search_companies_by_address` (~47 tokens)

Search Swiss companies registered at a specific address or locality

Input parameters:

- `address` (string, required): Address or locality name
- `limit` (number): Max results (default: 20)

### `list_cantons` (~19 tokens)

List all Swiss cantons with their codes

### `list_legal_forms` (~24 tokens)

List all Swiss company legal forms (AG, GmbH, etc.)

### `get_public_holidays` (~89 tokens)

Get Swiss public holidays for a given year, optionally filtered by canton (e.g. ZH, BE, GE). Returns national and canton-specific holidays.

Input parameters:

- `canton` (string): Two-letter canton code (e.g. ZH, BE, GE, BS, TI). If omitted, returns all Swiss holidays.
- `year` (number, required): Year (e.g. 2026)

### `get_school_holidays` (~86 tokens)

Get Swiss school holidays for a given year, optionally filtered by canton. Returns holiday periods (start/end dates) by canton.

Input parameters:

- `canton` (string): Two-letter canton code (e.g. ZH, BE, GE, BS, TI). If omitted, returns school holidays for all cantons.
- `year` (number, required): Year (e.g. 2026)

### `is_holiday_today` (~63 tokens)

Check whether today is a Swiss public holiday, optionally for a specific canton. Returns the holiday name if it is one.

Input parameters:

- `canton` (string): Two-letter canton code (e.g. ZH, BE, GE). If omitted, checks nationwide holidays only.

### `search_parliament_business` (~95 tokens)

Search Swiss Parliament political affairs — bills, motions, interpellations, postulates, questions, and initiatives. Uses OpenParlData.ch full-text search across the Federal Assembly (Bundesversammlung).

Input parameters:

- `limit` (number): Max results (default: 5, max: 20)
- `query` (string, required): Search term (e.g. 'Klimaschutz', 'AHV', 'Neutralität')

### `get_parliament_members` (~136 tokens)

List current or past Swiss Parliament members (National Council and Council of States). Filter by canton or party.

Input parameters:

- `active` (boolean): Only active (currently seated) members (default: true)
- `canton` (string): Canton name in German to filter by (e.g. 'Zürich', 'Bern', 'Genf', 'Waadt')
- `limit` (number): Max results (default: 10, max: 50)
- `party` (string): Party name or abbreviation to search (e.g. 'SVP', 'SP', 'FDP', 'Grüne', 'Mitte')

### `get_parliament_votes` (~59 tokens)

Get voting results for a specific parliamentary affair (Geschäft). Returns all recorded votes for the given affair ID from OpenParlData.

Input parameters:

- `affair_id` (number, required): OpenParlData affair ID (get from search_parliament_business results)

### `get_session_schedule` (~50 tokens)

Get upcoming and recent Swiss parliament sessions (Sessionen). Shows session names, dates and types.

Input parameters:

- `limit` (number): Number of sessions to return (default: 5, max: 20)

### `search_parliament_speeches` (~73 tokens)

Get debate speeches and contributions for a specific parliamentary affair. Returns speaker info and speech details.

Input parameters:

- `affair_id` (number, required): OpenParlData affair ID (get from search_parliament_business results)
- `limit` (number): Max speeches to return (default: 5, max: 20)

### `get_politician_interests` (~53 tokens)

Get declared interests and mandates of a Swiss parliament member — board memberships, consulting roles, organizations.

Input parameters:

- `person_id` (number, required): OpenParlData person ID (get from get_parliament_members results)

### `search_cantonal_affairs` (~145 tokens)

Search political affairs across Swiss cantonal parliaments (Kantonsräte). Covers all 26 cantons via OpenParlData.

Input parameters:

- `canton` (string, required): Canton abbreviation: ZH, BE, LU, UR, SZ, OW, NW, GL, ZG, FR, SO, BS, BL, SH, AR, AI, SG, GR, AG, TG, TI, VD, VS, NE, GE, JU
- `limit` (number): Max results (default: 5, max: 20)
- `query` (string): Search term (optional, e.g. 'Bildung', 'Verkehr')

### `get_parliamentary_documents` (~71 tokens)

Get official documents for a parliamentary affair — reports, committee opinions, federal council statements.

Input parameters:

- `affair_id` (number, required): OpenParlData affair ID (get from search_parliament_business results)
- `limit` (number): Max documents to return (default: 5, max: 20)

### `get_committee_meetings` (~70 tokens)

Get Swiss parliament committee/commission meeting schedule. Optionally filter by committee group ID.

Input parameters:

- `group_id` (number): Committee group ID to filter (optional — omit for all committees)
- `limit` (number): Max meetings to return (default: 5, max: 20)

### `get_avalanche_bulletin` (~148 tokens)

Get the current Swiss avalanche danger bulletin from SLF (WSL Institute for Snow and Avalanche Research). Returns current bulletin URLs, danger level descriptions, and links to the interactive map. The bulletin is published daily at ~08:00 and updated at ~17:00 Swiss time (October–May).

Input parameters:

- `language` (string): Language for bulletin links: de (German), en (English), fr (French), it (Italian). Default: en
- `region` (string): Optional region ID (e.g. CH-9 for Central Graubünden) or region name. Use list_avalanche_regions to see all options. If omitted, returns national overview.

### `list_avalanche_regions` (~74 tokens)

List all Swiss avalanche warning regions as defined by SLF/EAWS. Returns region IDs, names, cantons, and typical elevations. Use region IDs with get_avalanche_bulletin.

Input parameters:

- `canton` (string): Filter regions by canton abbreviation (e.g. GR, VS, BE). Optional.

### `list_air_quality_stations` (~59 tokens)

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.

### `get_air_quality` (~113 tokens)

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).

Input parameters:

- `station` (string, required): NABEL station code (e.g. BER, ZUE, LUG, BAS, DAV). Use list_air_quality_stations for all codes.

### `lookup_postcode` (~65 tokens)

Look up a Swiss postcode (PLZ) to get locality name, canton, and coordinates. Source: Swiss federal geodata (swisstopo).

Input parameters:

- `postcode` (string, required): Swiss postal code (PLZ), e.g. "8001" or "3000"

### `search_postcode` (~68 tokens)

Search Swiss postcodes by city or locality name. Returns all PLZ entries matching the name. Source: Swiss federal geodata (swisstopo).

Input parameters:

- `city_name` (string, required): City or locality name, e.g. "Zürich", "Bern", "Locarno"

### `list_postcodes_in_canton` (~97 tokens)

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).

Input parameters:

- `canton` (string, required): Canton code (e.g. "ZH", "BE", "GR") or full name (e.g. "Zürich", "Bern", "Graubünden")

### `track_parcel` (~88 tokens)

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.

Input parameters:

- `tracking_number` (string, required): Swiss Post tracking number, e.g. "99.00.123456.12345678" for parcels or "RI 123456789 CH" for registered mail

### `get_electricity_tariff` (~170 tokens)

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.

Input parameters:

- `category` (string): Electricity category. Household: H1–H8 (H4 is default, ~4500 kWh/year). Commercial: C1–C7. Default: H4.
- `municipality` (string, required): Municipality BFS number (e.g. '261' for Zürich, '351' for Bern, '6621' for Genève). Use search_municipality_energy to find the ID.
- `year` (string): Tariff year (2011–2026). Default: current year (2026).

### `compare_electricity_tariffs` (~129 tokens)

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.

Input parameters:

- `category` (string): Electricity category (H1–H8, C1–C7). Default: H4.
- `municipalities` (array, required): Array of municipality BFS numbers to compare (e.g. ['261', '351', '6621']). Max 20. Use search_municipality_energy to find IDs.
- `year` (string): Tariff year (2011–2026). Default: 2026.

### `search_municipality_energy` (~79 tokens)

Search for Swiss municipality IDs needed for electricity tariff lookup. Returns BFS municipality numbers for use with get_electricity_tariff and compare_electricity_tariffs.

Input parameters:

- `name` (string, required): Municipality name to search (e.g. 'Zürich', 'Bern', 'Basel', 'Lausanne', 'Luzern').

### `get_population` (~121 tokens)

Get Swiss population data from the Federal Statistical Office (FSO/BFS). Returns population figures for Switzerland, a canton, or all cantons. Data source: BFS STATPOP (permanent resident population).

Input parameters:

- `canton` (string): Canton name or 2-letter code (e.g. 'ZH', 'Zürich', 'Geneva', 'BE'). Omit to get Switzerland total. Use 'all' to list all cantons.
- `year` (number): Year of data (2010–2024). Defaults to latest (2024).

### `search_statistics` (~85 tokens)

Search Swiss Federal Statistical Office (BFS/OFS/UST) datasets on opendata.swiss. Returns matching dataset titles, IDs, and descriptions.

Input parameters:

- `limit` (number): Max results to return (1–20, default 10)
- `query` (string, required): Search query (e.g. 'unemployment', 'GDP', 'housing prices', 'birth rate')

### `get_statistic` (~69 tokens)

Fetch details and resource links for a specific BFS/OFS dataset by its opendata.swiss identifier. Use search_statistics first to find dataset IDs.

Input parameters:

- `dataset_id` (string, required): Dataset identifier from opendata.swiss (e.g. 'bevolkerungsstatistik-einwohner')

### `list_currencies` (~37 tokens)

List all currencies available from the Swiss National Bank (SNB) for CHF exchange rate data. Returns currency codes, names, and regions.

### `get_exchange_rate` (~75 tokens)

Get the current CHF exchange rate for a currency from the Swiss National Bank (SNB). Returns the latest monthly average rate and currency details.

Input parameters:

- `currency` (string, required): ISO 4217 currency code (e.g. 'EUR', 'USD', 'GBP', 'JPY'). Use list_currencies to see all available codes.

### `get_exchange_rate_history` (~131 tokens)

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.

Input parameters:

- `currency` (string, required): ISO 4217 currency code (e.g. 'EUR', 'USD', 'GBP'). Use list_currencies to see all available codes.
- `from` (string): Start date in YYYY-MM format (e.g. '2020-01'). Optional.
- `to` (string): End date in YYYY-MM format (e.g. '2026-02'). Optional.

### `get_waste_collection` (~159 tokens)

Get upcoming waste collection dates for a Zurich city ZIP code. Returns the next scheduled pickups sorted by date. Currently covers Zurich city only (ZIP codes 8001–8099). Powered by OpenERZ (openerz.metaodi.ch).

Input parameters:

- `limit` (number): Maximum number of upcoming collection dates to return. Default: 5.
- `type` (string): Waste type to filter by (e.g. 'cardboard', 'waste', 'paper', 'organic', 'textile', 'special', 'mobile'). If omitted, returns all types.
- `zip` (string, required): Zurich city ZIP code (e.g. '8001', '8004', '8032'). Covers 8001–8099.

### `list_waste_types` (~58 tokens)

List all supported waste collection types for Zurich city. Returns each type with its description and local name. Currently covers Zurich city only (ZIP codes 8001–8099). Powered by OpenERZ (openerz.metaodi.ch).

### `get_waste_calendar` (~138 tokens)

Get a full monthly waste collection calendar for a Zurich city ZIP code. Returns all collection events grouped by date for the given month. Currently covers Zurich city only (ZIP codes 8001–8099). Powered by OpenERZ (openerz.metaodi.ch).

Input parameters:

- `month` (number): Month number (1–12). Defaults to the current month.
- `year` (number): Year (e.g. 2026). Defaults to the current year.
- `zip` (string, required): Zurich city ZIP code (e.g. '8001', '8004', '8032'). Covers 8001–8099.

### `get_swiss_news` (~100 tokens)

Get the latest Swiss news headlines from SRF (Schweizer Radio und Fernsehen). Returns top news articles with title, description, link, and publication date.

Input parameters:

- `category` (string): News category. "switzerland" = domestic Swiss news (default), "international" = world news, "economy" = business & economy.
- `limit` (number): Number of articles to return (default: 10, max: 50)

### `search_swiss_news` (~70 tokens)

Search Swiss news headlines from SRF by keyword. Searches across all available news categories and returns matching articles.

Input parameters:

- `limit` (number): Maximum number of results to return (default: 5, max: 20)
- `query` (string, required): Search keyword or phrase to find in news articles

### `get_voting_results` (~105 tokens)

Get results of Swiss popular votes (Volksabstimmungen) from Basel-Stadt open data. Returns vote title, date, yes/no counts, yes percentage, and eligible voters. Covers national and cantonal votes since 2021.

Input parameters:

- `limit` (number): Maximum number of votes to return (default: 10, max: 50).
- `year` (number): Filter by year (e.g. 2024). If omitted, returns most recent votes.

### `search_votes` (~89 tokens)

Search Swiss popular votes by keyword in the vote title (e.g. 'Initiative', 'Klimaschutz', 'CO2', 'AHV'). Returns matching votes with yes/no results.

Input parameters:

- `limit` (number): Maximum number of results (default: 5, max: 20).
- `query` (string, required): Search keyword to find in vote titles (German/French/Italian)

### `get_vote_details` (~98 tokens)

Get detailed breakdown of a specific Swiss popular vote, including per-district results for Basel-Stadt (Basel city, Riehen, Bettingen, and overseas voters).

Input parameters:

- `date` (string): Vote date in YYYY-MM-DD format (e.g. '2024-11-24')
- `vote_title` (string): Partial or full vote title to look up (e.g. 'CO2-Gesetz', 'AHV')

### `search_dams` (~110 tokens)

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.

Input parameters:

- `query` (string, required): Dam or reservoir name to search (e.g. 'Grimsel', 'Grande Dixence', 'Mattmark', 'Lac des Dix'). Partial names are supported.

### `get_dams_by_canton` (~113 tokens)

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.

Input parameters:

- `canton` (string, required): Swiss canton 2-letter abbreviation code (e.g. 'VS' for Valais, 'GR' for Graubünden, 'BE' for Bern, 'UR' for Uri, 'TI' for Ticino, 'VD' for Vaud).

### `get_dam_details` (~128 tokens)

Get full technical details of a specific Swiss dam by name. Returns all available fields: dam type, height, crest length, crest level, reservoir name, impoundment volume, storage level, purpose, operation dates, federal supervision start, and canton. Data source: Swiss Federal Office of Energy (SFOE) via swisstopo BGDI.

Input parameters:

- `name` (string, required): Dam name (e.g. 'Grande Dixence', 'Spitallamm', 'Mattmark', 'Verzasca'). Use search_dams first if you are unsure of the exact name.

### `get_trail_closures` (~205 tokens)

Get current Swiss hiking trail closures and detours from the official ASTRA/Schweizer Wanderwege dataset. Filter by closure reason (e.g. Steinschlag, Bauarbeiten, Hangrutsch) or type (closure, detour). If no parameters are given, returns all active closures. Data source: swisstopo ch.astra.wanderland-sperrungen_umleitungen.

Input parameters:

- `limit` (number): Maximum number of results to return. Default: 20. Max: 100.
- `reason` (string): Optional search term for closure reason (e.g. 'Steinschlag', 'Bauarbeiten', 'Hangrutsch', 'Hochwasser'). Matches against the reason field (German or English). Case-insensitive partial match.
- `type` (string): Optional: filter by type — 'closure' (Sperrung) or 'detour' (Umleitung). If omitted, returns both.

### `get_trail_closures_nearby` (~127 tokens)

Find Swiss hiking trail closures and detours near a given GPS coordinate. Converts WGS84 coordinates to Swiss LV95 and queries the swisstopo identify endpoint. Returns closures within the specified radius.

Input parameters:

- `lat` (number, required): Latitude in WGS84 (e.g. 46.9480 for Bern).
- `lon` (number, required): Longitude in WGS84 (e.g. 7.4474 for Bern).
- `radius` (number): Search radius in metres. Default: 10000 (10 km). Max: 50000.

### `get_property_price_index` (~182 tokens)

Get the Swiss Residential Property Price Index (SWRPI) — official BFS data. Baseline Q4 2019 = 100. Returns quarterly index values tracking Swiss property prices since 2009. Covers all properties, single-family houses, and apartments separately.

Input parameters:

- `from` (string): Start period (inclusive). Format: "2020Q1", "2020-Q1", or just "2020". Defaults to earliest available (2009-Q4).
- `to` (string): End period (inclusive). Format: "2024Q4", "2024-Q4", or just "2024". Defaults to latest available.
- `type` (string): Property type to filter by: "all" (combined index), "houses" (single-family), "apartments" (condominiums/flats). Defaults to "all".

### `search_real_estate_data` (~117 tokens)

Search opendata.swiss for Swiss real estate and housing datasets. Finds datasets about property prices, rents, housing construction, vacancy rates, and more. Returns dataset names, descriptions, and resource download URLs.

Input parameters:

- `limit` (number): Max results to return (1–20, default 10).
- `query` (string, required): Search terms in German, French, or English (e.g. "Immobilien", "Miete", "rent", "logement", "Wohnungspreise", "Leerwohnungen").

### `get_rent_index` (~114 tokens)

Get the Swiss Consumer Price Index (CPI/LIK), which tracks cost of living including residential rents. Baseline December 1982 = 100. Published monthly by BFS. For property purchase prices, use get_property_price_index instead.

Input parameters:

- `limit` (number): Number of recent monthly data points to return (1–60, default 24). Ignored if year is set.
- `year` (number): Filter to a specific year (1983–2025). Omit for latest 24 months.

### `get_traffic_count` (~87 tokens)

Get traffic volume at an ASTRA counting station in Switzerland by location name (e.g. 'Gotthard', 'Zürich', 'Genf'). Returns daily and weekday traffic counts, heavy vehicle percentage, and measurement year.

Input parameters:

- `location` (string, required): Station or location name to search (e.g. 'Gotthard', 'Zürich', 'Basel')

### `get_traffic_by_canton` (~60 tokens)

List ASTRA traffic counting stations in a Swiss canton. Returns up to 20 stations with traffic data.

Input parameters:

- `canton` (string, required): 2-letter canton code (e.g. 'ZH', 'BE', 'GE', 'VS')

### `get_traffic_nearby` (~96 tokens)

Find ASTRA traffic counting stations near a geographic coordinate in Switzerland. Returns nearby stations with traffic volume data.

Input parameters:

- `lat` (number, required): Latitude in WGS84 (e.g. 47.3769 for Zürich)
- `lon` (number, required): Longitude in WGS84 (e.g. 8.5417 for Zürich)
- `radius` (number): Search radius in meters (default: 5000)

### `get_recent_earthquakes` (~129 tokens)

Get recent seismic events in and around Switzerland from the Swiss Seismological Service (SED) at ETH Zürich. Returns earthquakes and optionally quarry blasts, sorted by most recent first.

Input parameters:

- `days` (number): Number of past days to search (default: 30, max: 365)
- `include_blasts` (boolean): Include quarry blasts in results (default: false — earthquakes only)
- `limit` (number): Maximum number of results to return (default: 20)
- `min_magnitude` (number): Minimum magnitude filter (default: 0.5)

### `get_earthquake_details` (~106 tokens)

Get full details for a specific seismic event by its SED (Swiss Seismological Service) event ID. Use event IDs returned by get_recent_earthquakes or search_earthquakes_by_location.

Input parameters:

- `event_id` (string, required): The SED event ID (e.g. 'smi:ch.ethz.sed/sc25a/Event/2026errxzt'). Obtain from get_recent_earthquakes or search_earthquakes_by_location.

### `search_earthquakes_by_location` (~189 tokens)

Search for earthquakes near a geographic location using the Swiss Seismological Service (SED) FDSN API. Useful for finding seismic activity near a Swiss city, landmark, or custom coordinates.

Input parameters:

- `days` (number): Number of past days to search (default: 90, max: 365)
- `lat` (number, required): Latitude of the center point (decimal degrees, e.g. 46.9 for Bern)
- `limit` (number): Maximum number of results to return (default: 20, max: 100)
- `lon` (number, required): Longitude of the center point (decimal degrees, e.g. 7.5 for Bern)
- `min_magnitude` (number): Minimum magnitude filter (default: 0.5)
- `radius_km` (number): Search radius in kilometres (default: 50, max: 500)

### `get_snow_conditions` (~132 tokens)

Get current snow conditions across Switzerland from SLF (WSL Institute for Snow and Avalanche Research). Returns snow depth and new snow (24h) for IMIS stations, sorted by snow depth. Filter by canton or minimum altitude. Data updated daily.

Input parameters:

- `canton` (string): Filter by canton abbreviation (e.g. GR, VS, BE, UR, TI). Optional.
- `limit` (number): Maximum number of stations to return (default: 20, max: 100).
- `min_altitude` (number): Minimum station altitude in metres (e.g. 2000). Optional.

### `list_snow_stations` (~124 tokens)

List all SLF snow measurement stations in Switzerland (IMIS automatic stations and manual study plots). Returns station code, name, altitude, canton, and type. Sorted by elevation descending.

Input parameters:

- `canton` (string): Filter by canton abbreviation (e.g. GR, VS, BE). Optional.
- `limit` (number): Maximum number of stations to return (default: 20, max: 200).
- `type` (string): Station type: "imis" (automatic) or "study-plot" (manual). Optional — returns both by default.

### `get_snow_measurements` (~133 tokens)

Get detailed snow and weather measurements for a specific SLF station. IMIS stations return 30-min data (snow depth, temperature, humidity, wind, radiation). Study plots return daily data (snow depth, new snow, water equivalent). Use list_snow_stations to find station codes.

Input parameters:

- `station_code` (string, required): Station code (e.g. DAV2, WFJ2, 4AO0). Use list_snow_stations to find codes.
- `type` (string): Station type: "imis" (default) or "study-plot". Determines which API endpoint to query.

## Diagnostics

Captured diagnostic sections: Provenance, Dependencies. The full working is on the page: https://verifymcp.io/servers/vikramgorla-swiss/mcp-swiss#diagnostics

## Score history

- 2026-08-03: 65
- 2026-08-02: 65
- 2026-08-01: 21
- 2026-07-31: 26
- 2026-07-30: 46
- 2026-07-28: 24
- 2026-07-27: 46

## Links

- npm package: https://www.npmjs.com/package/mcp-swiss
- Socket report: https://socket.dev/npm/package/mcp-swiss
- Repository: https://github.com/vikramgorla/mcp-swiss
- Changelog RSS feed: https://verifymcp.io/servers/vikramgorla-swiss/mcp-swiss/changelog.xml
- Changelog JSON feed: https://verifymcp.io/servers/vikramgorla-swiss/mcp-swiss/changelog.json
- HTML version of this page: https://verifymcp.io/servers/vikramgorla-swiss/mcp-swiss
