indian-rail-mcp
indian-rail-mcp
Данные Indian Railways из официальных источников, в виде типизированной TypeScript-библиотеки и MCP-сервера.
Без API-ключа. Без стороннего поставщика данных. Без npm-посредника, который может исчезнуть.
NTES — | расписания поездов, статус движения в реальном времени, схема вагонов, поезда между станциями, живые табло станций |
IRCTC — | статус PNR, наличие мест по вагонам и по полкам |
Зачем это существует
Популярный пакет irctc-connect устарел. Его автор переименовал его в railkit и спрятал за регистрацией и API-ключом, а бесплатные бэкенды, на которые он полагался (bookmytrain.vercel.app, easy-rail.onrender.com), теперь возвращают 404 и 500. Всё, что ещё работает в этой экосистеме, опирается на скрейпинг стороннего сайта с использованием учётных данных, взятых из разметки самого этого сайта.
Эта библиотека идёт напрямую к источникам, которыми фактически управляет Indian Railways.
Related MCP server: Indian Railway MCP
Установка
npm install indian-rail-mcpТребуется Node 20+. Единственная зависимость времени выполнения — cheerio.
Библиотека
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" });Станции принимают либо код, либо полное название — NDLS и NEW DELHI оба работают, разрешаются по собственному каталогу NTES из 8 700 станций. Даты принимаются в формате DD-MM-YYYY, DD-MMM-YYYY или YYYY-MM-DD.
Ошибки
Каждый сбой — это типизированная ошибка RailError:
Класс |
| Значение |
|
| Неверная станция, номер поезда или дата — отлавливается локально, до любого сетевого вызова |
|
| NTES вернул страницу |
|
| IRCTC вернул |
|
| Сетевая ошибка или неразбираемый ответ |
О
ERR000: NTES возвращает одну и ту же общую страницуERR000как на некорректный ввод, так и на реальный сбой. Поэтому эта библиотека проверяет коды станций по каталогу до вызова NTES, чтобы ваша собственная опечатка никогда не была сообщена вам как «железнодорожный сервис недоступен».NtesErrorнамеренно называет обе возможности, а не заявляет о сбое.
MCP-сервер
Шесть инструментов: getTrainInfo, trackTrain, searchTrainBetweenStations, getLiveStation,
getSeatAvailability, checkPnrStatus.
import { createRailMcpServer } from "indian-rail-mcp/mcp";
const server = createRailMcpServer({ allowPnr: true });
await server.connect(yourTransport);Деплой на Vercel
vercel deployvercel.json закрепляет функцию за bom1 (Мумбаи) — оба вышестоящих сервиса находятся в Индии, и это значит гораздо больше, чем кажется: тёплые запросы выполняются за ~124 мс против ~885 мс холодных, а индийский трафик с индийских исходящих IP-адресов с гораздо меньшей вероятностью вызовет срабатывание F5 WAF перед NTES.
Окружение:
Переменная | Назначение |
| Требуется для включения |
| Ограничение запросов на IP. По умолчанию 30. |
Укажите любому MCP-клиенту адрес https://<your-deployment>/api/mcp с транспортом Streamable HTTP.
PNR и персональные данные
checkPnrStatus возвращает персональные данные пассажиров — имена, возраст, пол, вагон и место.
Он отключён, если
RAIL_API_KEYне задан и не совпадает. Он закрывается при ошибке.Библиотека никогда не логирует, не кэширует и не сохраняет ответы PNR.
Намеренно нет пакетных или перечислительных помощников. Один PNR за вызов — так задумано.
Если вы разворачиваете это публично, сохраняйте такой подход. Пожалуйста, не создавайте PNR-скрейпер.
Источник данных и условия
Все данные являются собственностью Indian Railways, предоставляются Центром информационных систем железных дорог (CRIS). Этот проект не связан с Indian Railways, CRIS или IRCTC, не одобрен ими и не поддерживается ими.
Прочтите это перед развёртыванием:
Условия использования NTES разрешают загрузку выдержек для личного использования и гласят, что вы не можете использовать «любую компьютерную программу» для систематического создания базы данных с сайта, а также включать его страницы в «любую публичную или частную электронную поисковую систему или сервис» без предварительного письменного разрешения. Также указано, что железнодорожные данные «не должны использоваться в коммерческих целях».
CRIS предоставляет такое разрешение по запросу: «Материалы, представленные на этом веб-сайте, могут воспроизводиться бесплатно после получения соответствующего разрешения путём отправки нам письма». Готовый к отправке запрос находится в
PERMISSION-REQUEST.md.Статус разрешения для этого проекта: запрошено, ожидается.
Условия IRCTC строже, а данные PNR являются персональными данными.
Точность данных — это лучшие усилия, и она не гарантируется; собственный дисклеймер NTES говорит то же самое. Не полагайтесь на это ни для чего критически важного; проверяйте напрямую в железнодорожной службе.
Будьте добропорядочным пользователем: настройки по умолчанию кэшируют то, что стабильно, ограничивают частоту по IP и используют одну сессию вышестоящего сервиса. Пожалуйста, не удаляйте это.
Разработка
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 buildФикстуры в test/fixtures/ — это записанные HTML/JSON. Когда CRIS меняет свою разметку, npm test завершается с конкретным утверждением, а не тихо возвращает пустые результаты.
Лицензия
MIT — см. LICENSE. Лицензия покрывает только этот исходный код, а не базовые железнодорожные данные.
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