SNES模拟器

通过模型上下文协议(MCP)为大型语言模型提供的SNES模拟器,支持加载ROM、按键操作、帧推进和屏幕查看,适用于AI驱动的游戏体验。

  • by thomasjvu
  • JavaScript
  • 本地部署
  • 5 星标
  • 更新于
在 GitHub 查看 thomasjvu/mcp-snes

使用说明

MCP:SNES

通过模型上下文协议(MCP)为LLM提供SNES仿真器。

通过MCP兼容界面玩SNES游戏——加载ROM、按下按钮、前进帧并查看屏幕。包括一个带有怀旧CRT电视+SNES控制台设计的浏览器UI和一个完整的MCP工具API,用于LLM驱动的游戏。

演示

snes-mcp.webm

特性

  • 内置SnesJs内核的SNES仿真(无外部仿真器依赖性)
  • 带stdio和SSE传输的MCP服务器
  • 带有CRT电视、SNES控制台和狗骨控制器布局的浏览器UI
  • 客户端60fps渲染,带Web Audio立体声
  • 速度控制(1x/2x/4x/8x)
  • ROM上传和管理(.smc/.sfc)
  • 完全控制器支持(D-pad、A、B、X、Y、L、R、启动、选择)
  • 键盘输入(箭头键、Z/X/A/S/Q/W、Enter、Shift)
  • 自动LoROM/HiROM检测

设置

npm install
npm run build

使用AI编码助手

克劳德代码

使用mcp-snes最简单的方法是使用Claude Code。从项目目录中:

cd mcp-snes
claude

该项目包括 .mcp.json 当Claude Code从此目录启动时,该配置会自动注册MCP服务器。克劳德将能够加载ROM,按下按钮,并看到屏幕。

web UI可在 http://localhost:3002 而MCP服务器正在运行。

注: MCP服务器仅在从项目目录启动Claude Code时激活。要改为全局安装,请运行:

claude mcp add --scope user mcp-snes -- node /path/to/mcp-snes/dist/index.js --stdio

开源代码

要将mcp-snes与OpenCode结合使用,请导航到项目目录并启动OpenCode:

cd mcp-snes
opencode

该项目包括 opencode.json 当OpenCode从此目录启动时,该配置会自动注册MCP服务器。OpenCode将能够加载ROM,按下按钮并看到屏幕。

web UI可在 http://localhost:3003 而MCP服务器正在运行。

注: MCP服务器仅在从项目目录启动OpenCode时激活。要改为全局安装,请将以下内容添加到您的OpenCode用户配置中(~/.config/opencode/opencode.json):

{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "mcp-snes": {
      "type": "local",
      "command": ["node", "/absolute/path/to/mcp-snes/dist/index.js", "--stdio"],
      "enabled": true,
      "environment": {
        "SERVER_PORT": "3003",
        "NO_BROWSER": "1"
      }
    }
  }
}

独立使用

标准模式(默认)

ROM_PATH=./roms/game.smc npm start

SSE模式

ROM_PATH=./roms/game.smc npm run start-sse

发展

npm run dev

MCP检查员

npm run debug

环境变量

变量 描述 默认值
SERVER_PORT Web服务器端口 3001
ROM_PATH 启动时自动加载ROM的路径 --
NO_BROWSER 禁用自动打开浏览器(对MCP模式有用) --

MCP工具

工具 说明
load_rom 加载SNES ROM文件(.smc/.sfc)
get_screen 获取当前屏幕为PNG图像
press_up/down/left/right 按D-pad方向
press_a/b/x/y 按下面部按钮
press_l/r 按下肩部按钮
press_start/select 按开始或选择
wait_frames 通过N帧进行高级仿真
save_state 将仿真器状态保存到插槽(0-9)
load_state 从插槽加载模拟器状态(0-9)
is_rom_loaded 检查ROM是否已加载
list_roms 列出ROMs/目录中的可用ROM

键盘映射

按键 按钮
箭头键 D-pad
Z B
X A
A Y
S X
Q L
W R
输入 开始
Shift 选择

项目结构

src/
  index.ts            # Entry point
  types.ts            # SNESButton enum, interfaces
  snes.ts             # SNES emulator wrapper
  emulatorService.ts  # Service layer
  tools.ts            # MCP tool registration
  ui.ts               # Web UI and API routes
  snes-core/          # SNES emulation core (SnesJs)
  server/
    server.ts         # MCP server factory
    stdio.ts          # Stdio transport
    sse.ts            # SSE transport
  utils/
    logger.ts         # File logger

致谢

  • SNES仿真核心的灵感来自 SnesJs 作者:angelo wf(麻省理工学院许可证)
  • MCP架构的灵感来自 mcp游戏男孩 马里奥·安德烈沙克

许可证

麻省理工学院