SuperAPI AI 工具集

mcp-bizhawk

mcp-bizhawk 是一个面向 BizHawk 多系统模拟器的 MCP 服务器,让 Claude Desktop、Claude Code 等兼容 MCP 的客户端能够通过统一的 Lua 桥接操控模拟器。资料显示其可对 NES、SNES、Game Boy/GBC/GBA、Sega Master System/Genesis/32X/Saturn、N64、PlayStation 1、Atari 2600/5200/7800、Lynx、ColecoVision、Intellivision 等系统进行内存读写、手柄输入、逐帧推进、截图和即时存档等操作,并按系统清晰暴露内存域。与多数模拟器 MCP 桥接不同,由于 BizHawk 的 Lua 没有原生服务端套接字,仅提供外向的 comm.socketServer* 客户端,因此由 mcp-bizhawk 运行 TCP 监听器,Lua 桥接每帧拨入一次以传递命令与应答。需要 BizHawk 2.6.2 或更新版本以及 Node.js 22+,已在 BizHawk 2.11.1 的 SNES《超级银河战士》上测试。该设计每次调用约增加一帧延迟(60Hz 下约 16ms),适合交互式内存搜索、即时存档实验和逐帧检查,不太适合高频率脚本。

访问官网

工具介绍

mcp-bizhawk 是一个 MCP 服务器,将 TAS 社区常用的多系统模拟器 BizHawk 暴露给任何兼容 MCP 的客户端(如 Claude Desktop、Claude Code 等)。它通过单一 Lua 桥接,支持多种游戏系统,并用同一套 MCP 工具进行操作,同时按系统清晰暴露内存域。

支持的系统

资料列出:NES、SNES、Game Boy / GBC / GBA、Sega Master System / Genesis / 32X / Saturn、N64、PlayStation 1、Atari 2600/5200/7800、Lynx、ColecoVision、Intellivision 等。官方称“Should work on any system BizHawk supports”。

主要能力

  • 内存读写:所有内存读写工具接受可选的 domain 参数;省略时使用当前活动的内存域。可用 bizhawk_list_memory_domains 发现已加载核心可用的内存域名。
  • 手柄输入:bizhawk_press_buttons 接受类似 {"A": true} 的按键表,按钮名取决于核心;也可用 bizhawk_play_input_sequence 批量输入。
  • 逐帧推进、截图和即时存档:仓库描述中列出这些能力。
  • 跨系统回归测试:文档提及相关示例。

使用方式

环境要求:BizHawk 2.6.2 或更新(更早版本使用旧的套接字服务端线路格式);Node.js 22+。已在 BizHawk 2.11.1 上针对 SNES(Super Metroid)测试。

安装方式有三种:

  • 选项 A — 从 npm 安装(推荐)
  • 选项 B — npx(免安装)
  • 选项 C — 克隆并开发

配置分为两部分:告诉 BizHawk 连接到哪里,以及加载桥接脚本。

  1. 让 BizHawk 指向 MCP 服务器:最简单的方式是带 socket 标志启动 BizHawk(若覆盖 BIZHAWK_PORT 则调整端口);也可在 BizHawk UI 中通过 Settings → Customize → External Tools 持久配置。
  2. 加载桥接脚本:在 BizHawk 中打开 Tools → Lua Console → Open Script,选择本仓库的 lua/bridge.lua。加载后 Lua Console 会出现提示,mcp-bizhawk 进程的 stderr 也会有输出。
  3. 注册到 MCP 客户端:Claude Code(CLI)或编辑 claude_desktop_config.json,编辑后重启 Claude Desktop;其他 MCP 客户端可运行 mcp-bizhawk 并连接其 stdio,因为服务器通过 stdio 使用标准 MCP。

架构与权衡

与其他模拟器 MCP 桥接相比,传输方向是反的:BizHawk 的 Lua 没有原生服务端套接字,只有外向的 comm.socketServer* 客户端。因此 mcp-bizhawk 运行 TCP 监听器,BizHawk 的 Lua 桥接每帧拨入一次来传递命令与应答。组件包括:

  • lua/bridge.lua — 在 BizHawk 的 Lua Console 中运行,每帧轮询 TCP 服务器
  • dist/index.js — Node.js MCP 服务器,默认监听 127.0.0.1:8766,通过 stdio 暴露工具

权衡:该设计每次调用增加约一帧延迟(60Hz 下约 16ms)。适合交互式内存搜索、即时存档实验和逐帧检查,不太适合高频率脚本。

适用场景

  • 交互式内存搜索(RAM hunting)
  • 即时存档实验与恢复
  • 逐帧精确输入与检查
  • 跨系统回归测试

官方示例:Claude(智能体)操控 Samus 通过 Ceres Station 开头,所有输入经由 bizhawk_play_input_sequence 批量发送,所有移动通过读取经实时 RAM 搜索找到的 WRAM 地址来验证;录制为 2 倍速,实际回放以原生 60fps 模拟运行。相关流程见 docs/RECIPES.md 和 docs/SUPER-METROID-ADDRESSES.md。

内存域速查(按系统)

域名直接来自 BizHawk 核心实现。可用 bizhawk_list_memory_domains 查看已加载 ROM 的确切集合。

按钮速查(按系统)

bizhawk_press_buttons 接受 {ButtonName=true, ...} 表,按钮名取决于核心。不确定时可运行探测:bizhawk_press_buttons {"A": true},并观察 BizHawk 中活动核心的输入显示。

故障排查与调试

  • 设置 DEBUG=1 可转储每一行 RX/TX。
  • 端到端冒烟测试:启动 BizHawk、加载 ROM 与桥接,运行 ping/get_info/list_memory_domains/read_range。
  • 使用 MCP Inspector 可交互式浏览并调用该服务器的工具;若上次 npm install 后编辑过 src/,需先构建(npm run build,或保持 npm run dev 运行)。
  • 可用 BIZHAWK_HOST / BIZHAWK_PORT 覆盖监听地址(默认 127.0.0.1:8766)。
  • tools/list 在未连接 BizHawk 时也可用;调用工具则需要 EmuHawk 带 socket 标志运行且已加载 lua/bridge.lua。

限制

  • 每次调用约增加一帧延迟,不适合高频率脚本。
  • 需要 BizHawk 2.6.2 或更新版本与 Node.js 22+;更早的 BizHawk 版本使用旧的套接字服务端线路格式。
  • 调用工具前必须运行 EmuHawk 并加载桥接脚本。
  • 具体安装命令、配置代码、内存域与按钮完整清单、CHANGELOG 等细节请参见仓库文件。

价格、收费方式等资料暂未提供。