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 deployed
Maintenance
Related MCP Connectors
Indian Railways IRCTC helps you to view, track trains schedules, ticket status and more.
Plan intercity journeys in India by train, flight or both, with a fare for every travel class.
Live UK rail boards, journey planning, train history, units, lifts, disruptions, punctuality.
Live Polish rail data: boards for every station, delays, PLK disruptions, train punctuality.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables real-time Indian Railways information retrieval, including live train running status, station schedules, and upcoming arrivals/departures.ISC
- AlicenseNot gradedqualityDmaintenanceEnables searching and tracking Indian Railways trains, checking seat availability, live status, delays, and station/train codes.28MIT
- FlicenseNot gradedqualityDmaintenanceEnables checking railway seat availability, berth types, and pricing for Indian trains through natural language queries.-
- FlicenseNot gradedqualityBmaintenanceEnables AI assistants to query real-time Indian Railways data including train schedules, live status, PNR status, seat availability, fares, and coach positions via the Model Context Protocol.-