Repository navigation
v0.1.0 — initial public release
First public release. MCP server bridging PPSSPP — the PlayStation Portable emulator — to any MCP-compatible client via PPSSPP's built-in WebSocket debugger interface.
No Lua plugin needed. Unlike the mcp-bizhawk / mcp-mgba bridges, PPSSPP exposes a native WebSocket debugger that this server just speaks to directly. The simplest of the family to install and use.
What's in 0.1.0
- 20 MCP tools covering memory r/w (u8/u16/u32/range/string), input (buttons + analog), emulator control (pause/resume/step/reset/screenshot), CPU debugger (get_registers), CPU execution breakpoints (add/remove/list).
- Inline PNG screenshots —
ppsspp_screenshotreturns the framebuffer base64-encoded as an MCP image content block, viewable directly in the client. - TDQS-templated tool descriptions — every tool documents purpose, when-to-use vs siblings, side effects + errors, exact return shape, with PSP-specific context (memory map, MIPS-LE, button names) inline.
- Cross-platform install paths —
npm install -g mcp-ppsspp,npx -y mcp-ppsspp, or clone-and-build. - GitHub Actions CI on Node 18/20/22 across Linux/macOS/Windows.
- Dockerfile + glama.json for Glama MCP registry.
Setup
- Install PPSSPP (1.7+) from ppsspp.org/download
- Launch PPSSPP, load any PSP ISO/EBOOT
- Settings → Tools → Developer Tools → Allow remote debugger
- PPSSPP will show the active host:port — note the port number
npm install -g mcp-ppsspp- Register with your MCP client, setting
PPSSPP_PORTenv var to the port from step 4
See README.md for full setup, full tool reference, PSP memory map, and troubleshooting.
Why this matters
PSP was the major retro platform NONE of the existing dmang-dev mcp-* servers covered. With this release, the family covers:
| Platform(s) | Server |
|---|---|
| GBA | mcp-mgba |
| PCSX2 / PINE protocol emulators | mcp-pine |
| Any libretro core via RetroArch | mcp-retroarch |
| NES/SNES/GB/GBC/GBA/Genesis/N64/PSX/Saturn/Atari/... | mcp-bizhawk |
| PSP | mcp-ppsspp |
Known limitations
- No savestate API exposed by PPSSPP's WebSocket — savestate save/load isn't in the debugger interface. Use PPSSPP's keybinds (F1-F8 for slots) via the UI for now.
- Frame-advance is instruction-level only (
cpu.stepIntosteps one MIPS instruction, not one rendered frame). For frame stepping, set a breakpoint at the vblank handler and resume.