Skip to main content
Glama

sbb-mcp

This package is now an alias for swisstrip-mcp. New users should install swisstrip-mcp directly: it is the canonical SwissTrip MCP client. The sbb-mcp name continues to work — it spawns swisstrip-mcp as a child process — so existing integrations don't break.


Independent MCP client by SwissTrip — connects AI assistants to Swiss Federal Railways (SBB / CFF / FFS) data: train schedules, station search, ticket prices, and direct ticket purchase links via SBB's SMAPI.

Thin client. All SBB API access, ticketing, and profile sync run on the hosted SwissTrip server at https://mcp.swisstrip.app/mcp.

Claude Desktop

Add to claude_desktop_config.json:

{
  "mcpServers": {
    "swisstrip": {
      "command": "npx",
      "args": ["-y", "swisstrip-mcp"]
    }
  }
}

Cursor

Add to ~/.cursor/mcp.json:

{
  "mcpServers": {
    "swisstrip": {
      "command": "npx",
      "args": ["-y", "swisstrip-mcp"]
    }
  }
}

ChatGPT (Plus / Pro / Business / Enterprise with Developer Mode)

No install required. Add a custom connector pointing at:

https://mcp.swisstrip.app/mcp

Existing sbb-mcp configurations

Already running npx -y sbb-mcp? Nothing changes — it still works and forwards to the same hosted service. To migrate to the canonical name, swap sbb-mcpswisstrip-mcp in your client config when convenient.

Related MCP server: swiss-rail-mcp

Tools

  • search_stations — find Swiss stations, addresses, and points of interest

  • search_connections — train schedules between two stations

  • get_trip_details — detailed trip with all intermediate stops

  • get_more_connections — earlier or later trains for a previous search

  • get_prices — ticket prices with Halbtax / GA discounts

  • get_ticket_link — direct purchase link to SBB.ch

  • save_profile / get_profile — save your travel profile locally

  • list_travelers — multi-traveler family pricing (requires SWISSTRIP_TOKEN)

Optional configuration

Environment variable

Purpose

SWISSTRIP_TOKEN

Sync your traveler profile from your SwissTrip account. Mint at https://swisstrip.app/settings/developer.

SWISSTRIP_MCP_URL

Override the hosted server URL. Default: https://mcp.swisstrip.app/mcp.

SBB_MCP_URL

Same as above (legacy name, still supported).

Why was this renamed?

sbb-mcp started as the canonical npm package. To protect against future trademark conflicts (the SBB acronym belongs to Schweizerische Bundesbahnen) the canonical implementation now lives at swisstrip-mcp, which is registered under the SwissTrip™ trademark. sbb-mcp and 8 other npm names (sbb-mcp-official, sbb-cff-ffs-mcp, swiss-rail-mcp, swiss-railways-mcp, swiss-train-mcp, swisstrip, swisstrip-ai, swisstrip-server) are 1-line spawners that depend on swisstrip-mcp.

This means: if any one of the SBB-themed names ever needs to be transferred or removed, every existing integration keeps running unchanged because they all forward to the canonical swisstrip-mcp.

License

Proprietary. See LICENSE. © 2026 SwissTrip.

For commercial licensing inquiries: fabsforward2@gmail.com.

Available Tools

9 tools
get_more_connectionsGet More ConnectionsA
Read-onlyIdempotent

Load earlier or later train connections for a previous search. Use the collection ID from search_connections results.

ParametersJSON Schema
NameRequiredDescriptionDefault
collection_idYesCollection ID from search_connections results
directionYes"next" for later trains, "previous" for earlier trains

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and idempotentHint=true. The description adds behavioral context about loading connections from a prior search, aligning with annotations without contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences: first states purpose, second gives prerequisite. No unnecessary words, efficiently front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers all key aspects: purpose, prerequisite, and parameter direction. Could mention that output is additional connections, but schema and sibling context imply it. Adequate for this simple tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, but the description adds meaningful context for collection_id by specifying its origin from search_connections, which goes beyond the schema description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Load' and resource 'train connections', and specifies the context 'for a previous search', effectively distinguishing it from sibling tools like search_connections which performs the initial search.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides clear precondition ('Use the collection ID from search_connections results') and direction parameter guidance, but does not explicitly exclude alternatives or state when not to use (e.g., for fresh searches).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_pricesGet PricesA
Read-onlyIdempotent

Get ticket prices for one or more train connections. Supports Half-Fare card (Halbtax) and GA travelcard discounts. When connected to SwissTrip (SWISSTRIP_TOKEN), pass traveler_names to get family pricing for multiple travelers.

