Skip to main content
Glama

DOOM a través de MCP

MCP Registry npm version npm downloads License: MIT

¿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:

  1. Estado del juego - HP, armadura, munición, muertes, posición, arma actual

  2. Información de enemigos - enemigos visibles con dirección, distancia y HP legibles para humanos

  3. Objetos cercanos - salud, munición, armadura, armas dentro del rango de recogida

  4. Puertas e interruptores - linedefs interactuables detectados dentro del rango

  5. 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| A

Inicio rápido

1. Regístrate con tu cliente MCP

Claude Code:

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

Cursor, 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

skill

int (1-5)

3

Dificultad: 1=bebé, 2=fácil, 3=medio, 4=difícil, 5=pesadilla

episode

int (1-4)

1

Número de episodio

map

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

actions

string

Separadas por comas: forward, backward, turn_left, turn_right, strafe_left, strafe_right, fire, use, run, 1-7

ticks

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:

  • fire mantiene 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).

  • use abre 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

DOOM_WAD_PATH

Ruta a un archivo IWAD personalizado (por ejemplo, tu propio DOOM.WAD o DOOM2.WAD)

DOOM_MCP_DEBUG

Establécelo a 1 para habilitar el registro de depuración en doom-mcp.log en el directorio temporal del sistema

El WAD de Freedoom incluido funciona sin configuración adicional, pero el WAD shareware original de DOOM tiene mejores niveles y sprites. Para usarlo:

  1. Descarga DOOM1.WAD desde doomworld.com/classicdoom/info/shareware.php (legal, gratuito)

  2. Establece DOOM_WAD_PATH en 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 detection

El 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 tests

Registra la compilación local para pruebas:

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

Habilita 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.tgz

Publicar (requiere cuenta npm + NPM_TOKEN para CI):

cd npm && npm publish

Créditos


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.

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