mcp-swiss

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

mcp-swiss

Swiss open data for AI — zero config, zero API keys

npm CI License MCP Downloads Stars Node .mcpb Claude Desktop

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.

76 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

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.


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
{
  "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

  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

CLI Install

# 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+PPreferences: 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.

Docker

docker pull vikramgorla/mcp-swiss

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

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

# Use with Claude Desktop

For Claude Desktop, update your config to use Docker:

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

Also available on GitHub Container Registry:

docker pull ghcr.io/vikramgorla/mcp-swiss

Module Filtering

By default, mcp-swiss loads all 21 modules (76 tools). For better token efficiency, load only the modules you need:

Select specific modules

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

Use presets

{
  "mcpServers": {
    "swiss": {
      "command": "npx",
      "args": ["-y", "mcp-swiss", "--preset", "commuter"]
    }
  }
}
PresetModulesToolsToken Savings
commutertransport, weather, holidays1481%
outdoorweather, avalanche, hiking, earthquakes, dams, snow1975%
businesscompanies, geodata, post, energy, statistics, snb2467%
citizenparliament, voting, holidays, news1777%
minimaltransport593%
fullall 21 modules (default)76

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

76 tools across 21 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_addressCompanies registered at an address
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_bulletinCurrent avalanche bulletin with danger levels and PDF links
list_avalanche_regionsAll 22 Swiss avalanche warning regions

💨 Air Quality (2 tools)

ToolDescription
list_air_quality_stationsAll 14 NABEL monitoring stations
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

🏠 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

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

Development

# 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

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

  • 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

License

MIT — see LICENSE

Related Servers