# RZD Tickets MCP [Health: Active]

**Category:** 💻 Developer Tools  
**Repository:** https://github.com/ex3lite/mcp_rzd_tickets  
**GitHub Stars:** 1  
**Views:** 0  
**Installs:** 0  
**Upvotes:** 0  
**Directory Page:** https://allmcps.com/mcp/rzd-tickets-mcp

## Description
Read-only MCP server for RZD trains, cars, seats, adjacent pairs and car photos.

## Claude Desktop Quick Installation
Install path detected from listing signals. Uses `npx` (confidence: high):

```json
"mcpServers": {
  "rzd-tickets-mcp": {
    "command": "npx",
    "args": ["-y","mcp-rzd-tickets"]
  }
}
```

## Documentation & README

<p align="center">
  <img src="https://raw.githubusercontent.com/ex3lite/mcp_rzd_tickets/HEAD/assets/logo.png" alt="RZD Tickets MCP logo" width="140" />
</p>

# RZD Tickets MCP

Read-only MCP-сервер, который дает агентам живые “глаза” на `ticket.rzd.ru`:
поезда, вагоны, цены, нижние/верхние места, боковые места, спецместа, соседние
пары `нижнее+верхнее`, фото вагонов, когда РЖД их публикует, и официальные
ссылки РЖД для ручного оформления.

Сервер не логинится, не бронирует, не создает холд, не оплачивает, не отменяет
заказы и не меняет личный кабинет РЖД.

## Инструменты

| Инструмент | Что делает |
|---|---|
| `rzd_station_suggest` | Ищет `nodeId` и `expressCode` станции по названию. |
| `rzd_search_trains` | Показывает поезда, цены, группы вагонов и ссылку РЖД. |
| `rzd_train_cars` | Проваливается в `CarPricing`: вагоны, места, статистика верх/низ, фото. |
| `rzd_find_places` | Возвращает только совпадения по фильтрам, включая фото вагона. |
| `rzd_checkout_url` | Строит официальную ссылку РЖД для ручного оформления. |
| `rzd_parse_search_url` | Разбирает URL поиска РЖД. |
| `rzd_service_classes` | Объясняет, как читать открытые коды классов РЖД. |

## Установка

```bash
git clone git@github.com:ex3lite/mcp_rzd_tickets.git
cd mcp_rzd_tickets
npm install
npm run build
```

Запуск MCP stdio-сервера:

```bash
node dist/mcp.js
```

Быстрая CLI-проверка:

```bash
node dist/cli.js --suggest "Красноярск"
node dist/cli.js --origin 2038000 --destination 2054275 --date 2026-07-12 --train 376Ы --require-pair --car-type coupe
```

## Конфиг MCP-клиента

Пакет опубликован в npm как `mcp-rzd-tickets`, поэтому установка обычно не
требует clone/build:

```bash
npx -y mcp-rzd-tickets
```

### Claude Code

Глобально для всех проектов:

```bash
claude mcp add -s user rzd_tickets -- npx -y mcp-rzd-tickets
claude mcp list
```

Только для текущего проекта:

```bash
claude mcp add -s project rzd_tickets -- npx -y mcp-rzd-tickets
```

### Codex

```bash
codex mcp add rzd_tickets --env RZD_TIMEOUT_MS=20000 -- npx -y mcp-rzd-tickets
codex mcp list
```

После изменения MCP-конфига уже открытой сессии Codex может понадобиться новый
чат или перезапуск, чтобы сервер появился в списке инструментов.

### Claude Desktop, Cursor, Windsurf, Cline, Roo Code

Для клиентов с JSON MCP-конфигом используй один и тот же блок:

```json
{
  "mcpServers": {
    "rzd_tickets": {
      "command": "npx",
      "args": ["-y", "mcp-rzd-tickets"],
      "env": {
        "RZD_TIMEOUT_MS": "20000"
      }
    }
  }
}
```

Куда вставлять:

| Клиент | Куда ставить |
|---|---|
| Claude Desktop | `~/Library/Application Support/Claude/claude_desktop_config.json`, ключ `mcpServers`. |
| Cursor | `~/.cursor/mcp.json` глобально или `.cursor/mcp.json` в проекте. |
| Windsurf | Settings → Cascade/MCP → Add custom server, затем JSON выше. |
| Cline | MCP Servers → Configure MCP Servers или `~/.cline/mcp.json`. |
| Roo Code | MCP Servers → Edit Global MCP / Edit Project MCP. |

### Continue

Continue умеет читать JSON MCP config, но его родной формат — YAML block в
`.continue/mcpServers/rzd-tickets.yaml`:

```yaml
name: RZD Tickets MCP
version: 0.1.2
schema: v1
mcpServers:
  - name: rzd_tickets
    command: npx
    args:
      - -y
      - mcp-rzd-tickets
```

### Локальный checkout

