MCP server for live Deutsche Bahn timetables: journeys, fares, boards, delays, platforms, coach sequence, disruptions. Talks to bahn.de directly, no API key. Unofficial.
8 tools with consistent naming (db_* prefix), comprehensive descriptions (150-250 chars each), and complete JSON Schema input definitions. All parameters typed and described. Output schemas documented in descriptions. Strong adherence to patterns:tool and pattern:constrained-input (enums for format/products). Key gaps: no explicit error recovery guidance in descriptions, no per-tool permission scopes declared, output field naming not fully documented (e.g., what fields does db_journeys return?). Tool composition is sound, each tool has one responsibility. Descriptions are LLM-optimized and include prerequisites (e.g., 'Requires recon_token from db_journeys'). No secrets exposed as parameters. Rate limiting and timeout handling present server-side.
Get live arrival board for a station. Shows incoming trains with times, delays, platforms, and origins.
Get coach/car sequence and seat availability for a specific train. Shows coach types, amenities, and seat maps.
Get live departure board for a station. Shows upcoming trains with times, delays, platforms, and destinations.
Get current disruptions, delays, and service advisories for Deutsche Bahn network.
Get detailed fare breakdown and booking options for a specific journey. Requires recon_token from db_journeys.
Search for train journeys between two stations. Returns available connections with times, delays, platforms, and fare information.
Search for a station by name, EVA number, or bahn.de ID. Returns matching stations with IDs, names, EVA numbers, types, and available products.
Output schemas not formally documented. Descriptions mention what tools return (e.g., 'Returns matching stations with IDs, names, EVA numbers') but do not specify the exact JSON structure, field types, or nested objects. LLMs cannot plan downstream tool calls without knowing response field names.
No error recovery guidance in tool descriptions. Descriptions do not explain what to do if a station is not found, a journey has no connections, or the API is rate-limited. LLMs lack actionable next steps on failure.
No permission scopes declared. Tools do not state what permissions they require (e.g., 'read:bahn-api'). This prevents least-privilege agent configuration and audit clarity.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 62 | <=2025-11-25 | v2 |
Get all intermediate stops and live updates for a specific journey leg. Requires journey_id from db_journeys.
Pagination not documented for tools returning lists (db_departures, db_arrivals, db_disruptions). No mention of result limits, offset/limit parameters, or how to fetch additional results. Large result sets risk context window exhaustion.
Tool descriptions lack dependency hints. E.g., db_journey_offers says 'Requires recon_token from db_journeys' but does not explain what to do if the token is missing or expired. db_trip_details similarly depends on journey_id but offers no fallback guidance.