DB Timetable MCP Server
This server provides access to Deutsche Bahn (German Railway) real-time and planned timetable data, translating the DB API's XML into structured, LLM-friendly JSON.
Get a live station board (
getStationBoard): Merges the planned timetable with all real-time changes into a single, reliable departure/arrival board — the recommended tool for displaying current train information.Get the full current timetable with changes (
getCurrentTimetable): Retrieve real-time arrivals, departures, platform assignments, delays, and cancellations for a station.Get recent changes (
getRecentChanges): Fetch only the latest timetable changes from the last two minutes — ideal for incremental live updates.Retrieve the planned timetable (
getPlannedTimetable): Access static scheduled timetable data for a specific station, date, and hour — useful for future trip planning.Find stations (
findStations): Search for stations by name, EVA number, or DS100 code to look up identifiers needed by other tools.
All tools return structured event data with planned, changed, and effective fields (time, platform, etc.), delay in minutes, cancellation status, and platform-change flags. An optional includeRawXml: true parameter exposes the underlying DB API response.
Handles content licensed under Creative Commons Attribution 4.0 International License (CC BY 4.0), ensuring proper attribution for Deutsche Bahn timetable data.
Provides access to Deutsche Bahn timetable data, including current schedules, planned timetables, schedule changes, and station search functionality through the Deutsche Bahn API.
Supports configuration through .env files for storing API credentials and server settings.
Supports source code management through Git, enabling cloning of the repository.
Runs on Node.js platform (version 18 or higher) for server-side execution.
Uses npm for package management and running server scripts.
Utilizes TypeScript for type-safe development of the MCP server components.
Handles XML data from the Deutsche Bahn API, converting it to more accessible formats.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@DB Timetable MCP Servershow me current departures from Berlin Hauptbahnhof"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
DB Timetable MCP Server
Ein produktionsreifer Model Context Protocol Server für die offizielle Deutsche-Bahn-Timetables-API. Er übersetzt das kompakte DB-XML in semantisches JSON und führt Sollfahrplan und Echtzeitänderungen zu einer verlässlichen Bahnhofstafel zusammen.
Warum dieser Server?
Korrekte Gleise und Zeiten:
effectiveenthält den tatsächlich anzuzeigenden Wert;plannedundchangederklären Abweichungen.LLM-freundlich: Tools liefern
structuredContent, beschreibende JSON-Schemas und ein abrufbares Datenmodell.MCP-konform: Offizielles TypeScript-SDK, stdio für lokale Clients und stateless Streamable HTTP für Remote-Betrieb.
Sicherer Betrieb: Keine Logs auf
stdout, lokale Bindung als Standard, Host-Allowlist, Timeouts, Non-root-Container und reproduzierbares Lockfile.Nachvollziehbar: Unit-, Vertrags- und Transporttests, Coverage-Grenzen, CI, Dependency- und Secret-Checks.
Related MCP server: swiss-rail-mcp
Schnellstart
Voraussetzungen: Node.js 22 oder 24 LTS sowie ein abonniertes Timetables-Produkt im DB API Marketplace.
git clone https://github.com/jorekai/db-timetable-mcp.git
cd db-timetable-mcp
npm ci
cp .env.example .envIn .env eintragen:
DB_TIMETABLE_CLIENT_ID=deine-client-id
DB_TIMETABLE_CLIENT_SECRET=dein-api-keyDann bauen und starten:
npm run build
npm startIm stdio-Modus wartet der Prozess auf einen MCP-Client. Statusmeldungen gehen ausschließlich nach stderr; stdout bleibt für JSON-RPC reserviert.
Claude Desktop
Zuerst npm ci && npm run build ausführen. Anschließend einen absoluten Pfad in claude_desktop_config.json verwenden.
macOS/Linux:
{
"mcpServers": {
"db-timetable": {
"command": "node",
"args": ["/absolute/path/db-timetable-mcp/dist/index.js"]
}
}
}Windows:
{
"mcpServers": {
"db-timetable": {
"command": "node",
"args": ["C:\\absolute\\path\\db-timetable-mcp\\dist\\index.js"]
}
}
}Die .env-Datei wird sowohl im aktuellen Arbeitsverzeichnis als auch neben dem Projektverzeichnis gesucht. Das funktioniert auch dann, wenn Claude Desktop den kompilierten Server aus einem anderen Arbeitsverzeichnis startet. Alternativ können die beiden Zugangsdaten im env-Objekt des MCP-Eintrags gesetzt werden.
Nach einer Konfigurationsänderung Claude Desktop vollständig beenden und neu starten. Weitere Hinweise stehen unter Fehlerbehebung.
Tools
Tool | Zweck |
| Empfohlen: verbindet Sollfahrplan und vollständige Änderungen zu einer Live-Bahnhofstafel |
| Statischer Sollfahrplan für EVA-Nummer, Datum und Stunde |
| Vollständiger Änderungsbestand ( |
| Änderungen der letzten zwei Minuten ( |
| Stationssuche nach Name, EVA-Nummer oder DS100-Code |
Alle Tools akzeptieren optional includeRawXml: true. Die vollständige Referenz mit Beispielen steht in docs/api.md.
Datenmodell
Ein Ereignis für Ankunft oder Abfahrt sieht verkürzt so aus:
{
"planned": { "time": { "local": "2026-07-17T10:20" }, "platform": "8" },
"changed": { "time": { "local": "2026-07-17T10:27" }, "platform": "10" },
"effective": { "time": { "local": "2026-07-17T10:27" }, "platform": "10" },
"delayMinutes": 7,
"platformChanged": true,
"isCancelled": false
}Für Antworten an Reisende immer effective verwenden. Das Modell kann dieselbe Erklärung über die Ressource db-timetable://docs/data-model abrufen. Details: docs/data-model.md.
Streamable HTTP und Docker
Direkt lokal starten:
MCP_TRANSPORT=http npm startMCP-Endpunkt:
http://127.0.0.1:3000/mcpHealthcheck:
http://127.0.0.1:3000/health
Mit Docker Compose:
docker compose up --build -d
docker compose ps
curl http://127.0.0.1:3000/healthCompose bindet den Port absichtlich nur an Loopback, startet als nicht privilegierter Benutzer und verwendet ein schreibgeschütztes Dateisystem. Für einen öffentlichen Endpunkt sind zusätzlich TLS und Authentifizierung über einen Reverse Proxy erforderlich. ALLOWED_HOSTS muss alle erlaubten Hostnamen enthalten.
Konfiguration
Variable | Standard | Beschreibung |
| – | DB-Client-ID, für API-Aufrufe erforderlich |
| – | DB-API-Key, für API-Aufrufe erforderlich |
| offizielle v1-URL | Alternative Basis-URL, primär für Tests |
|
| Request-Timeout zwischen 1000 und 120000 ms |
|
|
|
|
| HTTP-Bindeadresse |
|
| HTTP-Port |
|
| Streamable-HTTP-Pfad |
| – | Kommaseparierte Host-Allowlist; bei |
| – | Expliziter absoluter Pfad zu einer Env-Datei |
|
|
|
Die alten Werte TRANSPORT_TYPE=sse|httpStream und SSE_ENDPOINT werden für eine sanfte Migration weiterhin auf Streamable HTTP abgebildet.
Entwicklung
npm run dev # stdio mit Watch-Modus
npm run dev:http # Streamable HTTP mit Watch-Modus
npm run check # Lint, Typen, Tests und Build
npm run test:coverageWeitere Dokumente:
Fehlerbehebung
Expected "," or "]" after array element in Claude Desktop
Auf Version 2 aktualisieren und neu bauen. Frühere Versionen schrieben Logzeilen auf den stdio-Protokollkanal; Version 2 nutzt dafür ausschließlich stderr.
DB-API-Zugangsdaten fehlen trotz .env
Die Datei muss im Repository-Root neben package.json liegen. Bei einem anderen Ort DOTENV_CONFIG_PATH absolut setzen. Keine Anführungszeichen oder zusätzlichen Leerzeichen um die Werte verwenden.
401/403 von der DB API
Prüfen, ob Client-ID und API-Key zusammengehören und die Anwendung das Produkt Timetables abonniert hat.
Falsches Gleis
getStationBoard verwenden und effective.platform lesen. planned.platform ist ausdrücklich das Sollgleis; changed.platform ist nur gesetzt, wenn die DB eine Änderung gemeldet hat.
Datenquelle und Lizenz
Die Fahrplandaten stammen von der Deutschen Bahn und werden über die Timetables API 1.0.274 bereitgestellt. Laut DB API Marketplace stehen die Daten unter CC BY 4.0; die Namensnennung der Deutschen Bahn ist bei Nutzung der Daten erforderlich. Der Marketplace nennt derzeit ein Limit von 60 Aufrufen pro Minute.
Der MCP-Server selbst steht unter der MIT-Lizenz.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
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/jorekai/db-timetable-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server