Listed from the MCP registry; nobody on Odel publishes it.

MCP server: One MCP server.

Switzerland MCP ๐Ÿ‡จ๐Ÿ‡ญ

@vikramgorlaMCP server ยท External

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

Government open datav0.9.0MITTypeScript
Freeno charge per call

Runs on your machine from its package; the steps are below.

What it does

  1. Reads
  2. Writes
  3. High impact

At most: only reads or looks up information.

What it costs

Free

Odel charges nothing per call. The publisher may charge for its own service.

Runs locally over stdio

This server isn't hosted โ€” your MCP client launches it from a package registry. Use one of the commands below, or drop the config into your client (e.g. Claude Desktop).

npmmcp-swissv0.9.0

Run

npx -y mcp-swiss

MCP client config

{
  "mcpServers": {
    "switzerland-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-swiss"
      ]
    }
  }
}
README15 min read
mcp-swiss

mcp-swiss

Swiss open data for AI โ€” zero config, zero API keys

npm CI License MCP Downloads Stars Node .mcpb Claude Desktop MCP Registry Awesome MCP Servers Glama

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.

94 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 swimming!)
๐Ÿ—บ๏ธ Geodata      โ€” swisstopo geocoding, solar potential, geographic layers
๐Ÿข Companies    โ€” ZEFIX federal registry, all 700K+ Swiss companies
๐ŸŽ„ Holidays     โ€” Swiss public & school holidays by canton
๐Ÿ›๏ธ Parliament   โ€” Bills, votes, members, speeches, cantonal affairs (OpenParlData.ch)
๐Ÿ”๏ธ Avalanche    โ€” SLF danger bulletins and warning regions
๐Ÿ’จ Air Quality  โ€” NABEL stations, Swiss legal limits (LRV)
๐Ÿ“ฎ Swiss Post   โ€” Postcode lookup and parcel tracking
โšก Energy       โ€” Electricity tariffs by municipality (ElCom)
๐Ÿ“Š Statistics   โ€” Population, demographics, BFS datasets
๐Ÿฆ SNB Rates    โ€” Swiss National Bank CHF exchange rates, historical data
โ™ป๏ธ Recycling    โ€” Zurich city waste collection calendar (OpenERZ)
๐Ÿ“ฐ Swiss News   โ€” SRF news headlines and keyword search
๐Ÿ—ณ๏ธ Voting       โ€” Swiss popular vote results (Basel-Stadt open data)
๐ŸŒŠ Dams         โ€” Swiss federal dam registry (SFOE/swisstopo)
๐Ÿฅพ Hiking       โ€” Swiss trail closures and hiking alerts (swisstopo)
๐Ÿ  Real Estate  โ€” Swiss property prices, rent index, housing data (BFS)
๐Ÿš— Traffic      โ€” ASTRA counting stations, daily volumes
๐ŸŒ Earthquakes  โ€” Swiss Seismological Service (SED/ETH Zรผrich), FDSN API
โ„๏ธ Snow         โ€” SLF snow depth, stations, and measurements
๐ŸŒฟ Pollen       โ€” MeteoSwiss pollen concentrations at the published stations
๐Ÿ  Buildings    โ€” Federal register of buildings and dwellings (GWR)
๐Ÿ“‚ Catalogue    โ€” opendata.swiss dataset search, metadata, and downloads
๐ŸŒก๏ธ Meteo OGD    โ€” SwissMetNet stations and measurements (STAC CSV)
๐Ÿงญ Map layers   โ€” geo.admin layer search, identify, and attribute find
๐Ÿš‰ SBB Data     โ€” station passengers, punctuality, and step-free access

Installation

Quick Start

bash
npx mcp-swiss

That's it. No API keys, no .env files, no accounts. Pick your client below and paste the config.


One-Click Install (.mcpb)

.mcpb bundles work with Claude Desktop and any MCP Bundle-compatible app.

โฌ‡ Download mcp-swiss.mcpb

Install in Claude Desktop

Open the downloaded file โ€” your app handles the rest. No config editing, no terminal, no API keys.


Claude Desktop

Edit your config file:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
  • Windows: %APPDATA%\Claude\claude_desktop_config.json
  • Linux: ~/.config/Claude/claude_desktop_config.json
json
{
  "mcpServers": {
    "swiss": {
      "command": "npx",
      "args": ["-y", "mcp-swiss"]
    }
  }
}

Restart Claude Desktop after saving.


Claude Code (CLI)

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

That's it โ€” Claude Code will use it in your next session.


Cursor

Requires Cursor 0.45.6+

