sbb-mcp
Swiss Federal Railways (SBB/CFF/FFS) MCP server — real-time train schedules, ticket prices with Half-Fare/GA support, and direct purchase links via official SBB SMAPI
sbb-mcp
MCP server for Swiss Federal Railways (SBB/CFF/FFS) -- real-time train schedules, prices, and ticket purchase links for any AI assistant.
Works with Claude Desktop, Claude Code, Cursor, Windsurf, VS Code Copilot, ChatGPT, and any MCP-compatible AI client.
Features
- Search stations -- find any Swiss train station by name
- Train connections -- real-time schedules with departure/arrival times, platforms, transfers
- Ticket prices -- 1st/2nd class with Half-Fare (Halbtax) and GA travelcard support
- Purchase links -- direct deep links to buy tickets on SBB.ch
- Pagination -- browse earlier/later connections
- Trip details -- intermediate stops, occupancy, platform changes
- Journey planning -- built-in prompt for end-to-end trip planning
- Mock mode -- works without credentials for testing and demos
Quick Start
Claude Desktop
Add to your claude_desktop_config.json:
{
"mcpServers": {
"sbb": {
"command": "npx",
"args": ["-y", "sbb-mcp"],
"env": {
"SMAPI_CLIENT_ID": "your-client-id",
"SMAPI_CLIENT_SECRET": "your-secret",
"SMAPI_SCOPE": "your-scope",
"SMAPI_CONTRACT_ID": "your-contract-id"
}
}
}
}
Claude Code
claude mcp add sbb -- npx -y sbb-mcp
Cursor
Add to .cursor/mcp.json:
{
"mcpServers": {
"sbb": {
"command": "npx",
"args": ["-y", "sbb-mcp"],
"env": {
"SMAPI_CLIENT_ID": "your-client-id",
"SMAPI_CLIENT_SECRET": "your-secret",
"SMAPI_SCOPE": "your-scope",
"SMAPI_CONTRACT_ID": "your-contract-id"
}
}
}
}
Windsurf
Add to ~/.codeium/windsurf/mcp_config.json:
{
"mcpServers": {
"sbb": {
"command": "npx",
"args": ["-y", "sbb-mcp"],
"env": {
"SMAPI_CLIENT_ID": "your-client-id",
"SMAPI_CLIENT_SECRET": "your-secret",
"SMAPI_SCOPE": "your-scope",
"SMAPI_CONTRACT_ID": "your-contract-id"
}
}
}
}
VS Code Copilot
Add to .vscode/mcp.json:
{
"servers": {
"sbb": {
"command": "npx",
"args": ["-y", "sbb-mcp"],
"env": {
"SMAPI_CLIENT_ID": "your-client-id",
"SMAPI_CLIENT_SECRET": "your-secret",
"SMAPI_SCOPE": "your-scope",
"SMAPI_CONTRACT_ID": "your-contract-id"
}
}
}
}
ChatGPT
ChatGPT supports custom MCP servers via Developer Mode. No approval needed — works on Plus, Pro, Team, Enterprise, and Edu plans.
- Go to Settings → Apps & Connectors → Advanced
- Enable Developer Mode
- Click Create under Connectors
- Enter:
- Name: SBB Swiss Railways
- URL:
https://sbb-mcp-production.up.railway.app/mcp
- Save — SBB tools now appear in your conversations
Then just ask ChatGPT: "Find me trains from Zurich to Bern tomorrow at 9am"
Smithery
Install via Smithery:
npx @smithery/cli mcp add fabsforward2-zhoi/sbb-mcp
Demo Mode (No Credentials)
Run without any environment variables to use mock data:
npx sbb-mcp
This lets you test the MCP server with realistic Swiss station data without SBB API credentials.
Tools
search_stations
Search for Swiss train stations by name. Returns station IDs needed for other tools.
Input:
query(string, required) -- Station name, e.g. "Zurich", "Bern", "Interlaken"limit(number, optional) -- Max results (default: 10)
Example: "Find stations matching Luzern"
search_connections
Find train connections between two stations. Automatically resolves station names to IDs.
Input:
from(string, required) -- Origin station name or ID (e.g. "Zurich HB" or "8503000")to(string, required) -- Destination station name or IDdate(string, optional) -- Travel date YYYY-MM-DDtime(string, optional) -- Departure time HH:MMarrival_time(boolean, optional) -- Treat time as arrival time
Example: "Show me trains from Zurich to Bern tomorrow at 9am"
get_trip_details
Get detailed stop-by-stop information for a connection including intermediate stops, platforms, and occupancy forecasts.
Input:
trip_id(string, required) -- Trip ID from search_connections
get_more_connections
Load earlier or later trains for a previous search.
Input:
collection_id(string, required) -- Collection ID from search_connectionsdirection("next" | "previous") -- Later or earlier trains
get_prices
Get ticket prices with Swiss reduction card support.
Input:
trip_ids(string[], required) -- Trip IDs from search_connectionstraveler_type("ADULT" | "CHILD", default: "ADULT")reduction_card("HALF_FARE" | "GA" | "NONE", default: "HALF_FARE")
Example: "How much is a ticket from Zurich to Zermatt with Half-Fare card?"
get_ticket_link
Get a direct purchase link to buy the ticket on SBB.ch. On mobile with the SBB app installed, opens directly in the app with Halbtax/GA applied automatically.
Input:
trip_id(string, required) -- Trip ID to purchasefrom_name(string, required) -- Origin station namefrom_id(string, required) -- Origin station IDto_name(string, required) -- Destination station nameto_id(string, required) -- Destination station IDdate(string, required) -- Travel date YYYY-MM-DDtime(string, required) -- Departure time HH:MMtraveler_type("ADULT" | "CHILD", default: "ADULT")reduction_card("HALF_FARE" | "GA" | "NONE", default: "HALF_FARE")
Prompts
plan_journey
End-to-end journey planning prompt. Searches connections, compares prices, and provides ticket links.
Input:
from(string, required) -- Origin stationto(string, required) -- Destination stationdate(string, optional) -- Travel date
Environment Variables
| Variable | Required | Description |
|---|---|---|
SMAPI_CLIENT_ID | Yes* | OAuth 2.0 client ID from SBB Developer Portal |
SMAPI_CLIENT_SECRET | Yes* | OAuth 2.0 client secret |
SMAPI_SCOPE | Yes* | OAuth scope |
SMAPI_CONTRACT_ID | Yes* | SBB business contract ID |
SMAPI_ENV | No | int (default) or prod |
SMAPI_TENANT_ID | No | Azure AD tenant (defaults to SBB tenant) |
*Without credentials, the server runs in mock mode with realistic demo data.
Available on
Also available as: sbb-mcp-official | swiss-rail-mcp | sbb-cff-ffs-mcp | swiss-train-mcp | swiss-railways-mcp
About
Built on the official SBB Swiss Mobility API (SMAPI) with OSDM-compliant journey planning and pricing. Covers the entire Swiss public transport network including SBB, BLS, SOB, and regional operators.
SBB (Schweizerische Bundesbahnen) / CFF (Chemins de fer federaux suisses) / FFS (Ferrovie federali svizzere) -- Swiss Federal Railways operates one of the densest rail networks in the world with over 10,000 daily connections.
License
FSL-1.1-MIT -- Functional Source License. Free to use for any non-competing purpose. Converts to MIT after 2 years. See LICENSE for details.
Máy chủ liên quan
MCP-HA-Connect
A production-ready Model Context Protocol (MCP) server for Home Assistant integration with AI assistants like Claude.
ThreatByte-MCP
ThreatByte-MCP is a deliberately vulnerable, MCP-based case management web app. It mirrors a realistic SOC analyst workflow with a server-rendered UI and a real MCP server. The MCP tools are intentionally vulnerable for training and demonstration.
stock-scanner
49-tool MCP server for stock and crypto market data — quotes, technicals, SEC filings, insider trades, options flow, earnings, and sentiment analysis. 7 modules work with zero API keys
Lightweight PowerShell MCP framework
Lightweight PowerShell MCP framework. Expose custom PowerShell functions through a pure-PowerShell MCP server to integrate with MCP-compliant AI agents.
SafeDep
Real-time malicious package protection for AI coding agents
relate2-narratives
Agent-native narrative intelligence marketplace. 144 structured stories, 37 characters, human complexity scenarios. Pay per asset via x402 on Base Mainnet.
Plex
Provides AI assistants with comprehensive access to a Plex Media Server.
SettlementWitness MCP
SettlementWitness is a stateless MCP verification tool that returns replay-stable settlement receipts (PASS/FAIL) by forwarding task_id, spec, and output to the Default Settlement Verifier. Designed for agent execution gating and x402 settlement flows.
mcp-server-openai-bridge
Bridge to OpenAI API. Access GPT, GPT-o and other OpenAI models through MCP.
Android-Mobile-MCP
This MCP server enabling AI agents to control Android devices.