MCP:SNES
通过模型上下文协议(MCP)为LLM提供SNES仿真器。
通过MCP兼容界面玩SNES游戏——加载ROM、按下按钮、前进帧并查看屏幕。包括一个带有怀旧CRT电视+SNES控制台设计的浏览器UI和一个完整的MCP工具API,用于LLM驱动的游戏。
演示
特性
- 内置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时激活。要改为全局安装,请运行: ``bash 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): ``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 startSSE模式
ROM_PATH=./roms/game.smc npm run start-sse发展
npm run devMCP检查员
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致谢
许可证
麻省理工学院