Option A: Project config โ€” create .cursor/mcp.json in your project root:

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

Option B: Global config โ€” create ~/.cursor/mcp.json:

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

Option C: Via Cursor Settings UI

  1. Open Cursor Settings
  2. Go to Features โ†’ MCP Servers
  3. Click + Add new global MCP server
  4. Paste the JSON config above

VS Code (GitHub Copilot)

One-click Install

Install in VS Code Install in VS Code Insiders

CLI Install

bash
# VS Code
code --add-mcp '{"name":"swiss","command":"npx","args":["-y","mcp-swiss"]}'

# VS Code Insiders
code-insiders --add-mcp '{"name":"swiss","command":"npx","args":["-y","mcp-swiss"]}'

Manual Config

Add to your VS Code User Settings (JSON) โ€” press Ctrl+Shift+P โ†’ Preferences: Open User Settings (JSON):

json
{
  "mcp": {
    "servers": {
      "swiss": {
        "command": "npx",
        "args": ["-y", "mcp-swiss"]
      }
    }
  }
}

Or add to .vscode/mcp.json in your workspace (shareable with your team):

json
{
  "servers": {
    "swiss": {
      "command": "npx",
      "args": ["-y", "mcp-swiss"]
    }
  }
}

Windsurf

Add to ~/.codeium/windsurf/model_config.json:

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

Cline (VS Code)

Open VS Code settings.json and add:

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

Any MCP Client

mcp-swiss uses stdio transport and requires no environment variables. Upstream calls time out after 30 seconds (MCP_SWISS_TIMEOUT_MS overrides that) and retry once on a dropped connection or a rate limit. The universal config:

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

This works with any MCP-compatible client โ€” just plug it in.

Docker

bash
docker pull vikramgorla/mcp-swiss

Use with any MCP client that supports Docker-based servers. The container uses stdio transport:

bash
# Run directly (stdio)
docker run -i vikramgorla/mcp-swiss

# Use with Claude Desktop

For Claude Desktop, update your config to use Docker:

json
{
  "mcpServers": {
    "swiss": {
      "command": "docker",
      "args": ["run", "-i", "--rm", "vikramgorla/mcp-swiss"]
    }
  }
}

Also available on GitHub Container Registry:

bash
docker pull ghcr.io/vikramgorla/mcp-swiss

Streamable HTTP

stdio is still the default. For a local HTTP client, run:

bash
npx mcp-swiss --http

That listens on 127.0.0.1:3000 and serves MCP at POST /mcp (also GET and DELETE) plus GET /health. --port, --host, PORT, HOST, and MCP_TRANSPORT=http are the other switches.

A bind that is not loopback (127.0.0.1, localhost, or ::1) refuses to start unless both MCP_AUTH_TOKEN and MCP_ALLOWED_HOSTS are set. Sessions are capped (MCP_MAX_SESSIONS, default 64) and idle ones expire. This is the transport half of #64. It does not deploy a hosted instance.


Module Filtering

By default, mcp-swiss loads all 27 modules (94 tools). The full tools/list schema is about 9,300 tokens (37,011 characters). For a smaller startup list, load only the modules you need.

Discovery mode

Search, then execute. The server lists three meta-tools instead of every schema (about 330 tokens versus about 9,300):

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

MCP_SWISS_MODE=discovery and --mode discovery do the same thing. swiss_search_tools finds tools by keyword or module and returns their input schemas. swiss_call_tool checks those arguments, then runs the tool. swiss_list_modules is the catalog. The default, with no flag, is still the full tool list.

Select specific modules

json
{
  "mcpServers": {
    "swiss": {
      "command": "npx",
      "args": ["-y", "mcp-swiss", "--modules", "transport,weather"]
    }
  }
}

Use presets

json
{
  "mcpServers": {
    "swiss": {
      "command": "npx",
      "args": ["-y", "mcp-swiss", "--preset", "commuter"]
    }
  }
}
PresetModulesToolsToken Savings
commutertransport, weather, holidays1483%
outdoorweather, avalanche, hiking, earthquakes, dams, snow, pollen2274%
businesscompanies, geodata, post, energy, statistics, snb, gwr2768%
citizenparliament, voting, holidays, news1780%
minimaltransport594%
fullall 27 modules (default)94โ€”

Combine preset + modules: --preset commuter --modules parliament

List available: npx mcp-swiss --list-modules or npx mcp-swiss --list-presets


Demo Prompts

Once connected, try asking your AI:

