NES模拟器

通过模型上下文协议(MCP)为大型语言模型提供的NES模拟器,支持加载ROM、按键操作和帧推进,包含浏览器UI和完整的MCP工具API。

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

使用说明

MCP:NES

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

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

特性

  • 具有内置内核的NES仿真(不依赖于外部仿真器)
  • 带stdio和SSE传输的MCP服务器
  • 带有CRT电视、NES控制台和控制器布局的浏览器UI
  • 客户端60fps渲染,带Web音频声音
  • 速度控制(1x/2x/4x/8x)
  • ROM上传和管理
  • 完全控制器支持(D-pad、A、B、启动、选择)
  • 键盘输入(箭头键、Z、X、Enter、Shift)

设置

npm install
npm run build

用法

标准模式(默认)

ROM_PATH=./roms/game.nes npm start

SSE模式

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

发展

npm run dev

MCP检查员

npm run debug

web UI可在 http://localhost:3001.

环境变量

变量 描述 默认值
SERVER_PORT Web服务器端口 3001
ROM_PATH 启动时自动加载ROM的路径 --

MCP工具

工具 说明
load_rom 加载ROM文件
get_screen 获取当前屏幕为PNG图像
press_up/down/left/right 按D-pad方向
press_a/b 按下A或B按钮
press_start/select 按开始或选择
wait_frames 通过N帧进行高级仿真
is_rom_loaded 检查ROM是否已加载
list_roms 列出ROMs/目录中的可用ROM

项目结构

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

致谢

  • NES仿真核心 JSNES 作者:Ben Firshman(Apache-2.0许可证)
  • MCP架构的灵感来自 mcp游戏男孩 马里奥·安德烈沙克

许可证

麻省理工学院