doom-mcp
DOOM a través de MCP
¿Puede ejecutar DOOM? Sí: tu asistente de codificación con IA puede ejecutar DOOM.
Juega a DOOM en Claude Code, Cursor o cualquier cliente compatible con MCP. La IA ve el juego, lucha contra demonios, navega por los niveles e informa de lo que ocurre, o tú la diriges movimiento a movimiento.
> 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?Lee la entrada de blog para conocer la historia completa.
Tabla de contenidos
Related MCP server: local-agent-context
Cómo funciona
Un servidor MCP en Rust integra el motor real de DOOM (doomgeneric) directamente mediante FFI. Sin emulación, sin procesos secundarios. Cada llamada a una herramienta avanza el juego un número de ticks y devuelve:
Estado del juego - HP, armadura, munición, muertes, posición, arma actual
Información de enemigos - enemigos visibles con dirección, distancia y HP legibles para humanos
Objetos cercanos - salud, munición, armadura, armas dentro del rango de recogida
Puertas e interruptores - linedefs interactuables detectados dentro del rango
Imagen del fotograma - miniatura PNG pequeña para la visión de la IA
La IA usa esta información para navegar, luchar y explorar. Puedes dirigirla o dejarla jugar de forma autónoma.
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| AInicio rápido
1. Regístrate con tu cliente MCP
Claude Code:
claude mcp add doom --scope user -- npx -y doom-mcpCursor, Windsurf o cualquier cliente MCP - añade a .mcp.json:
{
"mcpServers": {
"doom": {
"type": "stdio",
"command": "npx",
"args": ["-y", "doom-mcp"]
}
}
}2. Juega
Abre una nueva sesión y di:
"Juguemos a DOOM"
La IA te preguntará qué modo quieres, iniciará el juego en E1M1 y comenzará a jugar.
Modos de juego
Modo | Cómo funciona | Mejor para |
Tú diriges | Tú das órdenes ("ve hacia adelante", "abre esa puerta", "dispara al imp"). La IA ejecuta una acción a la vez y describe lo que ocurre. | Juego guiado inmersivo |
IA autónoma | La IA toma todas las decisiones: movimiento, combate, exploración. Tú observas e intervienes si es necesario. | Ver jugar a la IA |
Referencia de herramientas
doom_start
Inicia o reinicia DOOM. Es seguro llamarlo en cualquier momento: si ya hay un juego en ejecución, se reinicia limpiamente sin necesidad de una nueva sesión.
Parámetro | Tipo | Predeterminado | Descripción |
| int (1-5) | 3 | Dificultad: 1=bebé, 2=fácil, 3=medio, 4=difícil, 5=pesadilla |
| int (1-4) | 1 | Número de episodio |
| int (1-9) | 1 | Número de mapa |
doom_action
Avanza el juego. Todas las acciones enumeradas se mantienen simultáneamente durante la duración del tick.
Parámetro | Tipo | Obligatorio | Descripción |
| string | sí | Separadas por comas: |
| int (1-105) | no | Ticks de juego a avanzar. Predeterminado 7. A 35 ticks/seg: 7 ~ 0,2 s, 35 ~ 1 s |
Notas de juego:
firemantiene el gatillo durante toda la duración. La pistola dispara automáticamente cada ~10 ticks.Girar y disparar deben ser acciones separadas (girar mientras se dispara desperdicia munición).
useabre puertas y activa interruptores.Teclas de armas: 1=puños, 2=pistola, 3=escopeta, 4=ametralladora, 5=lanzacohetes, 6=plasma, 7=BFG.
doom_screenshot
Guarda una captura de pantalla de resolución completa de 320x200 en el directorio temporal del sistema y la abre en el visor de imágenes predeterminado. No avanza el juego (más allá de una breve pausa para que el fotograma se asiente).
Configuración
Variable de entorno | Descripción |
| Ruta a un archivo IWAD personalizado (por ejemplo, tu propio |
| Establécelo a |
El WAD de Freedoom incluido funciona sin configuración adicional, pero el WAD shareware original de DOOM tiene mejores niveles y sprites. Para usarlo:
Descarga
DOOM1.WADdesde doomworld.com/classicdoom/info/shareware.php (legal, gratuito)Establece
DOOM_WAD_PATHen tu configuración de MCP:
{
"mcpServers": {
"doom": {
"type": "stdio",
"command": "npx",
"args": ["-y", "doom-mcp"],
"env": {
"DOOM_WAD_PATH": "/path/to/DOOM1.WAD"
}
}
}
}Si posees DOOM o DOOM 2, puedes usar esos WAD de la misma manera. Para usar cualquier WAD personalizado:
{
"mcpServers": {
"doom": {
"type": "stdio",
"command": "npx",
"args": ["-y", "doom-mcp"],
"env": {
"DOOM_WAD_PATH": "/path/to/DOOM.WAD"
}
}
}
}Preguntas frecuentes
¿Funciona esto en Windows? Sí. El paquete npm incluye un binario de Windows x64. Regístralo de la misma manera que en macOS/Linux.
¿Puedo usar mi propio WAD de DOOM (DOOM.WAD, DOOM2.WAD)?
Sí. Establece DOOM_WAD_PATH en tu configuración de MCP. El DOOM1.WAD shareware se puede descargar gratis desde doomworld.com y tiene niveles mucho mejores que el Freedoom incluido. Consulta la sección Configuración para más detalles.
¿Cuánto cuesta esto en tokens de API?
Cada llamada a doom_action devuelve ~1-2 KB de texto (estado del juego + información de enemigos) más una miniatura PNG de ~6 KB. Eso es aproximadamente 1.500-2.500 tokens por acción. Una sesión de juego típica de 50 acciones usa alrededor de 75.000-125.000 tokens.
¿Puede la IA jugar bien a DOOM? Puede navegar por los niveles, encontrar enemigos, apuntar y luchar. Consigue alrededor de 5-10 muertes por sesión en E1M1 con dificultad media. Le cuesta con enemigos detrás de cobertura parcial y navegar secuencias complejas de puertas. Mejora cuando la diriges.
¿Puedo jugar un nivel específico?
Sí. Pasa los parámetros episode y map a doom_start. Por ejemplo, el episodio 1 mapa 3 sería episode:1, map:3.
¿Qué ocurre cuando muero? El motor informa de HP:0 y ofrece una captura de pantalla de la pantalla de muerte. Actualmente no hay reinicio dentro de una sesión: inicia una nueva conversación para volver a jugar.
¿Esto admite multijugador? Todavía no. El protocolo multijugador de DOOM podría teóricamente admitir juego multiagente, pero no está implementado.
¿Hace trampa la IA? ¿Puede ver a través de las paredes?
No. La detección de enemigos usa la comprobación nativa de línea de visión de DOOM (P_CheckSight). La IA solo ve enemigos que serían visibles en pantalla. Los objetos se detectan por proximidad, pero la IA aún tiene que caminar sobre ellos para recogerlos.
Arquitectura
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 detectionEl binario enlaza el motor C de doomgeneric en tiempo de compilación. En tiempo de ejecución es un único proceso sin creación de subprocesos. Los fotogramas se leen de un búfer de pantalla compartido y las entradas de teclado se inyectan mediante FFI.
Tiempo virtual - El reloj del motor está desacoplado del tiempo real. Cada doomgeneric_Tick() avanza exactamente un tic de juego (1/35 de segundo), independientemente del tiempo real transcurrido. Esto hace que el juego sea determinista y evita que se omitan ticks.
Detección de enemigos y objetos - El servidor itera la lista interna de objetos del motor (cadena thinker_t) para encontrar enemigos cercanos y objetos recogibles. Las comprobaciones de línea de visión usan el P_CheckSight() nativo de Doom. Solo se informa de enemigos visibles para evitar trampas de "wallhack".
Desarrollo
Requiere: cadena de herramientas de 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 testsRegistra la compilación local para pruebas:
claude mcp add doom --scope user -- ./target/release/doom-mcpHabilita el registro de depuración:
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)Paquete npm
Compila el paquete npm localmente:
bash scripts/build-npm.sh # copies binary + WAD into npm/
cd npm && npm pack # creates doom-mcp-0.1.2.tgzPublicar (requiere cuenta npm + NPM_TOKEN para CI):
cd npm && npm publishCréditos
doomgeneric de ozkl - motor DOOM portátil
Freedoom - archivos IWAD de código abierto
id Software - el DOOM original (GPL-2.0)
Registro de cambios
Consulta CHANGELOG.md para obtener una lista detallada de cambios.
Licencia
MIT para el código del servidor MCP en este repositorio.
doomgeneric tiene licencia GPL-2.0 y se clona en tiempo de compilación (no se incluye). El WAD de Freedoom se distribuye bajo una licencia de estilo 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