PromptWhat it uses
"Next 5 trains from Zรผrich HB to Geneva"get_connections
"Is the Aare in Bern warm enough to swim?"get_water_level
"Weather in Lugano vs Zรผrich today"get_weather
"Find blockchain companies registered in Zug"search_companies
"Solar potential of Bundesplatz 3, Bern"geocode + get_solar_potential
"Live departures from Bern HB"get_departures
"What rivers are near Thun?"list_hydro_stations + get_water_level
"Plan my Saturday: train to Interlaken, check weather"Multiple tools chained
"Is next Monday a holiday in Zรผrich?"get_public_holidays
"What did the Swiss parliament vote on recently?"search_parliament_business
"What's the avalanche danger level in the Bernese Alps?"get_avalanche_bulletin
"What's the postcode for Zermatt?"search_postcode
"Track my Swiss Post parcel 99.12.345678.12345678"track_parcel
"How much does electricity cost in Zรผrich vs Basel?"search_municipality_energy + compare_electricity_tariffs
"What's the population of canton Zug?"get_population

Tools

94 tools across 27 modules. Full specifications: docs/tool-specs.md ยท Machine-readable: docs/tools.schema.json

๐Ÿš† Transport (5 tools)

ToolDescription
search_stationsFind stations/stops by name or location
get_connectionsJourney planner between any two points
get_departuresLive departures from a station
get_arrivalsLive arrivals at a station
get_nearby_stationsStations near coordinates

๐ŸŒค๏ธ Weather & Hydrology (6 tools)

ToolDescription
get_weatherCurrent conditions at a MeteoSwiss station
list_weather_stationsAll ~160 MeteoSwiss stations with metadata
get_weather_historyHistorical weather data (up to 32 days)
get_water_levelRiver/lake level + temperature (BAFU)
list_hydro_stationsAll 400+ hydrological monitoring stations
get_water_historyHistorical hydrology data

๐Ÿ—บ๏ธ Geodata / swisstopo (6 tools)

ToolDescription
geocodeSwiss address โ†’ coordinates
reverse_geocodeCoordinates โ†’ Swiss address
search_placesSwiss place names, mountains, lakes, features
get_solar_potentialRooftop solar irradiation at a location
identify_locationAll geographic data layers at a point
get_municipalityMunicipality info by name

๐Ÿข Companies / ZEFIX (5 tools)

ToolDescription
search_companiesSearch by name, canton, legal form
get_companyFull company details by ZEFIX ehraid
search_companies_by_localityCompanies seated in a commune or town (ZEFIX has no street search)
list_cantonsAll 26 Swiss cantons
list_legal_formsAG, GmbH, and all Swiss legal forms

๐ŸŽ„ Holidays (3 tools)

ToolDescription
get_public_holidaysSwiss public holidays by year, optionally filtered by canton
get_school_holidaysSchool holiday periods by year and canton
is_holiday_todayQuick check if today is a public holiday

๐Ÿ›๏ธ Parliament (9 tools) โ€” OpenParlData.ch

ToolDescription
search_parliament_businessSearch federal political affairs (bills, motions, questions)
get_parliament_membersList parliament members by canton, party, or activity
get_parliament_votesVoting results for a specific affair
get_session_scheduleUpcoming/recent parliament sessions
search_parliament_speechesDebate speeches for an affair
get_politician_interestsDeclared interests and mandates of a member
search_cantonal_affairsSearch across 26 cantonal parliaments
get_parliamentary_documentsOfficial documents for an affair
get_committee_meetingsCommittee/commission meeting schedule

๐Ÿ”๏ธ Avalanche (2 tools)

ToolDescription
get_avalanche_bulletinLive SLF bulletin: danger level, problems, advice for a region or coordinate
list_avalanche_regionsThe 135 SLF/EAWS warning regions

๐Ÿ’จ Air Quality (2 tools)

ToolDescription
list_air_quality_stationsAll 16 NABEL monitoring stations, plus any code the live layer adds
get_air_qualityStation info, Swiss legal limits (LRV), and BAFU data links

๐Ÿ“ฎ Swiss Post (4 tools)

ToolDescription
lookup_postcodePLZ โ†’ locality, canton, coordinates
search_postcodeCity name โ†’ matching postcodes
list_postcodes_in_cantonAll postcodes in a canton
track_parcelGenerate Swiss Post tracking URL for a parcel

โšก Energy Prices (3 tools)

ToolDescription
get_electricity_tariffElectricity tariff by municipality with component breakdown
compare_electricity_tariffsCompare electricity prices across municipalities
search_municipality_energyFind municipality ID for tariff lookup

