Skip to main content
Glama

DOOM через MCP

MCP Registry npm version npm downloads License: MIT

Может ли он запустить DOOM? Да — ваш ИИ-ассистент для написания кода может запустить DOOM.

Играйте в DOOM в Claude Code, Cursor или любом MCP-совместимом клиенте. ИИ видит игру, сражается с демонами, исследует уровни и описывает происходящее, а вы управляете его ходом за ходом.

> Let's play DOOM!

  Starting E1M1 on medium difficulty...

  HP:100 Armor:0 | Pistol (key:2) | Ammo: 50b 0s 0r 0c | Kills:0 | E1M1
  No enemies in sight. Exploring the corridor ahead.

> Go forward and find some enemies

  Sprinting down the hallway... I can see an opening ahead.

  HP:100 Armor:0 | Pistol (key:2) | Ammo: 50b 0s 0r 0c | Kills:0 | E1M1
  ENEMIES IN SIGHT (aim for angle~0 then fire): Imp (HP:60) to your left (turn_left ~9) nearby

  There's an Imp to the left! Turning to face it...

> Shoot it!

  Aimed and firing!

  HP:100 Armor:0 | Pistol (key:2) | Ammo: 47b 0s 0r 0c | Kills:0 | E1M1
  ENEMIES IN SIGHT (aim for angle~0 then fire): Imp (HP:15) AHEAD close

  Hit! The Imp is wounded (HP:15). One more burst should finish it.

  HP:95 Armor:0 | Pistol (key:2) | Ammo: 44b 0s 0r 0c | Kills:1 | E1M1
  ITEMS: Stimpack (+10 HP) slightly to your right (turn_right ~4) point-blank (~3 ticks fwd+run to reach)
  1 kill! Want to see a screenshot?

Подробная история на блог-посте.


Оглавление


Related MCP server: local-agent-context

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

Rust MCP-сервер встраивает настоящий движок DOOM (doomgeneric) напрямую через FFI. Никакой эмуляции, никаких дочерних процессов. Каждый вызов инструмента продвигает игру на несколько тиков и возвращает:

  1. Состояние игры — здоровье, броня, патроны, убийства, позиция, текущее оружие.

  2. Данные о врагах — видимые враги с читаемым направлением, расстоянием и количеством здоровья.

  3. Ближайшие предметы — здоровье, патроны, броня, оружие в радиусе подбора.

  4. Двери и переключатели — перезагружаемые linedefs, обнаруженные рядом.

  5. Кадр изображения — маленький PNG-превью для «зрения» ИИ.

ИИ использует эту информацию, чтобы перемещаться, сражаться и исследовать. Или направьте его, или позвольте ему играть автономно.

graph LR
    A[MCP Client] -->|doom_start| B[doom-mcp binary]
    A -->|doom_action| B
    A -->|doom_screenshot| B
    B -->|FFI| C[doomgeneric C engine]
    C -->|frame buffer| B
    B -->|game state + PNG| A

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

1. Зарегистрируйте в своём MCP-клиенте

Claude Code:

claude mcp add doom --scope user -- npx -y doom-mcp

Cursor, Windsurf или любой MCP-клиент — добавьте в .mcp.json:

{
  "mcpServers": {
    "doom": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "doom-mcp"]
    }
  }
}

2. Играйте

Откройте новый семинар и скажите:

«Давай сыграем в DOOM»

ИИ спросит, какой режим вы хотите, запустит игру на E1M1 и начнёт играть.


Режимы игры

Режим

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

Для чего лучше всего

Вы направляете

Вы даёте команды (« вперёд », « открой ту дверь», « стреляй в импа»). ИИ выполняет одно действие за раз и описывает, что произошло.

Погружающаяся игра с управлением

ИИ автономен

ИИ принимает все решения — движение, бой, исследование. Вы наблюдаете и при необходимости вмешиваетесь.

Смотреть за игрой ИИ


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

doom_start

Запускает или перезапускает DOOM. Безопасно вызывать в любое время — если игра уже запущена, будет выполнен чистый перезапуск без нового семода.

