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.
68 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, councillors, session schedule
🏔️ 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
Installation
Quick Start
npx mcp-swiss
That's it. No API keys, no .env files, no accounts. Pick your client below and paste the config.
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
{
"mcpServers" : {
"swiss" : {
"command" : "npx" ,
"args" : [ "-y" , "mcp-swiss" ]
}
}
}
Restart Claude Desktop after saving.
Claude Code (CLI)
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:
{
"mcpServers" : {
"swiss" : {
"command" : "npx" ,
"args" : [ "-y" , "mcp-swiss" ]
}
}
}
Option B: Global config — create ~/.cursor/mcp.json:
{
"mcpServers" : {
"swiss" : {
"command" : "npx" ,
"args" : [ "-y" , "mcp-swiss" ]
}
}
}
Option C: Via Cursor Settings UI
Open Cursor Settings
Go to Features → MCP Servers
Click + Add new global MCP server
Paste the JSON config above
VS Code (GitHub Copilot)
One-click Install
CLI Install
code --add-mcp '{"name":"swiss","command":"npx","args":["-y","mcp-swiss"]}'
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):
{
"mcp" : {
"servers" : {
"swiss" : {
"command" : "npx" ,
"args" : [ "-y" , "mcp-swiss" ]
}
}
}
}
Or add to .vscode/mcp.json in your workspace (shareable with your team):
{
"servers" : {
"swiss" : {
"command" : "npx" ,
"args" : [ "-y" , "mcp-swiss" ]
}
}
}
Windsurf
Add to ~/.codeium/windsurf/model_config.json:
{
"mcpServers" : {
"swiss" : {
"command" : "npx" ,
"args" : [ "-y" , "mcp-swiss" ]
}
}
}
Cline (VS Code)
Open VS Code settings.json and add:
{
"cline.mcpServers" : {
"swiss" : {
"command" : "npx" ,
"args" : [ "-y" , "mcp-swiss" ]
}
}
}
Any MCP Client
mcp-swiss uses stdio transport and requires no environment variables. The universal config:
{
"command" : "npx" ,
"args" : [ "-y" , "mcp-swiss" ]
}
This works with any MCP-compatible client — just plug it in.
Demo Prompts
Once connected, try asking your AI:
Prompt What 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?" get_latest_votes"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
68 tools across 20 modules. Full specifications: docs/tool-specs.md · Machine-readable: docs/tools.schema.json
Tool Description 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
Tool Description 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
Tool Description 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
Tool Description search_companiesSearch by name, canton, legal form get_companyFull company details by ZEFIX ehraid search_companies_by_addressCompanies registered at an address list_cantonsAll 26 Swiss cantons list_legal_formsAG, GmbH, and all Swiss legal forms
Tool Description 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
Tool Description search_parliament_businessSearch bills, motions, interpellations get_latest_votesRecent parliamentary vote results search_councillorsFind members of the National/States Council get_sessionsParliamentary session schedule
Tool Description get_avalanche_bulletinCurrent avalanche bulletin with danger levels and PDF links list_avalanche_regionsAll 22 Swiss avalanche warning regions
Tool Description list_air_quality_stationsAll 14 NABEL monitoring stations get_air_qualityStation info, Swiss legal limits (LRV), and BAFU data links
📮 Swiss Post (4 tools)
Tool Description 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
Tool Description get_electricity_tariffElectricity tariff by municipality with component breakdown compare_electricity_tariffsCompare electricity prices across municipalities search_municipality_energyFind municipality ID for tariff lookup
Tool Description get_populationPopulation by canton or municipality from BFS STATPOP search_statisticsSearch BFS datasets on opendata.swiss get_statisticFetch detailed dataset information
Tool Description 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
Tool Description 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)
Tool Description get_swiss_newsLatest Swiss headlines from SRF by category (Switzerland/international/economy) search_swiss_newsSearch SRF news by keyword across all categories
Tool Description 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
Tool Description 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)
Tool Description get_trail_closuresSwiss trail closures and hiking alerts from swisstopo get_trail_closures_nearbyTrail closures near given coordinates
Tool Description 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
Tool Description 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
Tool Description 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
Data Sources
All official Swiss open data — no API keys required:
Development
git clone https://github.com/vikramgorla/mcp-swiss.git
cd mcp-swiss
npm install
npm run build
npm run dev
npx @modelcontextprotocol/inspector node dist/index.js
Testing
npm test
Contributing
We welcome contributions! mcp-swiss follows a strict PR-based workflow to keep the codebase clean and CI always green.
Quick links
Requirements
Node.js 20+
No API keys or accounts needed
License
MIT — see LICENSE