๐Ÿ“Š Statistics / BFS (3 tools)

ToolDescription
get_populationPopulation by canton or municipality from BFS STATPOP
search_statisticsSearch BFS datasets on opendata.swiss
get_statisticFetch detailed dataset information

๐Ÿฆ SNB Exchange Rates (3 tools)

ToolDescription
list_currenciesList all currencies available from the Swiss National Bank (SNB)
get_exchange_rateGet the current CHF exchange rate for any currency
get_exchange_rate_historyGet historical monthly CHF exchange rates with date filtering

โ™ป๏ธ Recycling / Waste Collection (3 tools)

ToolDescription
get_waste_collectionNext waste collection dates by Zurich ZIP code and waste type
list_waste_typesList all supported waste types with descriptions
get_waste_calendarFull waste collection calendar for a ZIP code (upcoming dates)

๐Ÿ“ฐ Swiss News (2 tools)

ToolDescription
get_swiss_newsLatest Swiss headlines from SRF by category (Switzerland/international/economy)
search_swiss_newsSearch SRF news by keyword across all categories

๐Ÿ—ณ๏ธ Voting (3 tools)

ToolDescription
get_voting_resultsSwiss popular vote results from Basel-Stadt open data
search_votesSearch popular votes by keyword (German/French/Italian)
get_vote_detailsDetailed per-district breakdown of a specific vote

๐ŸŒŠ Dams & Reservoirs (3 tools)

ToolDescription
search_damsSearch Swiss federal dams by name or keyword
get_dams_by_cantonList all federal dams in a canton
get_dam_detailsDetailed info on a specific dam (height, volume, purpose)

๐Ÿฅพ Hiking / Trail Closures (2 tools)

ToolDescription
get_trail_closuresSwiss trail closures and hiking alerts from swisstopo
get_trail_closures_nearbyTrail closures near given coordinates

๐Ÿ  Buildings / GWR (3 tools)

ToolDescription
search_buildingsFind buildings in the federal register (GWR) by address and return EGIDs
get_buildingFull building record by EGID: year, floors, heating, parcel, entrances, dwellings
buildings_nearBuildings nearest a WGS84 point, closest first

๐Ÿ  Real Estate (3 tools)

ToolDescription
get_property_price_indexSwiss property price index (BFS Immo-Monitoring)
search_real_estate_dataSearch BFS real estate datasets on opendata.swiss
get_rent_indexSwiss rent index and housing cost data from BFS

๐Ÿš— Traffic / ASTRA (3 tools)

ToolDescription
get_traffic_countTraffic counting station data (ASTRA) โ€” daily volumes and heavy traffic share
get_traffic_by_cantonList ASTRA traffic counting stations filtered by canton
get_traffic_nearbyFind traffic counting stations near given coordinates

๐ŸŒ Earthquakes / SED (3 tools)

ToolDescription
get_recent_earthquakesRecent seismic events in/around Switzerland from the Swiss Seismological Service (SED) at ETH Zรผrich
get_earthquake_detailsFull details for a specific seismic event by SED event ID
search_earthquakes_by_locationEarthquakes near given coordinates with configurable radius, time range, and limit

โ„๏ธ Snow Conditions / SLF (3 tools)

ToolDescription
get_snow_conditionsCurrent snow depth and new snow (24h) across Switzerland from SLF IMIS stations, filterable by canton/altitude
list_snow_stationsAll 307 SLF snow measurement stations (IMIS automatic + manual study plots)
get_snow_measurementsDetailed snow and weather measurements for a specific SLF station

๐ŸŒฟ Pollen / MeteoSwiss (3 tools)

ToolDescription
get_pollen_currentCurrent hourly pollen concentrations at a published MeteoSwiss station
get_pollen_dailyDaily pollen averages over a configurable range
list_pollen_stationsPublished MeteoSwiss pollen stations (the list is no longer a frozen 16)

๐Ÿ“‚ Open Data Catalogue (3 tools)

ToolDescription
search_opendataSearch the opendata.swiss catalogue (CKAN) by keyword, optionally limited to one publisher
get_opendata_datasetMetadata for one dataset: publisher, description, keywords, and a short resource summary
list_opendata_resourcesDownload links and services for a dataset, with an optional format filter

๐ŸŒก๏ธ MeteoSwiss OGD (3 tools)

ToolDescription
list_ogd_stationsStations in a MeteoSwiss OGD STAC collection (SwissMetNet by default, plus precipitation, climate, phenology, and totaliser networks)
get_ogd_recentLatest measurements for one station, parsed from the now/recent CSV asset
get_ogd_historyHistorical measurements for a date range, parsed from the historical or recent CSV assets

