doom-mcp
DOOM через MCP
Может ли он запустить 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. Никакой эмуляции, никаких дочерних процессов. Каждый вызов инструмента продвигает игру на несколько тиков и возвращает:
Состояние игры — здоровье, броня, патроны, убийства, позиция, текущее оружие.
Данные о врагах — видимые враги с читаемым направлением, расстоянием и количеством здоровья.
Ближайшие предметы — здоровье, патроны, броня, оружие в радиусе подбора.
Двери и переключатели — перезагружаемые linedefs, обнаруженные рядом.
Кадр изображения — маленький 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-mcpCursor, Windsurf или любой MCP-клиент — добавьте в .mcp.json:
{
"mcpServers": {
"doom": {
"type": "stdio",
"command": "npx",
"args": ["-y", "doom-mcp"]
}
}
}2. Играйте
Откройте новый семинар и скажите:
«Давай сыграем в DOOM»
ИИ спросит, какой режим вы хотите, запустит игру на E1M1 и начнёт играть.
Режимы игры
Режим | Как это работает | Для чего лучше всего |
Вы направляете | Вы даёте команды (« вперёд », « открой ту дверь», « стреляй в импа»). ИИ выполняет одно действие за раз и описывает, что произошло. | Погружающаяся игра с управлением |
ИИ автономен | ИИ принимает все решения — движение, бой, исследование. Вы наблюдаете и при необходимости вмешиваетесь. | Смотреть за игрой ИИ |
Справочник инструментов
doom_start
Запускает или перезапускает DOOM. Безопасно вызывать в любое время — если игра уже запущена, будет выполнен чистый перезапуск без нового семода.
Параметр | Тип | По умолчанию | Описание |
| int (1-5) | 3 | Сложность: 1=новичок, 2=уровень easy, 3=medium, 4=hard, 5=nightmare |
| int (1-4) | 1 | Номер эпизода |
| int (1-9) | 1 | Номер карты |
doom_action
Продвигает игру. Все перечисленные действия выполняются одновременно в течение длительности тиков.
Параметр | Тип | Обязателен | Описание |
| string | да | Список через запятую: |
| int (1-105) | нет | Количество игровых тиков для продвижения. По умолчанию 7. При 35 тиках/с: 7 ~ 0.2с, 35 ~ 1с. |
fireудерживает спусков крючок всё указанное время. Пистолет автоматически стреляет каждые ~10 тиков.Поворот и выстрел должны быть отдельными действиями ( поворот во время стрельбы расходует патроны впустую).
useоткрывает двери и активирует переключатели.Клавиши оружия: 1=кулаки, 2=пистолет, 3=дробовик, 4=для ракет, 5=ракетомет, 6=плазма, 7=BFG.
doom_screenshot
Сохраняет скриншот 320x200 в системную временную папку и открывает его в просмотрщике по умолчанию. Игру не продвигает (кроме короткой паузы для стабилизации кадра).
Конфигурация
Переменная окружения | Описание |
| Путь к своему IWAD-файлу (например, вашему |
| Установите |
Встроенный FreeDMO-WAD работает из коробки, но оригинальный DOOM shareware WAD имеет уровни и спрайты получше. Чтобы использовать его:
Скачайте
DOOM1.WADс doomworld.com/classicdoom/info/shareware.php (легально, бесплатно).Установите
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-стиля.
This server cannot be installed
Maintenance
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
- AlicenseAqualityAmaintenanceAn MCP server that empowers AI coding agents to work effectively with Minecraft mod development, providing static analysis of decompiled source code and runtime interaction with a running Minecraft instance.313913MIT
- AlicenseNot gradedqualityDmaintenanceA local MCP server that gives AI coding agents persistent memory and context across sessions.9MIT
- AlicenseAqualityCmaintenanceAn MCP server that gives AI assistants full control over the Godot game engine, enabling scene building, script writing, game running, and more through natural language.751652MIT
- AlicenseNot gradedqualityDmaintenanceAn MCP server for the DM3 game engine that enables AI assistants to create, build, and run game projects, generate components, query documentation, and validate code.MIT
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
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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