Skip to main content
Glama
Shadhai

IndianRailwaysMCP

by Shadhai


📑 Содержание


🎯 Назначение и философия

Indian Railways ежедневно запускает более 13 000 поездов, но её данные находятся за непоследовательными HTML-страницами и эндпоинтами с ограничением частоты запросов — из-за чего AI-агентам сложно ответить на простой вопрос вроде «мой поезд опаздывает?»

Indian Railways MCP Server решает эту проблему, нормализуя расписания, статус в реальном времени, PNR, тарифы и данные о местах в единый структурированный MCP-интерфейс, к которому любой AI-ассистент может обращаться напрямую.

  • 🔐 Без авторизации, без секретов — все источники данных публичные; нечего утекать

  • 🧩 Многослойная архитектура — слои сервера, клиента и парсера независимо тестируются и заменяются

  • 📊 Кэширование с учётом TTL — каждый вызов инструмента учитывает окно свежести данных вместо того, чтобы перегружать вышестоящие сайты

  • Устойчивость по умолчанию — повторные попытки с экспоненциальной задержкой поглощают нестабильность вышестоящих сервисов, чтобы ваш агент не падал посреди разговора


🏗 Архитектура

graph TD
    Client["🖥️ MCP Client<br/>(Claude Desktop / Cursor / Continue.dev)"] -->|MCP Protocol · stdio| Server

    subgraph Server["🚂 Indian Railways MCP Server"]
        direction TB
        SL["🛠️ Server Layer<br/>Tool registration (10 tools)<br/>Pydantic input validation"]
        CL["🌐 Client Layer<br/>httpx session mgmt<br/>tenacity retry logic<br/>TTL response cache"]
        PL["🔎 Parser Layer<br/>BeautifulSoup HTML parsing<br/>Pydantic JSON parsing<br/>Regex extraction"]
        SL --> CL --> PL
    end

    PL -->|HTTP/HTTPS| ERail[("🗄️ ERail.in<br/>Schedules · Live status<br/>PNR · Seats · Fares")]
    PL -->|HTTP/HTTPS| IRInfo[("🗄️ IndianRailways.info<br/>Coach position<br/>Platform locator")]

Поток данных: MCP-клиент отправляет вызов инструмента через stdio → слой сервера проверяет входные данные с помощью Pydantic → слой клиента выполняет HTTP-запрос с логикой повторных попыток → слой парсера извлекает структурированные данные из HTML/JSON → слой кэша сохраняет результат с TTL → ответ форматируется и возвращается клиенту.


✨ Возможности

Модуль

Возможность

Реальное время

TTL кэша

🔍 Поиск станций и поездов

Поиск по 8 000+ станциям и 10 000+ поездам по названию или коду

24 часа

🚂 Расписание поезда

Полный маршрут со всеми станциями, временем и расстояниями

1 час

📍 Статус движения в реальном времени

Текущее местоположение, задержки и информация о платформе

2 минуты

🎫 Статус PNR

Данные пассажиров, распределение вагонов/мест, информация о поездке

30 секунд

💺 Наличие мест

Наличие по классам — AVAILABLE / RAC / WL

2 минуты

💰 Запрос тарифа

Разбивка тарифа по всем классам поездки

1 час

🔀 Поезда между станциями

Все поезда, соединяющие две станции

1 час

🏢 Станция в реальном времени

Ближайшие отправления с любой станции

2 минуты

🚃 Расположение вагонов

Схема вагонов на платформе любой станции

1 час


🧰 Технологический стек

Слой

Технология

Среда выполнения

Python 3.10+

Протокол

Model Context Protocol (MCP) SDK 1.0+

HTTP-клиент

httpx

Разбор HTML

BeautifulSoup4

Валидация

Pydantic 2.0+

Логика повторных попыток

tenacity (экспоненциальная задержка)

Тестирование

pytest, pytest-cov, pytest-mock, pytest-asyncio

Упаковка

pyproject.toml (установка через pip)

Контейнеризация

Docker (python:3.11-slim)

Управление процессами

systemd (развёртывание на Linux-серверах)


🚀 Быстрый старт

Предварительные требования

Инструмент

Версия

Примечания

Python

3.10+

Проверьте с помощью python --version

pip

Последняя

Поставляется с Python

MCP-клиент

Любой

Claude Desktop, Cursor или Continue.dev

Шаг 1 — Клонирование

git clone https://github.com/Shadhai/Railway_mcp.git
cd Railway_mcp

Шаг 2 — Настройка

# Create and activate a virtual environment (recommended)
python -m venv .venv
source .venv/bin/activate      # Linux/Mac
# .venv\Scripts\activate       # Windows

