swiss-rail-mcp
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@swiss-rail-mcpWhen's the next train from Bern to Zürich HB?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
swiss-rail-mcp
A zero-auth MCP server for Swiss public transport. Wraps
transport.opendata.ch and
data.sbb.ch into a single MCP server with
12 tools, 3 resources, and 4 prompts.
What it does
Lets an MCP client (Claude Desktop, Claude Code, …) answer real Swiss transport questions without an API key:
"When's the next train from Regensdorf to Zürich HB?"
"What's the last realistic train home from Bern tonight?"
"Any disruptions on the Gotthard line?"
"Does Lugano have step-free access and WiFi?"
Communication is stdio only. No keys, no accounts, no rate-limited proxy — just two public, unauthenticated upstream APIs.
Related MCP server: swiss-public-transport-mcp
Install
Run on demand without installing globally:
uvx swiss-rail-mcpOr install it as a persistent uv tool:
uv tool install swiss-rail-mcpBoth options pull from PyPI and expose the swiss-rail-mcp console
script. Requires Python 3.11+.
Use with Claude Desktop
Add the server to your claude_desktop_config.json:
{
"mcpServers": {
"swiss-rail": {
"command": "uvx",
"args": ["swiss-rail-mcp"]
}
}
}Restart Claude Desktop. The tools, resources, and /swiss-rail:*
slash-commands should appear in the picker.
Use with Claude Code
claude mcp add swiss-rail -- uvx swiss-rail-mcpTools
Core (timetable, via transport.opendata.ch)
Tool | Purpose |
| Resolve a place name to canonical stations. |
| Connections between two stations. |
| Next departures from a station. |
SBB open data (via data.sbb.ch)
Tool | Purpose |
| Active rail-traffic disruptions, optionally filtered. |
| Elevator, WiFi, step-free access, waiting room. |
| Most recent average daily passenger count. |
Conversational (compose the above)
Tool | Purpose |
| Latest realistic train tonight. |
| Outbound options plus latest safe return. |
| Next connections + disruption verdict for a daily commute. |
| Two-leg journey with a deliberate stop. |
| Connections annotated with endpoint accessibility. |
| Connections annotated with a per-leg bike-allowed heuristic. |
All datetimes returned by the tools are ISO 8601 with a Europe/Zurich offset.
Resources
Read-only URIs the client can fetch. Useful for letting the LLM pull formatted markdown views of live data without a tool call.
URI | Returns |
| Markdown list of all active disruptions. |
| Markdown table of the next departures. |
| Markdown summary of facilities + frequency. |
Prompts
Slash-commands in Claude Desktop (/swiss-rail:<name>) and
callable prompts in other MCP clients.
Prompt | Use case |
| Day-trip planner with disruption check. |
| Quick sanity-check before leaving the house. |
| "What's the last train home?" from where you are. |
| Plan a night out with a safe return. |
Example sessions
Real responses from Claude with this MCP server wired up, captured via
claude -p --mcp-config … against the live upstream APIs. Reproduce with
the snippet at the bottom of this section.
Q: When's the next train from Bern to Zürich HB?
A: Next IR from Bern at 03:00, arriving Zürich HB at 04:11 (direct, 71 min, platform 5).
Q: When's the last realistic train home from Bern to Regensdorf tonight?
A: Your last realistic option is the IC at 23:02 from Bern (platform 6) → Zürich HB 00:16 → SN to Regensdorf-Watt, arriving 00:49. After that you're into Nachtnetz SN trains (last one departs Bern 01:06, arrives 02:49) which usually carry a night surcharge.
Q: Are there any active disruptions on the Swiss rail network right now? Give me just the headline count and the most severe one.
A: 10 active events on the feed. The most severe is a critical interruption on the Basel Bad Bf–Freiburg line between Haltingen and Efringen-Kirchen (accident involving a person), affecting ICE, ECE, EC, NJ, RE 7 and RB 27 — service has since resumed but residual delays/cancellations are possible through 05:00.
Q: Does Zürich HB have step-free access and WiFi?
A: Yes — Zürich HB has both step-free access and WiFi (elevators are also available).
Q: How busy is Lugano station compared to Bern?
A: Bern is much busier, averaging ~177,000 daily passengers in 2025 versus ~32,300 at Lugano — roughly 5.5× the foot traffic.
Q: I'm in Bern and want to grab a coffee in Olten for 30 minutes on my way to Basel SBB. Plan the journey.
A: Take the IR from Bern at 03:00 (platform 5), arriving Olten 03:27. Note: the next onward train to Basel SBB isn't until 04:48 (platform 10AB, arriving 05:26), so your "30 min" coffee stretches to about 81 minutes at this hour — if you're traveling later in the day, ask again with a specific time and I'll find a tighter 30-min layover.
Reproduce
cat > /tmp/swiss-mcp.json <<'EOF'
{ "mcpServers": { "swiss-rail": {
"command": "uvx", "args": ["swiss-rail-mcp"]
}}}
EOF
claude -p \
--mcp-config /tmp/swiss-mcp.json \
"When's the next train from Bern to Zürich HB?"Times and disruption counts will differ on each run — these were captured live.
Data sources
Two zero-auth sources. Both are unaffiliated with this project.
transport.opendata.ch— proxies SBB's HAFAS timetable endpoints. Community-funded; be considerate with request volume.data.sbb.ch— SBB's public Opendatasoft Explore API. Disruptions, station facilities, passenger frequency.
For SBB data that requires an API key (real-time delays, occupancy, fares, train compositions, OJP, SIRI), see malkreide/swiss-transport-mcp. This server stays zero-auth on purpose; see LIMITATIONS.md for the full list of what that excludes and the heuristics used in its place.
Development
uv sync
uv run pytest # all tests (hits live APIs)
uv run pytest -m "not integration" # offline only
uv run ruff check
uv run ruff format --checkEnable verbose HTTP logging with SWISS_TRANSPORT_DEBUG=1.
License
MIT — see LICENSE.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseAqualityDmaintenanceSwiss open data MCP server — transport, weather, geodata, companies, etc,. Zero API keys.7624522MIT
- AlicenseAqualityDmaintenanceMCP server for Swiss public transport — connections, stationboards, real-time delays, and direct booking links for SBB.41MIT
- AlicenseAqualityAmaintenanceAn MCP server for Swiss Federal Railways (SBB) open data, enabling AI models to query real-time disruptions, passenger frequencies, station details, and more without an API key.101MIT
- Flicense-qualityDmaintenanceMCP server for real-time German public transport data (HAFAS/VBN network). Enables querying departures, arrivals, journeys, and nearby stops using natural language.
Related MCP Connectors
Swiss Transport MCP — wraps Transport Open Data API (free, no auth)
Canonical SwissTrip MCP — independent SBB/CFF/FFS schedules, prices, and ticket links by SwissTrip.
opendata.swiss MCP — Switzerland's federal open-data portal (CKAN catalogue).
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/kintscher/swiss-rail-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server