Параметр

Тип

По умолчанию

Описание

skill

int (1-5)

3

Сложность: 1=новичок, 2=уровень easy, 3=medium, 4=hard, 5=nightmare

episode

int (1-4)

1

Номер эпизода

map

int (1-9)

1

Номер карты

doom_action

Продвигает игру. Все перечисленные действия выполняются одновременно в течение длительности тиков.

Параметр

Тип

Обязателен

Описание

actions

string

да

Список через запятую: forward, backward, turn_left, turn_right, strafe_left, strafe_right, fire, use, run, 1-7

ticks

int (1-105)

нет

Количество игровых тиков для продвижения. По умолчанию 7. При 35 тиках/с: 7 ~ 0.2с, 35 ~ 1с.

  • fire удерживает спусков крючок всё указанное время. Пистолет автоматически стреляет каждые ~10 тиков.

  • Поворот и выстрел должны быть отдельными действиями ( поворот во время стрельбы расходует патроны впустую).

  • use открывает двери и активирует переключатели.

  • Клавиши оружия: 1=кулаки, 2=пистолет, 3=дробовик, 4=для ракет, 5=ракетомет, 6=плазма, 7=BFG.

doom_screenshot

Сохраняет скриншот 320x200 в системную временную папку и открывает его в просмотрщике по умолчанию. Игру не продвигает (кроме короткой паузы для стабилизации кадра).


Конфигурация

Переменная окружения

Описание

DOOM_WAD_PATH

Путь к своему IWAD-файлу (например, вашему DOOM.WAD или DOOM2.WAD)

DOOM_MCP_DEBUG

Установите 1, чтобы включить отладочное логирование в doom-mcp.log в системной временной папке

Встроенный FreeDMO-WAD работает из коробки, но оригинальный DOOM shareware WAD имеет уровни и спрайты получше. Чтобы использовать его:

  1. Скачайте DOOM1.WAD с doomworld.com/classicdoom/info/shareware.php (легально, бесплатно).

  2. Установите DOOM_WAD_PATH в конфигурации MCP:

{
  "mcpServers": {
    "doom": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "doom-mcp"],
      "env": {
        "DOOM_WAD_PATH": "/path/to/DOOM1.WAD"
      }
    }
  }
}

Если у вас есть DOOM или DOOM 2, эти WAD можно использовать аналогично. Чтобы использовать любой пользовательский WAD:

{
  "mcpServers": {
    "doom": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "doom-mcp"],
      "env": {
        "DOOM_WAD_PATH": "/path/to/DOOM.WAD"
      }
    }
  }
}

FAQ

Это работает на Windows? Да. npm-пакет включает бинарник для Windows x64. Регистрация выполняется так же, как на Linux или macOS.

Могу ли я использовать свой WAD DOOM (DOOM.WAD, DOOM2.WAD)? Да. Установите DOOM_WAD_PATH в конфигурации MCP. Shareware DOOM1.WAD можно свободно скачать с doomworld.com — и он даёт куда более качественные уровни, чем встроенный Freedoom. Подробности см. в разделе Конфигурация.

Сколько это стоит в API-токенов? Каждый вызови doom_action возвращает ~1–2 Кб текста (состояние игры + данные о врагах) плюс ~6 Кб PNG-превью. Это примерно 1 500–2 500 токенов на действие. Типичная игровая сессия из 50 действий потребляет порядка 75 000–125 000 токенов.

Влияет ли ИИ действительно хорошо играть в DOOM? Он может перемещаться по уровням, находить врагов, прицеливаться и вести бой. Это около 5–10 убийств за сессию на E1M1 при средней сложности. У него бывают трудности с врагами за укрытием и с прохождением сложных дверных последовательностей. Результат улучшается, если вести его за руку.

Можно ли играть на конкретном уровне? Да. Передайте параметры episode и map в doom_start. Например, эпизод 1, карта 3 будет соответствовать episode:1, map:3.

