sbb-mcp
This server connects AI assistants to Swiss Federal Railways (SBB) data, enabling train schedule lookups, ticket pricing, and direct ticket purchasing.
search_stations: Find Swiss train stations, addresses, or points of interest by name.search_connections: Look up train connections between two stations, returning schedules with departure/arrival times, duration, and transfers.get_trip_details: Retrieve detailed info about a specific connection, including intermediate stops, platforms, and occupancy.get_more_connections: Load earlier or later trains for a previously searched route.get_prices: Fetch ticket prices with Half-Fare (Halbtax) and GA travelcard discounts, supporting multi-traveler/family pricing.get_ticket_link: Generate a direct purchase link to SBB.ch (or the SBB app on mobile), with reduction cards and family travelers applied automatically.save_profile/get_profile: Store and retrieve a user's local travel profile (name, date of birth, reduction card) for personalization.list_travelers: List travelers in a SwissTrip account for family pricing (requires aSWISSTRIP_TOKEN).
sbb-mcp
This package is now an alias for
swisstrip-mcp. New users should installswisstrip-mcpdirectly: it is the canonical SwissTrip MCP client. Thesbb-mcpname continues to work — it spawnsswisstrip-mcpas 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.
Install (recommended: use the canonical name)
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/mcpExisting 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-mcp → swisstrip-mcp in your client config when convenient.
Related MCP server: swiss-rail-mcp
Tools
search_stations— find Swiss stations, addresses, and points of interestsearch_connections— train schedules between two stationsget_trip_details— detailed trip with all intermediate stopsget_more_connections— earlier or later trains for a previous searchget_prices— ticket prices with Halbtax / GA discountsget_ticket_link— direct purchase link to SBB.chsave_profile/get_profile— save your travel profile locallylist_travelers— multi-traveler family pricing (requiresSWISSTRIP_TOKEN)
Optional configuration
Environment variable | Purpose |
| Sync your traveler profile from your SwissTrip account. Mint at https://swisstrip.app/settings/developer. |
| Override the hosted server URL. Default: |
| 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 toolsget_more_connectionsGet More ConnectionsARead-onlyIdempotent
Load earlier or later train connections for a previous search. Use the collection ID from search_connections results.
| Name | Required | Description | Default |
|---|---|---|---|
| collection_id | Yes | Collection ID from search_connections results | |
| direction | Yes | "next" for later trains, "previous" for earlier trains |
TDQS
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.
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.
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.
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.
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.
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 PricesARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| trip_ids | Yes | Trip IDs from search_connections results | |
| traveler_type | No | Traveler type (used when no traveler_names given) | ADULT |
| reduction_card | No | Swiss reduction card (used when no traveler_names given) | HALF_FARE |
| traveler_names | No | Names of SwissTrip travelers to price for (e.g. ["Fabian", "Anna"]). Requires SWISSTRIP_TOKEN. Each traveler's reduction card is applied automatically. |
TDQS
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.
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.
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.
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.
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.
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 ProfileARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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_ticket_linkGet Ticket LinkARead-only
Get a direct purchase link to buy a train ticket on SBB.ch. Only call this when the user wants to buy a specific ticket. On mobile with SBB app installed, opens directly in the app with Halbtax/GA applied automatically. Pass traveler_names for family tickets when connected to SwissTrip.
| Name | Required | Description | Default |
|---|---|---|---|
| trip_id | Yes | Trip ID to purchase | |
| from_name | Yes | Origin station name (e.g. "Zürich HB") | |
| from_id | Yes | Origin station ID (e.g. "8503000") | |
| to_name | Yes | Destination station name (e.g. "Bern") | |
| to_id | Yes | Destination station ID (e.g. "8507000") | |
| date | Yes | Travel date YYYY-MM-DD | |
| time | Yes | Departure time HH:MM | |
| traveler_type | No | Traveler type (used when no traveler_names given) | ADULT |
| reduction_card | No | Swiss reduction card (used when no traveler_names given) | HALF_FARE |
| traveler_names | No | SwissTrip traveler names for family tickets. Requires SWISSTRIP_TOKEN. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=true and destructiveHint=false, which the description supports by stating it retrieves a purchase link. The description adds context on mobile app behavior (opens directly with Halbtax/GA) and the need for SWISSTRIP_TOKEN with traveler_names, going beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three well-structured sentences. The first sentence states core purpose, the second clarifies invocation context, and the third adds a special case. No redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 10 parameters, no output schema, and annotations provide safety profile, the description covers key behaviors (purchase link retrieval, mobile app integration, SwissTrip requirement). It does not explicitly describe the return format (URL) but 'Get a direct purchase link' strongly implies it. Missing error handling info, but overall sufficient for selection and invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, but the description adds meaningful nuance: 'Pass traveler_names for family tickets when connected to SwissTrip' and implies that reduction_card/traveler_type are defaults when traveler_names absent. This augments the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Get a direct purchase link to buy a train ticket on SBB.ch.' It uses a specific verb and resource, distinguishing it from siblings like get_prices or get_trip_details.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'Only call this when the user wants to buy a specific ticket.' Provides conditional guidance for mobile app use and when to pass traveler_names, though does not contrast with alternative sibling tools beyond this.
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 DetailsARead-onlyIdempotent
Get detailed information about a specific train connection including all intermediate stops, platforms, and occupancy. Use a trip ID from search_connections results.
| Name | Required | Description | Default |
|---|---|---|---|
| trip_id | Yes | Trip ID from search_connections results |
TDQS
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.
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.
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.
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.
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.
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 TravelersARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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 ProfileAIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| first_name | No | First name (for ticket booking) | |
| last_name | No | Last name (for ticket booking) | |
| date_of_birth | No | Date of birth YYYY-MM-DD (for age-based pricing) | |
| reduction_card | No | Swiss reduction card: HALF_FARE (Halbtax), GA (General Abonnement), or NONE | |
| reduction_card_valid_until | No | Reduction card expiry date YYYY-MM-DD (ask the user when their Halbtax/GA expires) |
TDQS
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.
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.
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.
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.
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.
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 ConnectionsARead-onlyIdempotent
Find train connections between two Swiss stations. Returns schedules with departure/arrival times, duration, transfers, and trip IDs for pricing.
| Name | Required | Description | Default |
|---|---|---|---|
| from | Yes | Origin station name or ID (e.g. "Zurich HB" or "8503000") | |
| to | Yes | Destination station name or ID (e.g. "Bern" or "8507000") | |
| date | No | Travel date in YYYY-MM-DD format (default: today) | |
| time | No | Departure time in HH:MM format (default: now) | |
| arrival_time | No | If true, the time parameter is treated as desired arrival time |
TDQS
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.
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.
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.
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.
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.
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 StationsARead-onlyIdempotent
Search for Swiss train stations, addresses, or points of interest by name. Returns station IDs needed for other tools.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Station name to search for (e.g. "Zurich", "Bern", "Interlaken") | |
| limit | No | Maximum number of results |
TDQS
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.
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.
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.
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.
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.
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.
9 tool updates
v0.5.0- First observed
get_more_connections - First observed
get_prices - First observed
get_profile - First observed
get_ticket_link - First observed
get_trip_details - First observed
list_travelers - First observed
save_profile - First observed
search_connections - First observed
search_stations
TDQS
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.
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.
9 tools is well-scoped for a Swiss railway assistant, covering search, planning, pricing, purchase, and profile management without bloat or deficiency.
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
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
Canonical SwissTrip MCP — independent SBB/CFF/FFS schedules, prices, and ticket links by SwissTrip.
Swiss Transport MCP — wraps Transport Open Data API (free, no auth)
iRail MCP — Belgian rail (SNCB/NMBS) real-time via the community iRail API
Amtrak MCP — live Amtrak train tracking via the community Amtraker API
Related MCP Servers
- AlicenseAqualityDmaintenanceSwiss open data MCP server — transport, weather, geodata, companies, etc,. Zero API keys.7622722MIT
- AlicenseAqualityDmaintenanceA zero-authentication MCP server for Swiss public transport, enabling users to query train connections, disruptions, station facilities, and plan journeys using natural language.12MIT
- AlicenseAqualityDmaintenanceMCP server for Swiss public transport — connections, stationboards, real-time delays, and direct booking links for SBB.41MIT
- AlicenseNot gradedqualityCmaintenanceEnables querying Swiss public transport data (stations, departures, connections) from the Transport Open Data API via natural language through an MCP gateway.5MIT
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/Fabsbags/sbb-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server