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

npm version License: FSL-1.1-MIT smithery badge

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.

  1. Go to SettingsApps & ConnectorsAdvanced
  2. Enable Developer Mode
  3. Click Create under Connectors
  4. Enter:
    • Name: SBB Swiss Railways
    • URL: https://sbb-mcp-production.up.railway.app/mcp
  5. 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 ID
  • date (string, optional) -- Travel date YYYY-MM-DD
  • time (string, optional) -- Departure time HH:MM
  • arrival_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_connections
  • direction ("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_connections
  • traveler_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 purchase
  • from_name (string, required) -- Origin station name
  • from_id (string, required) -- Origin station ID
  • to_name (string, required) -- Destination station name
  • to_id (string, required) -- Destination station ID
  • date (string, required) -- Travel date YYYY-MM-DD
  • time (string, required) -- Departure time HH:MM
  • traveler_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 station
  • to (string, required) -- Destination station
  • date (string, optional) -- Travel date

Environment Variables

VariableRequiredDescription
SMAPI_CLIENT_IDYes*OAuth 2.0 client ID from SBB Developer Portal
SMAPI_CLIENT_SECRETYes*OAuth 2.0 client secret
SMAPI_SCOPEYes*OAuth scope
SMAPI_CONTRACT_IDYes*SBB business contract ID
SMAPI_ENVNoint (default) or prod
SMAPI_TENANT_IDNoAzure 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

NotebookLM Web Importer

Nhập trang web và video YouTube vào NotebookLM chỉ với một cú nhấp. Được tin dùng bởi hơn 200.000 người dùng.

Cài đặt tiện ích Chrome