Skip to content

vikramgorla/mcp-swiss

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

200 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
mcp-swiss

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

Install in VS Code Install in VS Code Insiders

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"]
    }
  }
}
Preset Modules Tools Token Savings
commuter transport, weather, holidays 14 81%
outdoor weather, avalanche, hiking, earthquakes, dams, snow 19 75%
business companies, geodata, post, energy, statistics, snb 24 67%
citizen parliament, voting, holidays, news 17 77%
minimal transport 5 93%
full all 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:

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?" 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)

Tool Description
search_stations Find stations/stops by name or location
get_connections Journey planner between any two points
get_departures Live departures from a station
get_arrivals Live arrivals at a station
get_nearby_stations Stations near coordinates

🌤️ Weather & Hydrology (6 tools)

Tool Description
get_weather Current conditions at a MeteoSwiss station
list_weather_stations All ~160 MeteoSwiss stations with metadata
get_weather_history Historical weather data (up to 32 days)
get_water_level River/lake level + temperature (BAFU)
list_hydro_stations All 400+ hydrological monitoring stations
get_water_history Historical hydrology data

🗺️ Geodata / swisstopo (6 tools)

Tool Description
geocode Swiss address → coordinates
reverse_geocode Coordinates → Swiss address
search_places Swiss place names, mountains, lakes, features
get_solar_potential Rooftop solar irradiation at a location
identify_location All geographic data layers at a point
get_municipality Municipality info by name

🏢 Companies / ZEFIX (5 tools)

Tool Description
search_companies Search by name, canton, legal form
get_company Full company details by ZEFIX ehraid
search_companies_by_address Companies registered at an address
list_cantons All 26 Swiss cantons
list_legal_forms AG, GmbH, and all Swiss legal forms

🎄 Holidays (3 tools)

Tool Description
get_public_holidays Swiss public holidays by year, optionally filtered by canton
get_school_holidays School holiday periods by year and canton
is_holiday_today Quick check if today is a public holiday

🏛️ Parliament (9 tools) — OpenParlData.ch

Tool Description
search_parliament_business Search federal political affairs (bills, motions, questions)
get_parliament_members List parliament members by canton, party, or activity
get_parliament_votes Voting results for a specific affair
get_session_schedule Upcoming/recent parliament sessions
search_parliament_speeches Debate speeches for an affair
get_politician_interests Declared interests and mandates of a member
search_cantonal_affairs Search across 26 cantonal parliaments
get_parliamentary_documents Official documents for an affair
get_committee_meetings Committee/commission meeting schedule

🏔️ Avalanche (2 tools)

Tool Description
get_avalanche_bulletin Current avalanche bulletin with danger levels and PDF links
list_avalanche_regions All 22 Swiss avalanche warning regions

💨 Air Quality (2 tools)

Tool Description
list_air_quality_stations All 14 NABEL monitoring stations
get_air_quality Station info, Swiss legal limits (LRV), and BAFU data links

📮 Swiss Post (4 tools)

Tool Description
lookup_postcode PLZ → locality, canton, coordinates
search_postcode City name → matching postcodes
list_postcodes_in_canton All postcodes in a canton
track_parcel Generate Swiss Post tracking URL for a parcel

⚡ Energy Prices (3 tools)

Tool Description
get_electricity_tariff Electricity tariff by municipality with component breakdown
compare_electricity_tariffs Compare electricity prices across municipalities
search_municipality_energy Find municipality ID for tariff lookup

📊 Statistics / BFS (3 tools)

Tool Description
get_population Population by canton or municipality from BFS STATPOP
search_statistics Search BFS datasets on opendata.swiss
get_statistic Fetch detailed dataset information

🏦 SNB Exchange Rates (3 tools)

Tool Description
list_currencies List all currencies available from the Swiss National Bank (SNB)
get_exchange_rate Get the current CHF exchange rate for any currency
get_exchange_rate_history Get historical monthly CHF exchange rates with date filtering

♻️ Recycling / Waste Collection (3 tools)

