mcp-ppsspp
以下摘录自该仓库的 README(片段) · 在 GitHub 读完整 README →
An MCP server that exposes PPSSPP — the PlayStation Portable emulator — to any MCP-compatible client (Claude Desktop, Claude Code, etc.) via PPSSPP's built-in WebSocket debugger interface.
Read and write PSP memory, drive games with button input, capture screenshots, set CPU breakpoints, inspect MIPS Allegrex registers — all through a clean tool interface. No bridge plugin needed; PPSSPP's debugger is built into the emulator.
How it works
Unlike the mcp-bizhawk / mcp-mgba bridges (which need a Lua plugin loaded into the emulator), PPSSPP ships with its own debugger WebSocket interface — we just speak JSON to it. **No plugin to install.**
The connection uses subprotocol debugger.ppsspp.org on PPSSPP's debugger port.
Requirements
- PPSSPP (recent version with WebSocket debugger — 1.7+)
- **Node.js 22+**
- "Allow remote debugger" enabled in PPSSPP
Install
Or npx -y mcp-ppsspp.
Set up PPSSPP's debugger
1. Launch PPSSPP, load any PSP ISO/EBOOT
2. **Settings → Tools → Developer Tools → Allow remote debugger** (check the box)
3. PPSSPP will show the active host:port (e.g. ws://192.168.1.10:12345/debugger)
4. Note the port number — you'll set it as an environment variable for the MCP server
Register with your MCP client
Claude Code (CLI)
Replace 12345 with your actual port. Verify:
Claude Desktop
Edit claude_desktop_config.json:
Restart Claude Desktop after editing.
Configuration
| Env var | Default | Purpose |
|----------------|---------------|--------------------------------------------------|
| PPSSPP_HOST | 127.0.0.1 | WebSocket host to dial |
| PPSSPP_PORT | (required) | WebSocket port — see PPSSPP's debugger settings |
Tools
| Tool | Description |
|------|-------------|
| ppsspp_ping | Verify connectivity (returns version) |
| ppsspp_get_info | Title, disc ID, version, run state |
| ppsspp_read8 / ppsspp_read16 / ppsspp_read32 | Read u8 / u16-LE / u32-LE from PSP memory |
| ppsspp_write8 / ppsspp_write16 / ppsspp_write32 | Write to PSP memory |
| ppsspp_read_range | Read up to 64 KiB as a byte array |
| ppsspp_write_range | Write byte array to memory |
| ppsspp_read_string | Read null-terminated UTF-8 string |
| ppsspp_press_buttons | Set persistent PSP button state |
| ppsspp_press_button | Press a button for N frames + auto-release |
| ppsspp_send_analog | Set analog stick position |
| ppsspp_pause / ppsspp_resume | Pause / resume emulation |
| ppsspp_step | Step one MIPS instruction |
| ppsspp_reset | Soft-reset the loaded game |
| ppsspp_screenshot | Capture framebuffer as inline PNG |
| ppsspp_get_registers | Read all MIPS Allegrex registers |
| ppsspp_breakpoint_add / _remove / _list | CPU execution breakpoints |
PSP memory map (cheat sheet)
| Range | Region |
|--------------------------|---------------------------------|
| 0x00010000 - 0x00013FFF | Scratchpad (fast 16 KiB SRAM) |
| 0x04000000 - 0x041FFFFF | VRAM (2 MiB GE video memory) |
| 0x08000000 - 0x087FFFFF | Kernel RAM (8 MiB, low half) |
| 0x08800000 - 0x09FFFFFF | User RAM (24 MiB, where most game state lives) |
| 0xBC000000+ | Hardware registers |