ParametersJSON Schema
NameRequiredDescriptionDefault
trip_idsYesTrip IDs from search_connections results
traveler_typeNoTraveler type (used when no traveler_names given)ADULT
reduction_cardNoSwiss reduction card (used when no traveler_names given)HALF_FARE
traveler_namesNoNames of SwissTrip travelers to price for (e.g. ["Fabian", "Anna"]). Requires SWISSTRIP_TOKEN. Each traveler's reduction card is applied automatically.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and idempotentHint=true. The description adds useful behavioral context such as support for Half-Fare and GA discounts and family pricing via traveler_names, which goes beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences, front-loaded with the main purpose, and every sentence adds value. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 4 parameters (1 required) and no output schema, the description explains reduction cards and traveler_names usage. It does not specify return format, but for a pricing tool it is reasonably complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 100% description coverage, so the description does not need to add much. However, it clarifies the use of reduction_card options and traveler_names, adding meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Get ticket prices for one or more train connections,' using a specific verb and resource. It distinguishes itself from sibling tools like get_trip_details or search_connections.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains when to use the tool (for pricing with reduction cards) and how to use it with 'traveler_names' for family pricing when connected to SwissTrip. It does not explicitly list alternatives but the context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_profileGet Travel ProfileA
Read-onlyIdempotent

Read the user's saved travel profile. Check this before showing prices to use correct reduction card. If no profile exists, ask the user for their details.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide readOnlyHint, destructiveHint false, idempotentHint. Description adds value by explaining the context (check before prices) and fallback (ask user). No contradictions with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with action and purpose. No wasted words; every sentence serves a purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no input parameters and no output schema, the description fully explains the tool's purpose, when to use it, and how to handle missing data (profile not found). Complete for this simple tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Input schema has zero parameters so schema coverage is 100% and no param details needed. Per guidelines, 0 params baseline is 4. Description does not add param info, but it is unnecessary.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it reads the user's saved travel profile, specifies the verb 'Read', and distinguishes from siblings like save_profile (write) and list_travelers (different tool). It gives a specific use case: checking before showing prices.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says 'Check this before showing prices to use correct reduction card' and instructs what to do if no profile exists: 'ask the user for their details'. Provides clear when-to-use and fallback behavior.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_trip_detailsGet Trip DetailsA
Read-onlyIdempotent

Get detailed information about a specific train connection including all intermediate stops, platforms, and occupancy. Use a trip ID from search_connections results.

ParametersJSON Schema
NameRequiredDescriptionDefault
trip_idYesTrip ID from search_connections results

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, destructiveHint, idempotentHint. Description adds value by detailing what information is returned (stops, platforms, occupancy). No contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences, front-loaded with purpose, no extraneous content. Every part earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only tool with one parameter and no output schema, description covers return contents adequately. Could mention format but not critical.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema already describes trip_id with 100% coverage. Description adds provenance context ('from search_connections results'), enhancing understanding beyond schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states it provides detailed info about a specific train connection, listing intermediate stops, platforms, and occupancy. Distinguishes from siblings like search_connections (list) and get_prices (pricing).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says to use a trip ID from search_connections results, providing clear context for when to invoke. Lacks explicit exclusions or alternatives but sufficient for typical use.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_travelersList TravelersA
Read-onlyIdempotent

List all travelers in the user's SwissTrip account (self, partner, kids). Each traveler has their own reduction card. Use their names with get_prices for family trip pricing. Requires SWISSTRIP_TOKEN.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover readOnly, destructive, idempotent hints. Description adds that each traveler has a reduction card and requires SWISSTRIP_TOKEN, which supplements without contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences that front-load purpose, add context, and provide usage advice. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a parameterless list tool with no output schema, the description fully covers purpose, return content, and integration hint.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Input schema has no parameters; schema coverage is 100%. Description adds no parameter details, but none are needed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states 'List all travelers' with specific categories (self, partner, kids), distinguishing it from siblings like get_prices or get_profile.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit guidance to use names with get_prices for family trip pricing, but does not mention alternatives or when not to use.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

save_profileSave Travel ProfileA
Idempotent

Save the user's travel profile locally for future sessions. Call this after asking the user for their details (name, date of birth, reduction card). Data is stored at ~/.sbb-mcp/profile.json.

