mcp-swiss

vikramgorla/mcp-swiss
18 starsMITCommunity

Install to Claude Code

This server doesn't publish a one-line install command. Follow the setup in the source repository.

Summary

mcp-swiss](https://glama.ai/mcp/servers/vikramgorla/mcp-swiss/badges/score.svg)](https://glama.ai/mcp/servers/vikramgorla/mcp-swiss) ๐Ÿ“‡ โ˜๏ธ - 68 tools for Swiss open data: transport, weather, geodata, companies, parliament, and more.

README.md

<div align="center">

<img src="assets/icon.svg" width="120" height="120" alt="mcp-swiss" />

mcp-swiss

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

![npm](https://www.npmjs.com/package/mcp-swiss) ![CI](https://github.com/vikramgorla/mcp-swiss/actions/workflows/ci.yml) ![License](https://opensource.org/licenses/MIT) ![MCP](https://modelcontextprotocol.io) ![Downloads](https://www.npmjs.com/package/mcp-swiss) ![Stars](https://github.com/vikramgorla/mcp-swiss) ![Node](https://nodejs.org) ![.mcpb](https://github.com/vikramgorla/mcp-swiss/releases/latest/download/mcp-swiss.mcpb) ![Claude Desktop](https://github.com/vikramgorla/mcp-swiss/releases/latest/download/mcp-swiss.mcpb)

Install ยท Tools ยท Demo ยท Data Sources

</div>

---

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](https://github.com/vikramgorla/mcp-swiss/releases/latest/download/mcp-swiss.mcpb)

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

<img src="https://img.shields.io/badge/VS_Code-Install_Server-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white" alt="Install in VS Code"> <img src="https://img.shields.io/badge/VS_Code_Insiders-Install_Server-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white" alt="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+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.

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

Related MCP servers

Browse all โ†’