# Install dependencies
pip install mcp httpx beautifulsoup4 pydantic tenacity

Шаг 3 — Запуск

# Run directly
python -m src.indian_railways_mcp.server

# Or install as a package and run the entry point
pip install -e .
indian-railways-mcp

✅ Успех — ожидайте такой вывод:

✅ Available tools: 10
  - search_stations: Search Indian Railways stations by name or code...
  - search_trains: Search Indian Railways trains by number or name...
  - get_train_schedule: Get complete train schedule with all stations...
  ...

⚙️ Конфигурация окружения

Учётные данные не требуются — все вышестоящие источники общедоступны. Единственная используемая переменная окружения настраивает путь импорта Python:

# ── Runtime ─────────────────────────────────────────────
PYTHONPATH=/path/to/Railway_mcp/src

# <!-- VERIFY: add PORT/NODE_ENV-style vars here only if you front this
#      server with a custom HTTP/SSE transport wrapper. Stdio transport
#      (the default) needs nothing beyond PYTHONPATH. -->

🛠 Справочник MCP-инструментов

Этот сервер общается по протоколу MCP stdio, а не через публичный REST API — инструменты вызываются вашим AI-клиентом, а не HTTP-запросами, которые вы отправляете сами. Каждый инструмент сопоставляется с одним или несколькими вызовами вышестоящих источников данных.

Инструменты поиска

Инструмент

Описание

Авторизация

search_stations

Поиск кода(ов) станции по названию с нечётким/регистронезависимым сопоставлением

search_trains

Поиск номера(ов) поезда по названию с нечётким/регистронезависимым сопоставлением

get_trains_between

Список всех поездов, соединяющих две станции

Инструменты расписания и статуса

Инструмент

Описание

Авторизация

get_train_schedule

Полный маршрут: каждая станция, время прибытия/отправления, расстояние

get_live_status

Текущее местоположение, минуты задержки, последняя станция

get_station_live

Ближайшие отправления на указанной станции

Инструменты бронирования и тарифов

Инструмент

Описание

Авторизация

check_pnr

Статус PNR, список пассажиров, вагон/место, состояние подтверждения

check_seat_availability

Наличие мест по классам (AVAILABLE / RAC / WL)

get_fare

Разбивка тарифа по классам

Инструменты платформы

Инструмент

Описание

Авторизация

get_coach_position

Схема вагонов на конкретной платформе

get_platform_locator

Определение платформы прибытия поезда

📖 Полные схемы параметров см. в docs/API_REFERENCE.md в репозитории.


🌐 Источники данных

ERail.in (основной)

Эндпоинт

Метод

Формат

TTL кэша

/js5/IRStations.js

GET

JS/JSON-массив

24 часа

/js5/IRTrains.js

GET

JS/JSON-массив

24 часа

/train-enquiry/{train}

GET

HTML-таблица

1 час

/train-running-status/{train}

GET

HTML

2 минуты

/pnr-status/{pnr}?format=json

GET

JSON

30 секунд

/train-seats/{train}

POST

HTML-таблица

2 минуты

/train-fare/{train}

POST

HTML-таблица

1 час

/trains-between-stations/{from}/{to}

POST

HTML-таблица

1 час

/station-live/{station}

GET

HTML-таблица

2 минуты

IndianRailways.info (вторичный)

Эндпоинт

Метод

Формат

TTL кэша

/coach_position/

POST

HTML-таблица

1 час

/platform_locator/

POST

HTML

1 час


⏱ Стратегия кэширования

Тип данных

TTL

Причина

Список станций

24 часа

Редко меняется

Список поездов

24 часа

Редко меняется

Расписание поезда

1 час

Эпизодические обновления

Статус в реальном времени

2 минуты

Данные реального времени

Статус PNR

30 секунд

Данные реального времени

Наличие мест

2 минуты

Частые обновления


🧭 Варианты использования

🗺️ AI-ассистент планирования путешествий

Чат-бот на базе Claude Desktop использует этот сервер для планирования поездки от начала до конца — поиск поездов между двумя городами, проверка наличия мест в реальном времени, получение тарифа и подтверждение расписания — всё в одном разговоре на естественном языке.

📍 Трекер поездов в реальном времени для пассажиров

Ориентированный на пассажиров IVR- или WhatsApp-бот опрашивает get_live_status каждые несколько минут, чтобы сообщать пассажирам точную задержку их поезда и последнюю пройденную станцию.

🎫 PNR-бот-консьерж

Служебный бот, интегрированный с check_pnr, мгновенно отвечает на вопрос «мой билет подтверждён?», включая вагон, место и позицию в листе ожидания для каждого пассажира — без участия человека-оператора.