ParametersJSON Schema
NameRequiredDescriptionDefault
first_nameNoFirst name (for ticket booking)
last_nameNoLast name (for ticket booking)
date_of_birthNoDate of birth YYYY-MM-DD (for age-based pricing)
reduction_cardNoSwiss reduction card: HALF_FARE (Halbtax), GA (General Abonnement), or NONE
reduction_card_valid_untilNoReduction card expiry date YYYY-MM-DD (ask the user when their Halbtax/GA expires)

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate idempotentHint=true (write operation). Description adds concrete behavioral context: data stored at ~/.sbb-mcp/profile.json, persistence across sessions. No contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences, front-loaded with purpose and usage guidance, zero wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers storage location and usage context, but omits details about return behavior (since no output schema), overwrite behavior, and error cases. Adequate but not fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with detailed parameter descriptions. Description merely summarizes fields without adding new semantic meaning beyond what schema provides. Baseline 3 appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Save', the resource 'travel profile', and the context ('locally for future sessions'). It distinguishes from sibling 'get_profile' by implying this is the write counterpart.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states when to call: 'after asking the user for their details'. Does not explicitly mention when not to use or alternative tools, but sibling context provides differentiation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_connectionsSearch ConnectionsA
Read-onlyIdempotent

Find train connections between two Swiss stations. Returns schedules with departure/arrival times, duration, transfers, and trip IDs for pricing.

ParametersJSON Schema
NameRequiredDescriptionDefault
fromYesOrigin station name or ID (e.g. "Zurich HB" or "8503000")
toYesDestination station name or ID (e.g. "Bern" or "8507000")
dateNoTravel date in YYYY-MM-DD format (default: today)
timeNoDeparture time in HH:MM format (default: now)
arrival_timeNoIf true, the time parameter is treated as desired arrival time

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true. The description adds value by specifying the return format (schedules, times, duration, transfers, trip IDs) and implies the operation is non-destructive, which aligns with annotations. No contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, completely free of fluff, front-loaded with the action and resource. Every word adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the simplicity of the tool, the annotations, and the schema, the description provides all necessary context: it states the operation, the target (Swiss stations), and the return data. No output schema is needed as the description covers the key fields.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with parameter descriptions. The description does not add extra semantic information beyond the schema. Baseline 3 is appropriate as the schema already documents each parameter well.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: finding train connections between two Swiss stations. It specifies the returned data (schedules, times, duration, transfers, trip IDs) and distinguishes itself from siblings like 'search_stations' and 'get_more_connections' by focusing on connections specifically.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for initial connection searches between stations but does not explicitly state when not to use it or mention alternative tools like 'get_more_connections'. The context is clear, but explicit alternatives are missing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_stationsSearch StationsA
Read-onlyIdempotent

Search for Swiss train stations, addresses, or points of interest by name. Returns station IDs needed for other tools.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesStation name to search for (e.g. "Zurich", "Bern", "Interlaken")
limitNoMaximum number of results

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, destructiveHint, and idempotentHint. Description adds value by stating the tool returns station IDs needed for other tools, but lacks details on rate limits or result format.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence, concise, front-loaded with action verb and specific resource. No redundant information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema; description only mentions 'returns station IDs' but omits details on the output structure (e.g., list, fields). Could provide more context for agent to parse results.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with clear descriptions for both parameters (query and limit). Description does not add additional parameter meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states verb 'Search', resource 'Swiss train stations, addresses, or points of interest', and notes that it returns station IDs needed for other tools. This distinguishes it from sibling tools like search_connections.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Implies use as a prerequisite for other tools by mentioning station IDs, but does not explicitly state when to use vs alternatives or when not to use.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 9 tool updatesv0.5.0
    • First observedget_more_connections
    • First observedget_prices
    • First observedget_profile
    • First observedget_ticket_link
    • First observedget_trip_details
    • First observedlist_travelers
    • First observedsave_profile
    • First observedsearch_connections
    • First observedsearch_stations

TDQS

A4.3/5.0
Disambiguation5/5

Each tool targets a distinct aspect: station search, connection search, trip details, pricing, ticket link, loading more connections, profile read/save, and traveler listing. No overlapping purposes.

Naming Consistency5/5

All tools follow a consistent verb_noun pattern with underscores (e.g., search_connections, get_prices, list_travelers), making them predictable and easy to navigate.

Tool Count5/5

9 tools is well-scoped for a Swiss railway assistant, covering search, planning, pricing, purchase, and profile management without bloat or deficiency.

Completeness4/5

Covers core workflows: station search, connection search, trip details, pricing, purchase link, and profile. Minor gap in real-time delay information, but overall complete for travel planning and purchasing.

Maintenance

ActivityInactive
ResponsivenessUnresponsive

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

Latest Blog Posts

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/Fabsbags/sbb-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server