swiss-rail-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| SWISS_TRANSPORT_DEBUG | No | Enable verbose HTTP logging. Set to '1' to enable. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| logging | {} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| extensions | {
"io.modelcontextprotocol/ui": {}
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| find_stationA | Search for Swiss public transport stations by name or partial name. Use this tool to resolve a place name to one or more canonical station
records before calling |
| get_connectionsA | Find upcoming train, tram, bus, or boat connections between two stations. Use this tool when the user asks for travel options between two named places in Switzerland (e.g. "next train from Bern to Zürich" or "how do I get from Lugano to Lausanne tomorrow at 8?"). Station names are resolved by the upstream API, so common spellings work directly. |
| get_stationboardA | Show the next departures from a Swiss public transport station. Use this tool when the user asks "what's leaving from ?" or wants the live departure board for a specific stop, without a target destination in mind. |
| get_disruptionsA | Return currently active rail-traffic disruptions on the Swiss network. Use this tool when the user asks "are there any disruptions today?", "is the line to X working?", or wants context on whether to expect delays on a route. Source: SBB rail-traffic-information feed. |
| get_station_facilitiesA | Report fixed facilities at a Swiss station: elevator, WiFi, step-free access, waiting room. Use this tool when the user asks about accessibility, amenities, or what to expect at a station (e.g. "does Bern have step-free access?", "is there WiFi at Zürich HB?"). |
| get_passenger_frequencyA | Return how busy a Swiss station typically is (average daily passengers). Use this tool when the user asks "how busy is X?", "is it a major station?", or wants context for travel-time/connection planning. |
| last_train_homeA | Find the latest realistic train back to Use this tool when the user asks "when's the last train home from
?" or wants reassurance about staying out late. Looks at connections
departing around 22:00 (or |
| plan_evening_outA | Plan an evening out: outbound options now plus the latest viable return. Use this tool when the user is thinking about going somewhere for the evening and wants to know both how to get there and the safest last train back home. |
| commuter_summaryA | Daily commute snapshot: next connections home → work plus any active disruptions. Use this tool for a quick morning sanity-check ("how's my commute looking?"). Combines opendata.ch connections with SBB rail-traffic-information. |
| journey_with_layoverA | Chain two connections with a deliberate layover at a chosen station. Use this tool when the user wants to break a journey on purpose — to
grab food at a hub, meet someone for an hour at a midway station, or
sightsee briefly. Books the first leg ending at the layover, then the
next leg starting at |
| accessible_routeA | Find connections and annotate them with station-level accessibility info. Note: |
| bike_friendly_routeA | Find connections and annotate each leg with a bike-allowed heuristic. Heuristic only: S/RE/IR/R lines typically allow bikes without reservation, IC/EC/ICE require reservations (and on some routes do not allow bikes at all), buses and trams generally do not allow bikes. Always verify on sbb.ch/velo for the actual journey. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| plan_weekend_trip | Plan a Swiss weekend day trip from a given station, returning the same day. |
| morning_commute_check | Same-day commute sanity-check: next connections plus disruptions. |
| last_train_check | Find tonight's last realistic train back to home_station from where the user currently is. |
| evening_out_planner | Plan an evening with safe return: outbound options now and the latest train back. |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| active_disruptions_resource | Active disruptions across the Swiss public transport network; refreshed on each read. |
TDQS
Scored across 12 tools
Several tools are specialized variants of get_connections (plan_evening_out, last_train_home, commuter_summary, journey_with_layover, accessible_route, bike_friendly_route), creating overlap in purpose. However, descriptions specify distinct user intents, so agents can generally choose correctly.
The set mixes get_* verbs (get_connections, get_stationboard, etc.) with descriptive phrases (last_train_home, commuter_summary, journey_with_layover) and adjective-noun compounds (accessible_route, bike_friendly_route). This is not a consistent verb_noun pattern.
12 tools is within the typical range for a domain-specific server, but about half are variants of the same journey-planning function, making the set feel somewhat inflated. Still, it is not excessive.
Covers core Swiss rail tasks: station search, connections, departures, disruptions, station facilities, and passenger frequency. It also adds accessibility and bike heuristics. Minor gaps exist (e.g., no generic 'last connection' tool, ticket info), but the domain is well covered.