Что происходит при смерти? Движок выводит HP:0 и предлагает снимок экрана со смертью. В рамках одной сессии нет перезапуска — начните новый разговор, чтобы сыграть снова.

Есть ли многопользовательский режим? Пока нет. Протокол сетевого мультиплеера DOOM теоретически может поддержать мультиагентную игру, но пока не реализовано.

Не читер ИИ? Может видеть сквозь стены? Нет. Поиск врагов использует собственную линейную проверку обзора DOOM (P_CheckSight). ИИ видит только тех врагов, которые могли бы быть видны на экране. Предметы по близости, но их всё равно нужно подбирать, подойдя к ним.


Архитектура

src/main.rs         MCP JSON-RPC server over stdio
src/doom.rs         Engine FFI wrapper: init, tick, frame capture, state extraction
src/renderer.rs     PNG rendering (216-color palette thumbnails for MCP, full RGB for screenshots)
src/paths.rs        WAD file discovery across platforms
src/log.rs          Debug logging to file
build.rs            Compiles doomgeneric C sources via cc crate (whitelist approach)
csrc/platform.c     DG_ callbacks, virtual time, key injection, enemy/item/door detection

При компиляции бинарник связывается с движком doomgeneric C. Во время выполнения это единый процесс без запуска подпроцессов. Кадры читаются из общего буфера экрана, клавиши вводятся через FFI.

Виртуальное время — время движка не привязано к реальному. Каждый вызов doomgeneric_Tick() продвигает игру ровно на один игровой тик (1/35 секунды), независимо от реального времени. Это делает игровой процесс детерминированные и не даёт терять игровые такты.

Обнаружение врагов и предметов — сервер обходит внутренний список объектов движка (цепочку thinker_t), чтобы найти ближайшие врагов и предметы. Проверка линии видимости использует встроенную в Doom P_CheckSight(). Сообщать только о видимых случаях — этим исключается «стенахакерство».


Разработка

Требуется: Rust-инструменты, GCC, make, Git, curl, unzip.

git clone https://github.com/gunnargrosch/doom-mcp.git
cd doom-mcp
bash scripts/setup.sh      # clones engines, downloads Freedoom WAD
cargo build --release       # compiles everything into a single binary
cargo test                  # runs unit + integration tests

Зарегистрируйте локальную сборку для тестирования:

claude mcp add doom --scope user -- ./target/release/doom-mcp

Включите отладочное логирование:

claude mcp add doom --scope user -e DOOM_MCP_DEBUG=1 -- ./target/release/doom-mcp
tail -f /tmp/doom-mcp.log   # Linux/macOS (Windows: %TEMP%\doom-mcp.log)

npm-пакет

Соберите npm-пакет локально:

bash scripts/build-npm.sh   # copies binary + WAD into npm/
cd npm && npm pack           # creates doom-mcp-0.1.2.tgz

Публикация (нужен npm-аккаунт и NPM_TOKEN для CI):

cd npm && npm publish

Благодарности

  • doomgeneric от ozkl — портируемый движок Doom

  • Freedoom — открытый индекс IWAD-файлов

  • id Software — оригинальный DOOM (GPL-2.0)


Журнал изменений

Подробный список изменений см. в CHANGELOG.md.

Лицензия

Код MCP-сервера в этом репозитории лицензирован под MIT.

doomgeneric имеет лицензию GPL-2.0 и получается при сборке (не вендорятся). The Freedoom WAD поддержим распространяется по лицензии BSD-стиля.

A
license - permissive license
Not graded
quality - not tested
C
maintenance

Maintenance

Maintainers
Response time
0dRelease cycle
4Releases (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 Servers

View all related MCP servers

Related MCP Connectors

  • Driflyte MCP server which lets AI assistants query topic-specific knowledge from web and GitHub.

  • Hosted MCP server connecting claude.ai, ChatGPT and other AI apps to your own computer

  • An MCP server that gives your AI access to the source code and docs of all public github repos

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/gunnargrosch/doom-mcp'

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