```json
{
  "mcpServers": {
    "rzd_tickets": {
      "command": "node",
      "args": ["/absolute/path/to/mcp_rzd_tickets/dist/mcp.js"],
      "env": {
        "RZD_TIMEOUT_MS": "20000"
      }
    }
  }
}
```

### Прокси

```json
{
  "mcpServers": {
    "rzd_tickets": {
      "command": "npx",
      "args": ["-y", "mcp-rzd-tickets"],
      "env": {
        "RZD_PROXY_URL": "socks5://user:pass@host:1080",
        "RZD_TIMEOUT_MS": "20000"
      }
    }
  }
}
```

Прокси не нужен по умолчанию. Если `RZD_PROXY_URL` не задан, сервер ходит в
РЖД напрямую.

## Примеры запросов агенту

```text
Найди поезд 376Ы Красноярск Пасс — Анзеби на 2026-07-12.
Нужна соседняя пара нижнее+верхнее в купе.
Боковые и спецместа не учитывать.
Если есть совпадение, дай ссылку РЖД для оформления.
```

```text
Через rzd_station_suggest найди коды Анзеби и Красноярск.
Потом проверь 2 пассажиров на 2026-07-03 по поезду 097Э.
Ищу пару нижнее+верхнее в одном отсеке.
```

## Фильтры

- `trains`: точные номера поездов, например `["097Э"]`.
- `departureFrom` / `departureTo`: окно отправления `HH:mm`.
- `carType`: `coupe`, `platz` или сырой тип РЖД.
- `service`: сырой код класса РЖД, например `2Ш`; список кодов открыт.
- `placeKind`: `lower`, `upper`, `other`.
- `requirePair`: соседняя пара `нижнее+верхнее` в одном отсеке.
- `includeSide`: учитывать боковые места.
- `includeAccessible`: учитывать спецместа для инвалидов/сопровождающих.
- `includeImages`: подтягивать галерею вагона, если РЖД вернул `HasImages=true`; по умолчанию включено в MCP.
- `maxPrice`, `minPlaces`: цена и минимальное количество мест.

## Фото вагонов

В `rzd_train_cars` и `rzd_find_places` каждый вагон содержит `imageInfo`.

- `hasImages`: флаг из `CarPricing`.
- `fetched`: удалось ли сходить в endpoint галереи.
- `schemeId`, `schemeName`, `carSubType`, `carrier`: идентификаторы схемы/типа вагона из РЖД.
- `images[].thumbnailUrl`: миниатюра.
- `images[].contentUrl`: полноразмерное фото.
- `unavailableReason` / `error`: почему фото нет или запрос не удался.

Важно: у РЖД фото есть не для каждого вагона. Если в `CarPricing`
`HasImages=false`, MCP не придумывает картинку и явно пишет причину в
`imageInfo.unavailableReason`.

## Классы вагонов РЖД

Класс обслуживания РЖД не моделируется как enum. Это намеренно.

РЖД может добавлять и менять коды, поэтому сервер отдает агенту:

- `code`: сырой код РЖД, например `2Ш`;
- `title`: человекочитаемый заголовок из ответа РЖД, типа вагона или общего семейства;
- `tags`: факты из официального `ServiceClassTranscript` и осторожные подсказки;
- `transcript`: официальный текст РЖД, если он пришел в `CarPricing`;
- `description`: готовая строка для показа человеку.

Агент должен показывать сырой код вместе с `description`, а точный смысл брать
из `transcript`, когда он есть. Так не нужно расширять локальный enum каждый
раз, когда РЖД вводит новый вариант.

## Переменные окружения

| Переменная | Описание |
|---|---|
| `RZD_PROXY_URL` | Опциональный `http://`, `https://`, `socks4://` или `socks5://` прокси. |
| `RZD_TIMEOUT_MS` | Таймаут запроса. По умолчанию `20000`. |

## Публикация

Основной путь:

```bash
npm publish --access public
mcp-publisher login github
mcp-publisher publish
```

`server.json` уже подготовлен для официального MCP Registry:
`io.github.ex3lite/mcp-rzd-tickets`. Сам registry хранит metadata, а код должен
лежать в публичном npm-пакете `mcp-rzd-tickets`.

Дополнительно можно опубликовать на Smithery. Для текущего stdio-сервера нужен
MCPB bundle; для URL-публикации на Smithery потребуется отдельный Streamable
HTTP endpoint.

## Языки

- [English](https://github.com/ex3lite/mcp_rzd_tickets/blob/HEAD/docs/README.en.md)
- [中文](https://github.com/ex3lite/mcp_rzd_tickets/blob/HEAD/docs/README.zh.md)

## Ограничения

RZD может менять приватные web-endpoint без предупреждения. Этот сервер
использует те же read-only pricing endpoint, что и публичный web-app, и
браузероподобные заголовки. Если payload РЖД изменится, ошибка должна быть
видна агенту, а не скрыта.

