Skip to main content
Glama
Lqueed

rutracker_mcp

by Lqueed
README.md
# rutracker_mcp

**MCP-сервер для [RuTracker](https://rutracker.org)** — поиск раздач и скачивание `.torrent`-файлов прямо из Claude (Desktop / Code / API) и любых MCP-совместимых клиентов.

> ⚠️ **Это форк.** Основан на [`CarrySauce/rutracker-mcp-server`](https://github.com/carrysauce/rutracker-mcp-server) (который, в свою очередь, форк [`notnooblord/rutracker-mcp-server`](https://github.com/notnooblord/rutracker-mcp-server)), на FastMCP + [`py-rutracker-client`](https://github.com/carrysauce/py_rutracker). Оригинальный MCP-сервер (`server.py`) и набор инструментов сохранены без изменений. Форк добавляет **обход блокировок для доступа из РФ**.

## Зачем форк

Оригинал логинится обычным POST на `login.php`. В российских условиях это не работает:

1. **Cloudflare Managed Challenge.** RuTracker закрыт анти-бот-проверкой Cloudflare; простой HTTP-клиент (`aiohttp`) её не проходит и получает `403`.
2. **Блокировка РКН + привязка `cf_clearance` к IP.** Сайт заблокирован у российских провайдеров, а токен Cloudflare привязан к IP и User-Agent.

### Что добавлено

| Файл | Назначение |
|---|---|
| `cookie_auth.py` | `CookieRuTrackerClient`: логин **по cookie** (обход Cloudflare) + **бинд сокета к VPN-адаптеру** (принудительный выход через VPN, а не через РФ-провайдера) |
| `get_cookies_pr.py` | Добыча cookie (`bb_session` + `cf_clearance`) через **настоящий Chrome под [patchright](https://github.com/Kaliiiiiiiiii-Vinyzu/patchright)** — стелс-браузер проходит Cloudflare на чистом VPN-IP |
| `test_cookie.py` | Проверка «логин по cookie + поиск» |

Подробнее — в [docs/USER_GUIDE_RU.md](docs/USER_GUIDE_RU.md) (для людей) и [AGENTS.md](AGENTS.md) (для AI-агентов).

## Как это работает

```
get_cookies_pr.py  --(patchright + настоящий Chrome через VPN)-->  проходит Cloudflare, логинится
                   --> cookies.json (bb_session, cf_clearance, User-Agent)

server.py (MCP) --> CookieRuTrackerClient:
                    • вливает cookies.json в aiohttp-сессию (без login.php)
                    • биндит сокет к IP TAP-адаптера VPN (тот же IP, что у Chrome)
                    • тот же User-Agent -> cf_clearance валиден
```

## Требования

- **Python 3.13+**
- **Аккаунт RuTracker**
- **VPN с TAP-адаптером** (протестировано на **ZoogVPN**). Из РФ — обязательно.
- **Google Chrome** (для добычи cookie через patchright)

## Быстрый старт

```bash
git clone https://github.com/Lqueed/rutracker_mcp.git
cd rutracker_mcp
python -m venv .venv
.venv/Scripts/python -m pip install -r requirements.txt
.venv/Scripts/python -m pip install patchright psutil
.venv/Scripts/python -m patchright install chromium

cp .env.example .env          # вписать RUTRACKER_LOGIN и RUTRACKER_PASSWORD
# включить VPN, затем добыть cookie:
.venv/Scripts/python get_cookies_pr.py
# проверить:
.venv/Scripts/python test_cookie.py     # -> "УСПЕХ: получено результатов: N"
```

### Подключение к Claude Code

```bash
claude mcp add rutracker --scope user \
  --env HTTP_PROXY= --env HTTPS_PROXY= \
  -- /abs/path/.venv/Scripts/python.exe /abs/path/server.py --transport stdio
```

Пустые `HTTP_PROXY/HTTPS_PROXY` — чтобы python не ходил через возможный системный прокси.

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

| Инструмент | Описание |
|---|---|
| `search_torrents` | Поиск по ключевым словам на странице (50 результатов), с magnet-ссылками |
| `search_all_pages` | Параллельный поиск по нескольким страницам |
| `get_torrent_info` | Полное описание раздачи (качество, кодек, текст поста, magnet) |
| `download_torrent` | Скачать `.torrent` по `topic_id` (MCP-вложение) |
| `get_topic_url` | URL темы и прямой URL скачивания по `topic_id` |

Сервер отдаёт **только `.torrent` и magnet-ссылки**, не сам контент — для загрузки используйте BitTorrent-клиент (qBittorrent, Transmission).

## Настройка VPN-бинда

Клиент автоматически ищет адаптер, чьё имя содержит `zoog`. Переопределить:
- `RUTRACKER_VPN_ADAPTER` — подстрока имени адаптера (по умолчанию `zoog`);
- `RUTRACKER_BIND_IP` — явный IP для привязки сокета.

Если оба не заданы и адаптер не найден — бинд отключается (python пойдёт обычным маршрутом).

## Безопасность

`.env`, `cookies.json`, `.chrome-profile/` содержат креды/сессию и **исключены из git** (`.gitignore`). Не коммитьте их.

## Благодарности / лицензия

Оригинальные MCP-сервер и библиотека — [CarrySauce](https://github.com/carrysauce), [notnooblord](https://github.com/notnooblord). Лицензия наследуется от оригинального проекта.