indian-rail-mcp
indian-rail-mcp
Datos de Indian Railways de fuentes oficiales, como una biblioteca TypeScript tipada y un servidor MCP.
Sin clave API. Sin proveedor de datos de terceros. Sin intermediario npm que pueda desaparecer.
NTES — | horarios de trenes, estado de marcha en vivo, posición de vagones, trenes entre estaciones, paneles de estación en vivo |
IRCTC — | estado de PNR, disponibilidad de asientos por vagón y por litera |
Por qué existe esto
El popular paquete irctc-connect está obsoleto. Su autor lo renombró a railkit y lo puso detrás de un
registro y una clave API, y los backends gratuitos de los que dependía (bookmytrain.vercel.app, easy-rail.onrender.com)
ahora devuelven 404 y 500. Cualquier cosa que siga funcionando en ese ecosistema se apoya en un raspado de un sitio de terceros usando
una credencial extraída del propio marcado de ese sitio.
Esta biblioteca va directamente a las fuentes que Indian Railways realmente opera.
Related MCP server: Indian Railway MCP
Instalación
npm install indian-rail-mcpRequiere Node 20+. La única dependencia en tiempo de ejecución es cheerio.
Biblioteca
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" });Las estaciones aceptan un código o un nombre completo — tanto NDLS como NEW DELHI funcionan, resueltos contra el catálogo propio de NTES de
8.700 estaciones. Las fechas aceptan DD-MM-YYYY, DD-MMM-YYYY o YYYY-MM-DD.
Errores
Cada fallo es un RailError tipado:
Clase |
| Significado |
|
| Estación, número de tren o fecha incorrectos — detectado localmente, antes de cualquier llamada de red |
|
| NTES devolvió una página |
|
| IRCTC devolvió un |
|
| Fallo de red o respuesta no analizable |
Sobre
ERR000: NTES devuelve la misma página genéricaERR000tanto para entrada malformada como para una interrupción real. Por lo tanto, esta biblioteca valida los códigos de estación contra el catálogo antes de llamar a NTES, de modo que tu propio error tipográfico nunca se te informe como "el servicio ferroviario está caído".NtesErrornombra deliberadamente ambas posibilidades en lugar de afirmar una interrupción.
Servidor MCP
Seis herramientas: getTrainInfo, trackTrain, searchTrainBetweenStations, getLiveStation,
getSeatAvailability, checkPnrStatus.
import { createRailMcpServer } from "indian-rail-mcp/mcp";
const server = createRailMcpServer({ allowPnr: true });
await server.connect(yourTransport);Desplegar en Vercel
vercel deployvercel.json fija la función a bom1 (Mumbai) — ambos upstreams están en India, y eso vale mucho más de lo que
parece: las solicitudes en caliente tardan ~124 ms frente a ~885 ms en frío, y el tráfico indio desde IPs de salida indias tiene muchas
menos probabilidades de activar el WAF F5 que está delante de NTES.
Entorno:
Variable | Propósito |
| Requerida para habilitar |
| Límite de solicitudes por IP. Por defecto 30. |
Apunta cualquier cliente MCP a https://<tu-despliegue>/api/mcp usando transporte Streamable HTTP.
PNR y datos personales
checkPnrStatus devuelve datos personales de los pasajeros — nombres, edades, género, vagón y litera.
Está deshabilitado a menos que
RAIL_API_KEYesté configurada y coincida. Falla de forma segura.La biblioteca nunca registra, almacena en caché ni persiste respuestas de PNR.
Deliberadamente no hay helpers de lote o enumeración. Un PNR por llamada, por diseño.
Si despliegas esto públicamente, mantenlo así. Por favor, no construyas un raspador de PNR.
Fuente de datos y términos
Todos los datos son propiedad de Indian Railways, servidos por el Centre for Railway Information Systems (CRIS). Este proyecto no está afiliado, respaldado ni apoyado por Indian Railways, CRIS o IRCTC.
Lee esto antes de desplegar:
Los Términos y Condiciones de NTES permiten descargar extractos para uso personal, y establecen que no puedes usar "ningún programa de software" para construir sistemáticamente una base de datos del sitio, ni incluir sus páginas en "cualquier sistema o servicio de recuperación electrónica público o privado", sin permiso escrito previo. También establecen que los datos ferroviarios "no deben usarse con fines comerciales".
CRIS otorga ese permiso a petición: "El material presentado en este sitio web puede reproducirse de forma gratuita después de obtener el permiso adecuado enviándonos un correo." Una solicitud lista para enviar está en
PERMISSION-REQUEST.md.Estado del permiso para este proyecto: solicitado, pendiente.
Los términos de IRCTC son más estrictos, y los datos de PNR son datos personales.
La precisión de los datos es de mejor esfuerzo y no está garantizada — el propio descargo de responsabilidad de NTES dice lo mismo. No confíes en ello para nada crítico para la seguridad; verifica directamente con los ferrocarriles.
Sé un buen ciudadano: los valores predeterminados almacenan en caché lo que es estable, limitan la velocidad por IP y reutilizan una única sesión upstream. Por favor, no los elimines.
Desarrollo
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 buildLos fixtures en test/fixtures/ son HTML/JSON grabados. Cuando CRIS cambia su marcado, npm test falla con una
aserción específica en lugar de que las herramientas devuelvan silenciosamente resultados vacíos.
Licencia
MIT — ver LICENSE. La licencia cubre solo este código fuente, no los datos ferroviarios subyacentes.
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