indian-rail-mcp
#indian-rail-mcp
Daten der Indian Railways aus offiziellen Quellen, als typisierte TypeScript-Bibliothek und MCP-Server.
Kein API-Schlüssel. Kein Drittanbieter für Daten. Kein npm-Mittelsmann, der verschwinden kann.
NTES — | Zugfahrpläne, Live-Betriebsstatus, Wagenposition, Züge zwischen Bahnhöfen, Live-Bahnhofstafeln |
IRCTC — | PNR-Status, Sitzplatzverfügbarkeit nach Wagen und Bett |
Warum es das gibt
Das beliebte Paket irctc-connect ist veraltet. Sein Autor hat es in railkit umbenannt und hinter eine
Registrierung und einen API-Schlüssel gestellt, und die freien Backends, auf die es angewiesen war (bookmytrain.vercel.app, easy-rail.onrender.com)
liefern jetzt 404 und 500. Was in diesem Ökosystem noch funktioniert, stützt sich auf ein Scraping einer Drittanbieter-Website mit
einem Zugangsdaten, das aus dem Markup dieser Website selbst stammt.
Diese Bibliothek geht direkt an die Quellen, die Indian Railways tatsächlich betreibt.
Related MCP server: Indian Railway MCP
Installation
npm install indian-rail-mcpErfordert Node 20+. Die einzige Laufzeitabhängigkeit ist cheerio.
Bibliothek
import {
getTrainInfo,
trackTrain,
searchTrainsBetweenStations,
getLiveStation,
getSeatAvailability,
checkPnrStatus
} from "indian-rail-mcp";
// Full schedule and route
const info = await getTrainInfo("12951");
// -> { trainName: "NDLS TEJAS RAJ", type: "RAJDHANI", runsOn: "Daily",
// classes: ["1A","2A","3A"], route: [ { stationCode: "MMCT", departure: "17:00", ... }, ... ] }
// Where is it right now (defaults to the journey in progress)
const live = await trackTrain("12626");
// -> { journeyDate, summary: "Arrived at BUTI BORI(BTBR) at 13:27 26-Aug",
// stops: [...], coachPosition: [ { position: 0, coach: "ENG", classCode: "ENG" }, ... ] }
// Direct trains between two stations — code or full name
await searchTrainsBetweenStations("CAN", "PAY");
await searchTrainsBetweenStations("NEW DELHI", "MMCT");
// Next couple of hours at a station, with delay and platform
await getLiveStation("NDLS");
// Reservation chart: per-coach vacancy, plus berth detail when a class is given
await getSeatAvailability({ trainNumber: "12951", boardingStation: "MMCT", travelClass: "3A" });Bahnhöfe akzeptieren entweder einen Code oder einen vollständigen Namen — NDLS und NEW DELHI funktionieren beide, aufgelöst über den eigenen
8.700-Bahnhöfe-Katalog von NTES. Daten akzeptieren DD-MM-YYYY, DD-MMM-YYYY oder YYYY-MM-DD.
Fehler
Jeder Fehler ist ein typisierter RailError:
Klasse |
| Bedeutung |
|
| Ungültiger Bahnhof, Zugnummer oder Datum — lokal erkannt, vor jedem Netzwerkaufruf |
|
| NTES hat eine |
|
| IRCTC hat eine |
|
| Netzwerkfehler oder nicht analysierbare Antwort |
Zu
ERR000: NTES gibt für fehlerhafte Eingaben die gleiche generischeERR000-Seite zurück wie für eine echte Störung. Diese Bibliothek validiert daher Bahnhofscodes vor dem Aufruf von NTES gegen den Katalog, sodass ein eigener Tippfehler nie als „der Bahndienst ist ausgefallen“ gemeldet wird.NtesErrornennt bewusst beide Möglichkeiten, anstatt eine Störung zu behaupten.
MCP-Server
Sechs Tools: getTrainInfo, trackTrain, searchTrainBetweenStations, getLiveStation,
getSeatAvailability, checkPnrStatus.
import { createRailMcpServer } from "indian-rail-mcp/mcp";
const server = createRailMcpServer({ allowPnr: true });
await server.connect(yourTransport);Bereitstellung auf Vercel
vercel deployvercel.json bindet die Funktion an bom1 (Mumbai) — beide Upstreams befinden sich in Indien, und das ist weit mehr wert,
als es aussieht: Warme Anfragen laufen in ~124 ms gegenüber ~885 ms kalt, und indischer Datenverkehr von indischen Egress-IPs ist
viel weniger wahrscheinlich, die F5-WAF vor NTES auszulösen.
Umgebung:
Variable | Zweck |
| Erforderlich, um |
| Pro-IP-Anfragelimit. Standard 30. |
Richten Sie einen beliebigen MCP-Client auf https://<your-deployment>/api/mcp mit Streamable HTTP-Transport aus.
PNR und personenbezogene Daten
checkPnrStatus gibt personenbezogene Daten der Fahrgäste zurück — Namen, Alter, Geschlecht, Wagen und Bett.
Es ist deaktiviert, sofern
RAIL_API_KEYnicht gesetzt und übereinstimmend ist. Es schlägt geschlossen fehl.Die Bibliothek protokolliert, speichert oder persistiert PNR-Antworten nie.
Es gibt bewusst keine Stapel- oder Aufzählungshilfen. Ein PNR pro Aufruf, by design.
Wenn Sie dies öffentlich bereitstellen, behalten Sie es so bei. Bitte bauen Sie keinen PNR-Scraper.
Datenquelle und Bedingungen
Alle Daten sind Eigentum der Indian Railways, bereitgestellt vom Centre for Railway Information Systems (CRIS). Dieses Projekt ist nicht mit Indian Railways, CRIS oder IRCTC verbunden, von ihnen unterstützt oder befürwortet.
Lesen Sie dies, bevor Sie bereitstellen:
Die NTES-Bedingungen erlauben das Herunterladen von Auszügen für den persönlichen Gebrauch und besagen, dass Sie kein „Softwareprogramm“ verwenden dürfen, um systematisch eine Datenbank von der Website aufzubauen, noch deren Seiten in „ein öffentliches oder privates elektronisches Abrufsystem oder einen Dienst“ aufnehmen dürfen, ohne vorherige schriftliche Genehmigung. Sie besagen auch, dass Bahndaten „nicht für kommerzielle Zwecke verwendet werden sollten“.
CRIS erteilt diese Genehmigung auf Anfrage: „Material, das auf dieser Website erscheint, darf nach Einholung der entsprechenden Genehmigung durch eine E-Mail an uns kostenlos reproduziert werden.“ Eine versandfertige Anfrage finden Sie in
PERMISSION-REQUEST.md.Genehmigungsstatus für dieses Projekt: beantragt, ausstehend.
Die Bedingungen von IRCTC sind strenger, und PNR-Daten sind personenbezogene Daten.
Die Datengenauigkeit ist nach bestem Bemühen und nicht garantiert — NTES' eigener Haftungsausschluss sagt dasselbe. Verlassen Sie sich nicht darauf für etwas Sicherheitskritisches; überprüfen Sie direkt bei den Bahnen.
Seien Sie ein guter Bürger: Die Standardeinstellungen cachen, was stabil ist, begrenzen die Rate pro IP und verwenden eine einzige Upstream-Sitzung. Bitte entfernen Sie diese nicht.
Entwicklung
npm install
npm test # parser regression tests against recorded fixtures — no network
npm run smoke # live end-to-end check against NTES and IRCTC
npm run test:mcp # drives the MCP handler locally: handshake, tools, auth, rate limit
npm run fixtures # re-record fixtures when upstream markup changes
npm run buildFixtures in test/fixtures/ sind aufgezeichnetes HTML/JSON. Wenn CRIS ihr Markup ändert, schlägt npm test mit einer
spezifischen Assertion fehl, anstatt dass die Tools stillschweigend leere Ergebnisse liefern.
Lizenz
MIT — siehe LICENSE. Die Lizenz deckt nur diesen Quellcode ab, nicht die zugrunde liegenden Bahndaten.
This server cannot be installed
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 Servers
- FlicenseNot gradedqualityBmaintenanceEnables real-time Indian Railways information retrieval, including live train running status, station schedules, and upcoming arrivals/departures.
- FlicenseNot gradedqualityDmaintenanceEnables searching and tracking Indian Railways trains, checking seat availability, live status, delays, and station/train codes.26
- FlicenseNot gradedqualityBmaintenanceProvides transit concierge tools for Indian Railways, including live train status, platform numbers, delay alerts, food options, and cab services, with offline fallback support.
- FlicenseNot gradedqualityDmaintenanceEnables checking railway seat availability, berth types, and pricing for Indian trains through natural language queries.
Related MCP Connectors
iRail MCP — Belgian rail (SNCB/NMBS) real-time via the community iRail API
Real-time BART departures, trip planning, fares, stations, and advisories.
Real-time transit stops, routes, arrivals, vehicle positions, and schedules via OneBusAway APIs.
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/mahi-v-v/indian-rail-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server