MCP server de romdev
Commit 11 nov 2026Permite que un agente de IA construya, ejecute, depure, realice ingeniería inversa y recompile juegos de consolas retro en 19 plataformas diferentes.
También conocido como monteslu/romdev, romdevtools
- Stars
- 32
- Herramientas
- —
- Descargas, 30 días
- —
- Última versión
- —
- Último commit
- 11 nov 2026
- Licencia
- —
¿Qué es romdev MCP?
romdev es un MCP server. Permite que un agente de IA construya, ejecute, depure, realice ingeniería inversa y recompile juegos de consolas retro en 19 plataformas diferentes.
Resumen generado a partir del README del proyecto
Acerca del MCP server de romdev
Los desarrolladores y agentes de programación pueden construir, ejecutar, depurar y realizar ingeniería inversa a juegos de consolas retro en 19 plataformas diferentes usando romdev. Este servidor de herramientas es compatible con todo, desde el Atari 2600 hasta la Dreamcast, así como con PICO-8 y entornos de ejecución WebAssembly como wasmcart y jsgame. Debido a que cada compilador, núcleo de emulador y motor de análisis se entrega como WebAssembly a través de npm, no se requieren dependencias externas ni instalaciones complejas más allá de Node 24 o superior.
El servidor expone 38 herramientas a través de MCP o HTTP, lo que permite tareas como la compilación por plataforma con toolchains como cc65, SGDK y libtonc. Ofrece capacidades de inspección profunda mediante núcleos de libretro, permitiendo a los usuarios leer la memoria, inspeccionar sprites y gestionar estados de la CPU. Las funciones avanzadas incluyen la recompilación estática de ROMs a wasmcart, descompilación compatible para N64 y PlayStation, y una ingeniería inversa sofisticada utilizando versiones de WebAssembly de Rizin y Ghidra. Los usuarios incluso pueden abrir una ventana SDL mediante playtest() para interactuar manualmente con un juego en ejecución.
Qué puedes hacer con él
- 1Desarrollo automatizado de juegos retroUn agente de IA puede hacer un fork de un ejemplo funcional y construir, cargar y tomar capturas de pantalla de un nuevo juego con un solo comando.
- 2Ingeniería inversa y análisis de códigoLos desarrolladores pueden usar Ghidra o Rizin para detectar funciones y generar pseudocódigo en C para diversas consolas.
- 3Recompilación de ROM a WebAssemblyUn usuario puede transformar una ROM clásica de NES o SNES al formato wasmcart para su ejecución en sistemas modernos.
- 4Creación y conversión de assetsEl servidor puede transformar imágenes PNG en tilemaps y paletas específicas para hardware retro.
Escrito a partir del README del proyecto. Cada caso de uso se verifica con una cita del mismo.
Cómo instalar romdev MCP
Formatos verificados el 10 nov 2026Instalar romdev MCP en Claude Code
$ claude mcp add romdev -- npx -y romdevtoolsInstalar romdev MCP en Cursor
~/.cursor/mcp.json
{
"mcpServers": {
"romdev": {
"command": "npx",
"args": [
"-y",
"romdevtools"
]
}
}
}Instalar romdev MCP en VS Code
.vscode/mcp.json
{
"servers": {
"romdev": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"romdevtools"
]
}
}
}Instalar romdev MCP en Claude Desktop
claude_desktop_config.json
{
"mcpServers": {
"romdev": {
"command": "npx",
"args": [
"-y",
"romdevtools"
]
}
}
}Instalar romdev MCP en Codex
~/.codex/config.toml
[mcp_servers.romdev] command = "npx" args = ["-y", "romdevtools"]
Instalar romdev MCP en Gemini CLI
~/.gemini/settings.json
{
"mcpServers": {
"romdev": {
"command": "npx",
"args": [
"-y",
"romdevtools"
]
}
}
}Verificaciones automáticas
Ejecutado 14 nov 2026Informe completo →Aún no verificado. Un servidor necesita una puntuación de 80, ningún hallazgo grave y suficientes datos para que podamos revisarlo. Cómo funcionan las verificaciones
- Repositorio de origen vinculado y accesiblemonteslu/romdev is public and reachablegithub.com/monteslu/romdev ↗Aprobado
- El paquete cita este repositorio como fuenteromdevtools names monteslu/romdev as sourcenpmjs.com/package/romdevtools ↗Aprobado
- Procedencia de la compilación (atestación Sigstore)No build attestation published for this releaseNo verificado
- Licencia de código abierto (OSI)No licenseHallazgo
- Commit o lanzamiento en el último añoLast commit or release 2026-11-11github.com/monteslu/romdev ↗Aprobado
- OpenSSF ScorecardNo verificado
- El nombre del paquete no es similar a un paquete popularNo popular package one edit away from romdevtoolsAprobado
- Sin avisos críticos en el paquete ni en sus dependenciasNo verificado
- Sin instrucciones ocultas para el modelo0 tool descriptions and the README read; no override phrases, credential paths or hidden charactersAprobado
- Las herramientas destructivas están etiquetadasNo verificado
- El endpoint remoto responde al handshake MCPNo verificado
README
Ver en GitHubromdev
romdev is a tool server that lets a coding agent (or you) build, run, debug, reverse-engineer and recompile retro console games. It covers 19 consoles and computers from the Atari 2600 to the Dreamcast, plus PICO-8 and two native WebAssembly game runtimes. Every compiler, emulator core and analysis engine ships as WebAssembly through npm, so there is nothing else to install.
npx romdevtools
That starts the server on http://127.0.0.1:7331. It works the same on Linux, Windows and macOS (Node 24 or newer). The output is a standard ROM (.nes, .gb, .md, .sfc, .gba, ...) that runs in other emulators, on flash carts and on real hardware.
What it does
romdev exposes 38 tools over MCP and plain HTTP. Each tool is a verb with an operation axis, such as memory({op:'search'}) or disasm({target:'cfg'}).
- Building. Per-platform toolchains (cc65, SDCC, RGBDS, asar, gcc and binutils for m68k/ARM/MIPS/SH, SGDK, PVSnesLib, libtonc and more) compiled to WebAssembly. Fork a working example game with
examples({op:'fork'}), thenbuild({output:'run'})builds, loads, runs and screenshots it in one call. Output ROMs get the checksums and headers real hardware needs. - Assets.
encodeArtturns PNGs into tiles, tilemaps and palettes;importArtreads Aseprite/LibreSprite, Tiled, GIF and TexturePacker files;sprites({op:'capture'})lifts a multi-sprite character from a running game;encodeAudioproduces SNES BRR, Genesis XGM2, GBA maxmod soundbanks, NES FamiTone2 data and note tables for the other sound chips. - Running and inspecting. libretro emulator cores as WebAssembly: step frames, take screenshots, drive input, read and write memory, inspect sprites, palettes, tilemaps, CPU and sound-chip state, save and restore states.
frame({op:'verify'})reports whether a game is rendering without needing to look at the picture. - Reverse engineering. Value search, write/read/execution breakpoints, single-stepping, coverage traces, byte-exact rebuildable disassembly (
disasm({target:'project'})andbuild({output:'reassemble'})), a bundled cheat database as a labeled RAM map, ROM patching with re-injection of compressed assets, custom-font text tools, and a romhacking playbook. - Analysis and decompilation. Rizin and Ghidra compiled to WebAssembly: function detection, control-flow graphs, cross-references, reachable-block sets and C pseudocode on 18 platforms, including the MIPS and SH-4 3D consoles.
breakpoint({on:'jumptable'})resolves computed-jump dispatchers by running the game. - Static recompilation.
disasm({target:'recompile', emit:'wasmcart'})recompiles a whole NES, SNES (including its coprocessor carts), Game Boy, Game Boy Color, GBA, Master System, Game Gear or Genesis ROM into a wasmcart.frame({op:'verifyRecompile'})checks the result against the reference emulator core frame by frame (pixels, memory, audio, must-fail controls);findDiverge,fuzzRecompileandtraceInstructionslocate differences down to the instruction. A Genesis ROM can also be built as a native cart for the sync32 console. - Matching decompilation.
decomp({op})drives a splat-based N64 or PlayStation decomp project: generate candidate C with m2c, compile it with the project's original compiler, compare per instruction, search with the permuter, and integrate with a full-ROM byte check. Everything runs as JavaScript and WebAssembly in process; no Python, make or host compiler. IDO, SGI's compiler, is proprietary and not distributed; build it once withpackages/romdevtools/scripts/build-ido.shfrom this repository or pointROMDEV_IDO_DIRat your own build. KMC gcc 2.7.2, EGCS 1.1.2, PS1 gcc 2.6.3 and mips-linux-gnu gcc 14 ship as WebAssembly. - Native runtimes. wasmcart (
.wasc, WebAssembly games written in any language, with GL and WebGPU rendering) and jsgame (JavaScript canvas and WebGL games) run through the same load, step, screenshot and input loop, with cart introspection throughwasm({op}). - Measuring.
frame({op:'timing'})reports per-frame wall, CPU and GPU time over a span of frames in one call (WebGPU timestamp queries, GL timer queries, the cart's own pass timers, A/B variants, and the contention and the GPU that did the work).frame({op:'flash'})checks a range of frames for photosensitive flashing with a strobe control that must fail;frame({op:'record'})captures the range to one file. - Active Bezels.
.abcompanion packages that read a game's memory every frame and draw a composite scene (maps, HUDs). romdev returns the composite and the raw core frame for the same frame so a bezel can be checked against the game. - A human in the loop.
playtest()opens an SDL window with gamepad support on the running game while the agent keeps working;host({op:'play'})shows a session on the/livestreampage.
your agent <--MCP / HTTP--> romdev server <-> WASM libretro core <-> your game
|
+-> WASM toolchains, Rizin/Ghidra, recompiler
The tools work just as well called by hand or from scripts.
Supported systems
Build is writing a new game; Hack is modifying an existing one. Ratings describe how much friction to expect with romdev's current examples and libraries, not the hardware in the abstract. A dash means there is no romhack tooling beyond code analysis for that system yet.
| System | Year | Languages (toolkit) | Build | Hack | Notes |
|---|---|---|---|---|---|
| Atari 2600 | 1977 | 6502 asm (dasm) | Hardest | Hard | No framebuffer, 128 bytes of RAM, every scanline cycle-counted. |
| Commodore 64 | 1982 | C / 6502 asm (cc65) | Easy | - | Forgiving hardware and decades of documentation. Boots on the MEGA65 Open ROMs. |
| MSX / MSX2 | 1983 | C / Z80 asm (SDCC) | Easy | - | Z80 with the TMS9918/V9938 VDP family. Runs on the open C-BIOS. |
| NES / Famicom | 1983 | C / 6502 asm (cc65) | Hard | Medium | The PPU is unforgiving (OAM/NMI timing, CHR-RAM). Many games store data plainly; the disassembler is mapper-aware. |
| Master System | 1985 | C / Z80 asm (SDCC) | Easy | Medium | Simple Z80 and VDP; near twin of the Game Gear. |
| Atari 7800 | 1986 | C / 6502 asm (cc65) | Hard | Hard | MARIA display-list graphics with sparse documentation. |
| PC Engine / TurboGrafx-16 | 1987 | C / HuC6280 asm (cc65) | Medium | - | romdev ships a direct-register helper library; HuCards need no BIOS. |
| Genesis / Mega Drive | 1988 | C (SGDK) / 68000 asm (Motorola syntax, GNU as) | Medium | Easy | Flat 68000 addressing and no bank switching make it the easiest to hack. |
| Game Boy | 1989 | C / SM83 asm (SDCC, RGBDS) | Easy | Easy | The recommended starting point. |
| Atari Lynx | 1989 | C / 6502 asm (cc65) | Medium | - | Suzy/Mikey sprite engine with few references. |
| Game Gear | 1990 | C / Z80 asm (SDCC) | Easy | Medium | Master System VDP with a smaller window and 12-bit colour. |
| Super Nintendo | 1990 | C (PVSnesLib) / 65816 asm (asar) | Medium | Medium | PVSnesLib has "renders nothing" traps; the mental model lists them. |
| Game Boy Color | 1998 | C / SM83 asm (SDCC, RGBDS) | Easy | Easy | The Game Boy toolchain plus CGB colour. |
| Game Boy Advance | 2001 | C (libtonc, libgba) | Medium | - | 32-bit ARM with a large hardware surface. |
| GameTank | 2024 | C / 6502 asm (cc65) | Medium | - | An open-hardware W65C02S console: a 128x128 framebuffer drawn by a blitter, and a second 65C02 for audio. |
| sync32 | 2026 | C (arm-none-eabi, Cortex-M33) | Easy | - | An open RP2350-based console: a flat framebuffer and a function-pointer ABI, no PPU, tilemap or banking. |
| Nintendo 64 | 1996 | C (mips-elf-gcc, libdragon) | Hard | - | Rendered on the GPU through parallel-n64's glide64. |
| PlayStation | 1994 | C (mips-elf-gcc, PSn00bSDK) | Hard | - | Rendered on the GPU through Beetle PSX HW; boots OpenBIOS, no Sony firmware. |
| Dreamcast | 1998 | C (sh-elf-gcc) | Hard | - | Rendered on the GPU through Flycast with its reios HLE BIOS; bare-metal C. |
| PICO-8 | 2015 | Lua (FAKE-08) | Easiest | Easy | Carts are Lua source, so building is packaging and hacking is editing. |
| wasmcart | 2026 | Any language that targets WebAssembly | Easy | - | You bring the compiler; romdev runs, inspects and packs the cart. Carts need wasmcart ABI v4. |
| jsgame | 2024 | JavaScript (canvas, WebGL2) | Easy | - | JavaScript games run like carts, with V8 introspection. |
The Rizin/Ghidra analysis engine works on all 19 systems except sync32, whatever the Hack rating; the rating is about editing data, not analysing code. Decompiler output is most readable on ARM (GBA) and 68000 (Genesis), good on Z80 and the MIPS/SH-4 consoles, and rough on the 6502 family. Byte-exact rebuildable disassembly covers the 15 classic 2D systems.
To ship something quickly, start with Game Boy, Game Boy Color, Master System, Game Gear, C64 or PICO-8. To modify an existing game, Genesis and Game Boy are the gentlest.
Examples, sound and docs per platform
Every classic platform ships starter projects, a sound API, a music demo on that platform's usual engine, and five genre examples (shmup, platformer, puzzle, sports, racing); the Atari 2600 has four (no puzzle). GameTank, sync32, PICO-8, N64, PlayStation and Dreamcast ship genre examples too. Fork one with examples({op:'fork', example:'nes/platformer', name, path}). The platformer side-scrolls with a hardware camera on every platform except NES and the Atari 2600. Each platform has a mental model and troubleshooting guide readable in session with platform({op:'doc', platform, name}).
| Platform | Core | Compiler / SDK | Music engine |
|---|---|---|---|
| NES | fceumm | cc65 | FamiTone2 |
| Game Boy / Color | gambatte | SDCC, RGBDS | hUGEDriver |
| SNES | snes9x (bsnes as an alternate) | PVSnesLib, asar | SPC700 driver |
| Genesis | genesis_plus_gx | SGDK (m68k gcc), 68000 asm (m68k GNU as) | XGM2 |
| Master System / Game Gear | genesis_plus_gx | SDCC | PSG tracker |
| C64 | VICE x64 | cc65 | SID sequencer |
| GBA | mGBA | libtonc, libgba (arm gcc) | maxmod |
| Atari Lynx | handy | cc65 | Lynx audio |
| Atari 2600 | stella2014 | dasm | 2-voice TIA |
| Atari 7800 | prosystem | cc65 | 2-voice TIA tracker |
| PC Engine | geargrafx | cc65 | HuC6280 PSG |
| MSX / MSX2 | blueMSX | SDCC | AY-3-8910 PSG |
| GameTank | GameTank core | cc65 | ACP audio coprocessor |
| sync32 | s32core | arm-none-eabi gcc | game-side software synth |
| Nintendo 64 | parallel-n64 (glide64, GPU) | mips gcc | - |
| PlayStation | Beetle PSX HW (GPU) | mips gcc, PSn00bSDK | - |
| Dreamcast | Flycast (GPU) | sh gcc | - |
| PICO-8 | FAKE-08 | Lua | built in |
| wasmcart | wasmcart host (no emulator) | your own | 48 kHz PCM ring |
| jsgame | rungame (no emulator) | your own | WebAudio |
The 3D consoles render on the GPU through native-gles (headless OpenGL ES, no browser).
Packages
The package you install is romdevtools. It depends on romdev-* packages that carry the WebAssembly binaries, so each one can be versioned and reused separately. A platform's binaries load the first time you use that platform.
| Package group | Packages |
|---|---|
| Server | romdevtools: the tool server (MCP, HTTP, Agent Skill), examples, libraries, docs. Bins: romdevtools, romdevtools-cli, romdev-mcp (alias). |
| Emulator cores (15) | romdev-core-fceumm, -gambatte, -gpgx, -vice, -handy, -prosystem, -geargrafx, -bluemsx, -gametank, -bsnes, -fake08, -s32core, -parallel-n64, -beetle-psx-hw, -flycast |
| Core runtime (2) | romdev-core-host (the libretro host, usable without the server) and romdev-core-runner (an SDL window over it) |
| Platform bundles (4) | romdev-platform-snes, -gba, -atari2600, -sync32: a core and compiler used by no other platform |
| Toolchains (7) | romdev-toolchain-cc65, -sdcc, -rgbds, -m68k-gcc, -mips-gcc (also armips and mips-linux-gnu binutils), -sh-gcc, -decomp-gcc (KMC, EGCS and PS1 gcc for decomp projects) |
| Analysis (2) | romdev-analysis (Rizin), romdev-analysis-decompiler (Ghidra decompiler and SLEIGH specs) |
| Decomp tools (6) | romdev-splat, romdev-spimdisasm, romdev-rabbitizer, romdev-m2c, romdev-permuter, romdev-pycparser: JavaScript and WebAssembly ports of the community decomp tools |
| Audio (4) | romdev-famitone, romdev-maxmod, romdev-xgm2, romdev-audio-resampler |
| Data (1) | romdev_game_codes: the cheat database used as a labeled RAM and code map, loaded one platform at a time |
romdev-toolchain-ido is private and never published; see "Matching decompilation" above.
The WebAssembly binaries are build outputs shipped through npm; this repository holds the sources, build scripts, patches and version pins. packages/romdevtools/scripts/BUILD_MAP.md maps each binary to the script that builds it.
Connect
npx romdevtools # MCP on http://127.0.0.1:7331/mcp
The first run downloads the packages; later runs start from the npm cache. PORT and HOST change the bind address; ROMDEV_GPU=<PCI address> keeps all GPU work on one GPU on a machine with two. Each session's emulator runs in its own process (ROMDEV_HOST_WORKERS=0 turns that off). http://127.0.0.1:7331/livestream shows tool calls and running sessions live for a human watching.
Claude Code
claude mcp add --transport http romdev http://127.0.0.1:7331/mcp
opencode
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"romdev": {
"type": "remote",
"url": "http://127.0.0.1:7331/mcp",
"enabled": true
}
}
}
Codex CLI
codex mcp add romdev --url http://127.0.0.1:7331/mcp
or in ~/.codex/config.toml:
[mcp_servers.romdev]
url = "http://127.0.0.1:7331/mcp"
Other MCP clients and plain HTTP
Any streamable-HTTP MCP client can use http://127.0.0.1:7331/mcp. Both the session-based protocol (an initialize handshake and Mcp-Session-Id) and the stateless 2026-07-28 revision are served on that endpoint; on the stateless revision, pass one stable session argument on every call so your calls reach the same emulator.
Without MCP, every tool is an HTTP route: POST /tool/{name} with a JSON body and an x-romdev-session header. GET /openapi.json describes them, GET /documentation is a browsable console, and GET /skills/romdev/SKILL.md is an Agent Skill generated from the running server.
Then describe what you want:
> Make me a tiny NES game where a sprite moves around the screen.
[agent: examples({op:"fork", example:"nes/platformer", name:"mygame", path:"/path/to/mygame"})]
[agent: build({output:"run", platform:"nes", path:"/path/to/mygame"}) -> builds, loads, runs, screenshots]
[agent looks at the result and iterates]
romdevtools-cli play game.gba also works as a plain emulator: an SDL window with hot-plugged controllers and live fps in the title bar.
Development
An npm-workspaces monorepo (Node 24 or newer):
git clone https://github.com/monteslu/romdev.git
cd romdev
npm install
npm test
The WebAssembly binaries are built from pinned upstream sources in a reproducible Emscripten container; see BUILD_MAP.md. You only rebuild them when bumping an upstream or adding a platform. docs/decomp-throughput.md describes the measured decompilation workflow, bounded permuter search and Z80 IR export.
License
romdev's own code is MIT (LICENSE). The third-party components it bundles keep their own licences, listed in NOTICE.
Games you build with romdev are yours, including to sell; the bundled runtime libraries they link are permissively licensed (see NOTICE).
Recompiled carts are different: a cart made by the static recompiler contains code ported from the reference emulator (GPL, MPL or non-commercial terms depending on the platform) as well as the original game's code. Each recompiled cart carries a licence entry naming those components, and NOTICE explains the terms.
Preguntas sobre romdev MCP
¿Cómo agrego romdev MCP a Claude Code?
Ejecuta claude mcp add romdev -- npx -y romdevtools en tu terminal. Añade --scope user para que esté disponible en todos los proyectos.
¿Cómo agrego romdev MCP a Cursor?
Abre ~/.cursor/mcp.json y añade el servidor en mcpServers, usando la configuración de Cursor que se muestra en la sección de instalación de arriba.
¿Qué plataformas son compatibles con romdev?
Cubre 19 consolas y ordenadores que van desde el Atari 2600 hasta la Dreamcast, además de PICO-8 y entornos de ejecución WebAssembly.
¿Necesito instalar compiladores o emuladores externos?
No, cada compilador, núcleo de emulador y motor de análisis se distribuye como WebAssembly a través de npm, por lo que no es necesario instalar nada más.
¿Puedo ver el juego ejecutándose mientras el agente trabaja?
Sí, puedes usar la herramienta playtest() para abrir una ventana SDL con soporte para gamepad o usar la herramienta host() para transmitir la sesión en vivo.