Tool Description
get_waste_collection Next waste collection dates by Zurich ZIP code and waste type
list_waste_types List all supported waste types with descriptions
get_waste_calendar Full waste collection calendar for a ZIP code (upcoming dates)

📰 Swiss News (2 tools)

Tool Description
get_swiss_news Latest Swiss headlines from SRF by category (Switzerland/international/economy)
search_swiss_news Search SRF news by keyword across all categories

🗳️ Voting (3 tools)

Tool Description
get_voting_results Swiss popular vote results from Basel-Stadt open data
search_votes Search popular votes by keyword (German/French/Italian)
get_vote_details Detailed per-district breakdown of a specific vote

🌊 Dams & Reservoirs (3 tools)

Tool Description
search_dams Search Swiss federal dams by name or keyword
get_dams_by_canton List all federal dams in a canton
get_dam_details Detailed info on a specific dam (height, volume, purpose)

🥾 Hiking / Trail Closures (2 tools)

Tool Description
get_trail_closures Swiss trail closures and hiking alerts from swisstopo
get_trail_closures_nearby Trail closures near given coordinates

🏠 Real Estate (3 tools)

Tool Description
get_property_price_index Swiss property price index (BFS Immo-Monitoring)
search_real_estate_data Search BFS real estate datasets on opendata.swiss
get_rent_index Swiss rent index and housing cost data from BFS

🚗 Traffic / ASTRA (3 tools)

Tool Description
get_traffic_count Traffic counting station data (ASTRA) — daily volumes and heavy traffic share
get_traffic_by_canton List ASTRA traffic counting stations filtered by canton
get_traffic_nearby Find traffic counting stations near given coordinates

🌍 Earthquakes / SED (3 tools)

Tool Description
get_recent_earthquakes Recent seismic events in/around Switzerland from the Swiss Seismological Service (SED) at ETH Zürich
get_earthquake_details Full details for a specific seismic event by SED event ID
search_earthquakes_by_location Earthquakes near given coordinates with configurable radius, time range, and limit

❄️ Snow Conditions / SLF (3 tools)

Tool Description
get_snow_conditions Current snow depth and new snow (24h) across Switzerland from SLF IMIS stations, filterable by canton/altitude
list_snow_stations All 307 SLF snow measurement stations (IMIS automatic + manual study plots)
get_snow_measurements Detailed snow and weather measurements for a specific SLF station

Data Sources

All official Swiss open data — no API keys required:

Source Data Docs
transport.opendata.ch SBB, PostBus, trams API docs
api.existenz.ch MeteoSwiss weather + BAFU hydrology API docs
api3.geo.admin.ch swisstopo federal geodata API docs
zefix.admin.ch Federal company registry Swagger
openholidaysapi.org Swiss public & school holidays API docs
OpenParlData.ch Swiss Parliament data — federal & cantonal (CC BY 4.0) API docs
whiterisk.ch / aws.slf.ch SLF/WSL avalanche bulletins SLF
geo.admin.ch — BAFU/NABEL Swiss air quality monitoring stations BAFU NABEL
geo.admin.ch — swisstopo Swiss postcodes (Amtliches Ortschaftenverzeichnis) geo.admin.ch
strompreis.elcom.admin.ch ElCom electricity tariffs by municipality ElCom
pxweb.bfs.admin.ch + opendata.swiss BFS population statistics (STATPOP) + datasets BFS
data.snb.ch Swiss National Bank CHF exchange rates SNB data portal
openerz.metaodi.ch Zurich waste collection calendar (OpenERZ) OpenERZ
srf.ch SRF Swiss news headlines SRF
data.bs.ch Basel-Stadt popular vote results Open Data BS
geo.admin.ch — SFOE Swiss federal dam registry SFOE
geo.admin.ch — swisstopo Swiss trail closures and hiking alerts swisstopo
pxweb.bfs.admin.ch BFS property prices + rent index BFS housing
geo.admin.ch — ASTRA Traffic counting stations + daily volumes ASTRA
arclink.ethz.ch Swiss Seismological Service earthquakes (SED/ETH) SED
measurement-api.slf.ch SLF 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

About

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

Resources

License

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Packages

 
 
 

Contributors