🎓 Академический / портфолио-проект

Студент, создающий ИИ-агента на основе MCP, использует этот репозиторий как эталонную реализацию многоуровневой, кэшируемой и отказоустойчивой архитектуры скрейпинга за протоколом Model Context Protocol.


💡 Примеры использования

Полное планирование поездки

from indian_railways_mcp.client import IndianRailwaysClient

client = IndianRailwaysClient()

trains = client.get_trains_between("NDLS", "BCT")
train = trains['trains'][0]

seats = client.check_seat_availability(
    train['train_number'], "NDLS", "BCT", "20-Jul-2026"
)

if any(c['status'] == 'AVAILABLE' for c in seats['classes']):
    fare = client.get_fare(train['train_number'], "NDLS", "BCT")
    print(f"Fare: ₹{fare['classes'][0]['total_fare']}")

schedule = client.get_train_schedule(train['train_number'])
print(f"Travel time: {schedule['travel_time']} hours")

Отслеживание поезда в реальном времени

status = client.get_live_status("04815")

if status['status'] == 'RUNNING':
    print(f"{status['train_name']} last seen at {status['last_station']}, "
          f"delayed {status['delay_minutes']} min")

Проверка статуса PNR

pnr = client.check_pnr("4553137968")

for p in pnr['passengers']:
    print(f"Passenger {p['serial']}: {p['current_status']} | "
          f"Coach {p['coach']} | Berth {p['berth']} ({p['berth_type']})")

📁 Структура проекта

Railway_mcp/
├── 📄 README.md                     # Main documentation
├── 📄 pyproject.toml                # Package configuration
├── 📄 LICENSE                       # MIT License
├── 📄 .gitignore                    # Git ignore rules
├── 📁 docs/
│   ├── API_REFERENCE.md             # Complete tool/API documentation
│   ├── ARCHITECTURE.md              # System architecture
│   └── EXAMPLES.md                  # Usage examples
├── 📁 src/
│   └── 📁 indian_railways_mcp/
│       ├── __init__.py              # Package init
│       ├── server.py                # MCP server (10 tools)
│       ├── client.py                # HTTP client (all endpoints)
│       ├── parsers.py               # HTML/JSON parsers
│       ├── models.py                # Pydantic data models
│       └── utils.py                 # Caching + retry utilities
└── 📁 tests/
    ├── test_client.py               # Client tests
    └── test_parsers.py              # Parser tests

🔌 Интеграции с клиентами

Отредактируйте ваш конфигурационный файл:

  • Mac: ~/Library/Application Support/Claude/claude_desktop_config.json

  • Windows: %APPDATA%\Claude\claude_desktop_config.json

  • Linux: ~/.config/Claude/claude_desktop_config.json

{
  "mcpServers": {
    "indian-railways": {
      "command": "python",
      "args": ["-m", "src.indian_railways_mcp.server"],
      "cwd": "/path/to/Railway_mcp",
      "env": { "PYTHONPATH": "/path/to/Railway_mcp/src" }
    }
  }
}

Перезапустите Claude Desktop — вы увидите значок 🔌 со списком инструментов Indian Railways.

Добавьте в ~/.cursor/mcp.json:

{
  "mcpServers": {
    "indian-railways": {
      "command": "python",
      "args": ["-m", "src.indian_railways_mcp.server"],
      "cwd": "/path/to/Railway_mcp"
    }
  }
}

Добавьте в ~/.continue/config.json:

{
  "experimental": {
    "modelContextProtocolServers": [
      {
        "transport": {
          "type": "stdio",
          "command": "python",
          "args": ["-m", "src.indian_railways_mcp.server"],
          "cwd": "/path/to/Railway_mcp"
        }
      }
    ]
  }
}
npx @modelcontextprotocol/inspector python -m src.indian_railways_mcp.server

🐳 Развёртывание в Docker

FROM python:3.11-slim

WORKDIR /app

COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

COPY src/ ./src/

ENV PYTHONPATH=/app

CMD ["python", "-m", "src.indian_railways_mcp.server"]
# Build
docker build -t indian-railways-mcp .

# Run (stdio requires interactive mode)
docker run -i indian-railways-mcp

/etc/systemd/system/indian-railways-mcp.service:

[Unit]
Description=Indian Railways MCP Server
After=network.target

[Service]
Type=simple
User=mcp
WorkingDirectory=/opt/indian-railways-mcp
Environment=PYTHONPATH=/opt/indian-railways-mcp/src
ExecStart=/usr/bin/python3 -m src.indian_railways_mcp.server
Restart=on-failure
RestartSec=10