๐Ÿงญ Map Layers / geo.admin (3 tools)

ToolDescription
search_map_layersSearch or list layers in the geo.admin ech MapServer catalogue
identify_map_layerFeatures at a WGS84 point on one layer, keeping the current version of time-series layers
find_map_featuresFind features on one layer by attribute value

๐Ÿš‰ SBB Open Data (3 tools)

ToolDescription
get_station_passengersAverage daily, weekday, and weekend boardings and alightings at an SBB station
get_station_punctualityPrevious-day arrival and departure punctuality, delays, and cancellations
get_station_accessibilityPlatform length and rail-free (step-free) access

Data Sources

All official Swiss open data โ€” no API keys required:

SourceDataDocs
transport.opendata.chSBB, PostBus, tramsAPI docs
api.existenz.chMeteoSwiss weather + BAFU hydrologyAPI docs
api3.geo.admin.chswisstopo federal geodataAPI docs
zefix.admin.chFederal company registrySwagger
openholidaysapi.orgSwiss public & school holidaysAPI docs
OpenParlData.chSwiss Parliament data โ€” federal & cantonal (CC BY 4.0)API docs
whiterisk.ch / aws.slf.chSLF/WSL avalanche bulletinsSLF
geo.admin.ch โ€” BAFU/NABELSwiss air quality monitoring stationsBAFU NABEL
geo.admin.ch โ€” swisstopoSwiss postcodes (Amtliches Ortschaftenverzeichnis)geo.admin.ch
strompreis.elcom.admin.chElCom electricity tariffs by municipalityElCom
pxweb.bfs.admin.ch + opendata.swissBFS population statistics (STATPOP) + datasetsBFS
data.snb.chSwiss National Bank CHF exchange ratesSNB data portal
openerz.metaodi.chZurich waste collection calendar (OpenERZ)OpenERZ
srf.chSRF Swiss news headlinesSRF
data.bs.chBasel-Stadt popular vote resultsOpen Data BS
geo.admin.ch โ€” SFOESwiss federal dam registrySFOE
geo.admin.ch โ€” swisstopoSwiss trail closures and hiking alertsswisstopo
pxweb.bfs.admin.chBFS property prices + rent indexBFS housing
geo.admin.ch โ€” ASTRATraffic counting stations + daily volumesASTRA
arclink.ethz.chSwiss Seismological Service earthquakes (SED/ETH)SED
measurement-api.slf.chSLF snow depth + measurements (IMIS + study plots, CC BY 4.0)SLF
data.geo.admin.chMeteoSwiss pollen concentrations (16 automatic stations, CC BY)MeteoSwiss
api3.geo.admin.chFederal map layers: search, identify, and attribute findgeo.admin API
data.geo.admin.ch STACMeteoSwiss OGD station measurements (CSV assets, CC BY)MeteoSwiss open data
ckan.opendata.swissNational open data catalogue (datasets and resources)opendata.swiss
data.sbb.chSBB station passengers, punctuality, and platform accessibilitySBB Open Data

Development

bash
# Clone
git clone https://github.com/vikramgorla/mcp-swiss.git
cd mcp-swiss

# Install deps
npm install

# Build
npm run build

# Run in dev mode
npm run dev

# Test with MCP Inspector
npx @modelcontextprotocol/inspector node dist/index.js

Testing

bash
npm test

Contributing

We welcome contributions! mcp-swiss follows a strict PR-based workflow to keep the codebase clean and CI always green.

  • CONTRIBUTING.md โ€” full contributor guide:

    • Development setup (clone, install, build, test)
    • Branch model (develop / main / feature branches)
    • Hard workflow rules (no direct pushes, always PRs, regular merge only)
    • Adding a new module (step-by-step with code templates)
    • Integration checklist (all files to update)
    • Code standards (TypeScript, no any, 50K response limit, zero API keys)
  • RELEASING.md โ€” release process for maintainers:

    • Step-by-step release workflow
    • Pre-release checklist
    • Version strategy (minor for features, patch for fixes)
    • Post-release verification
    • CI/CD workflow reference (ci.yml, release.yml, beta.yml, mcp-registry.yml)

Requirements

  • Node.js 20+
  • No API keys or accounts needed
  • Optional: MCP_SWISS_TIMEOUT_MS โ€” per-request upstream timeout in milliseconds (default 30000)

License

MIT โ€” see LICENSE

Similar modules

Browse Government open data