
MCP server for BizHawk — drive NES/SNES/GB/GBC/GBA/Genesis/N64/PSX/Saturn and more through one Lua bridge
概览
An MCP server that exposes BizHawk — the multi-system emulator the TAS community lives in — to any MCP-compatible client (Claude Desktop, Claude Code, etc.). One bridge, : NES, SNES, Game Boy / GBC / GBA, Sega Master System / Genesis / 32X / Saturn, N64, PlayStation 1, Atari 2600/5200/7800, Lynx, ColecoVision, Intellivision, and more — all through the same MCP tools, with per-system memory domains exposed cleanly. Claude (the agent) drives Samus through the opening of Ceres Station — all input batched through bizhawk_play_input_sequence , all motion verified by reading WRAM addresses found via live RAM-hunt. Recording is 2× speed; the actual playback runs at native 60fps emulation. See docs/RECIPES.md and docs/SUPER-METROID-ADDRESSES.md for the workflow. The transport is compared to most other emulator-MCP bridges: BizHawk's Lua doesn't have native server sockets, only an outbound comm.socketServer* client.
README
以下为原文 README 节选,完整内容请查看原文。
mcp-bizhawk
An MCP server that exposes BizHawk — the multi-system emulator the TAS community lives in — to any MCP-compatible client (Claude Desktop, Claude Code, etc.).
One bridge, many systems: NES, SNES, Game Boy / GBC / GBA, Sega Master System / Genesis / 32X / Saturn, N64, PlayStation 1, Atari 2600/5200/7800, Lynx, ColecoVision, Intellivision, and more — all through the same MCP tools, with per-system memory domains exposed cleanly.
Claude (the agent) drives Samus through the opening of Ceres Station — all input batched through bizhawk_play_input_sequence, all motion verified by reading WRAM addresses found via live RAM-hunt. Recording is 2× speed; the actual playback runs at native 60fps emulation. See docs/RECIPES.md and docs/SUPER-METROID-ADDRESSES.md for the workflow.
How it works
+------------------+ stdio +------------------+ TCP :8766 +------------------+
| MCP client | JSON-RPC | mcp-bizhawk | newline JSON | BizHawk |
| (Claude / etc.) | ===========> | (Node.js) | <============ | bridge.lua |
+------------------+ +------------------+ +------------------+
The transport is inverted compared to most other emulator-MCP bridges: BizHawk’s Lua doesn’t have native server sockets, only an outbound comm.socketServer* client. So mcp-bizhawk runs the TCP listener, and BizHawk’s Lua bridge dials in once per frame to ferry commands and replies.
Two pieces:
lua/bridge.lua— runs inside BizHawk’s Lua Console, polls our TCP server once per framedist/index.js— the Node.js MCP server, listens on127.0.0.1:8766by default, exposes tools over stdio
安装
npx -y mcp-bizhawk配置
{
"mcpServers": {
"bizhawk": {
"command": "mcp-bizhawk"
}
}
}