[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable indian-railways-mcp
sudo systemctl start indian-railways-mcp
sudo systemctl status indian-railways-mcp

🧪 Тестирование

# Install test dependencies
pip install pytest pytest-cov pytest-mock pytest-asyncio

# Run all tests
pytest tests/ -v

# Run with coverage
pytest tests/ -v --cov=src/indian_railways_mcp --cov-report=html

# Run a specific file / class / test
pytest tests/test_client.py -v
pytest tests/test_client.py::TestPNRStatus -v
pytest tests/test_client.py::TestPNRStatus::test_check_pnr_success -v

Сводка по покрытию

Модуль

Тесты

Покрытие

client.py

40+

~95%

parsers.py

25+

~95%

utils.py

10+

~90%

models.py

5+

~85%

Итого

80+

~92%


📈 Производительность

Время отклика (типичное)

Операция

Холодный (мс)

Кэшированный (мс)

Поиск станций

800

5

Поиск поездов

1000

5

Расписание поезда

1500

100

Статус движения

2000

200

Статус PNR

1200

50

Наличие мест

2000

100

Объём памяти: ~50MB базовая (Python + зависимости) · ~65MB с прогретым кэшем станций/поездов · ~80MB пиковое при разборе HTML.


🔒 Примечания по безопасности

  • Аутентификация не требуется — все источники данных являются публичными

  • Безопасно в отношении лимитов запросов — встроенный экспоненциальный backoff предотвращает злоупотребление частотой запросов

  • Валидируемые входные данные — все аргументы инструментов проходят через модели Pydantic

  • Без сохранения данных — PNR и данные пассажиров никогда не записываются на диск

  • Только HTTPS — каждый исходящий запрос шифруется


🔧 Устранение неполадок

Симптом

Причина

Решение

Module not found

PYTHONPATH не задан

export PYTHONPATH="/путь/к/Railway_mcp/src:$PYTHONPATH" или pip install -e .

Ошибка «Permission denied» в скрипте сервера

Отсутствует бит исполнения

chmod +x src/indian_railways_mcp/server.py

Сервер молча завершает работу

В Docker отсутствует -i

Всегда запускайте с docker run -i indian-railways-mcp (для stdio нужен интерактивный режим)

Ошибка Invalid Train

Неверный или повреждённый номер поезда

Убедитесь, что номер пятизначный, через search_trains

Station Not Found

Станция отсутствует в базе

Сначала выполните search_stations, чтобы найти нужную станцию

Ошибка Connection Timeout

Сетевая проблема на стороне источника данных

Автоповтор 3 раза с экспоненциальной задержкой

Rate Limited

Слишком много запросов за короткий промежуток

Встроенный механизм backoff подождёт и повторит запрос

No Data Found

Поезд не курсирует в этот день

Проверьте дни курсирования поезда

Сайт источника изменил HTML-структуру

Устаревшие парсеры

Обновите селекторы в parsers.py


🗺 Дорожная карта

  • Поддержка тарифов и наличия мест для всех классов обслуживания

  • Многоязычный поиск станций (хинди, тамильский, бенгальский)

  • Webhook-уведомления о задержках поездов

  • Автоматическое обновление расписания по сезону


🤝 Участие

# 1. Fork the repository
# 2. Clone your fork
git clone https://github.com/YOUR_USERNAME/Railway_mcp.git
cd Railway_mcp

# 3. Create a feature branch
git checkout -b feature/your-feature-name

# 4. Make your changes and add tests
pytest tests/ -v

# 5. Commit and push
git commit -m "Add: your feature description"
git push origin feature/your-feature-name

# 6. Open a Pull Request against main

Пожалуйста, держите изменения парсеров покрытыми тестами в tests/test_parsers.py — изменения HTML-структуры вышестоящего сайта — самый частый источник регрессий в этом проекте.


👥 Контрибьюторы


⭐ История звёзд

Star History Chart


🤖 Файлы для ИИ-агентов

В репозитории есть заглушки для обнаружения агентами, чтобы ИИ-ассистенты для программирования (и MCP-совместимые краулеры) могли понять проект без чтения всего README:

  • llms.txt — машиночитаемая сводка проекта для LLM-инструментов

  • AGENTS.md — инструкции для агентов, работающих с кодом в этом репозитории


-
license - not tested
Not graded
quality - not tested
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

  • Read and update your Everway trips and itineraries from any MCP-compatible AI assistant.

  • A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…

  • TravelMind: 8 MCP tools for travel (12306 trains, flights, hotels, geocode, planning, policy).

View all MCP Connectors

Latest Blog Posts

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/Shadhai/Railway_mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server