SuperAPI AI Directory

mcp-ppsspp

Control PSP games via PPSSPP's built-in WebSocket debugger: memory read/write, input, pause and step, screenshots, CPU registers and breakpoints.

Open website

About this tool

mcp-ppsspp is an MCP server for connecting PPSSPP (a PlayStation Portable emulator) to any MCP-compatible client (such as Claude Desktop, Claude Code, etc.). It works through PPSSPP's built-in WebSocket debugger interface, so unlike mcp-bizhawk / mcp-mgba, it does not require loading a Lua bridge plugin in the emulator—PPSSPP comes with a debugger WebSocket interface, and the server communicates with it directly via JSON.

Purpose

This server is intended for scenarios that require controlling or debugging PSP games through an MCP client. It wraps PPSSPP's debugging capabilities into a clean tool interface, allowing MCP clients to read and write PSP memory, drive games with button input, capture screenshots, set CPU breakpoints, inspect MIPS Allegrex registers, and more.

Main capabilities

  • Read and write PSP memory
  • Drive games with button input
  • Capture screenshots
  • Set CPU breakpoints
  • Inspect MIPS Allegrex registers

Connection method

The connection uses the subprotocol debugger.ppsspp.org, through PPSSPP's debug port.

Usage

Prerequisites:

  • PPSSPP (a newer version with the WebSocket debugger, 1.7+)
  • Enable "Allow remote debugger" in PPSSPP

Set up the PPSSPP debugger:

  1. Launch PPSSPP and load any PSP ISO/EBOOT
  2. Go to Settings → Tools → Developer Tools → Allow remote debugger (check the box)
  3. PPSSPP will display the active host:port (for example ws://192.168.1.10:12345/debugger)
  4. Note the port number—you will set it later as an environment variable for the MCP server

Register with an MCP client:

  • Claude Code (CLI): replace 12345 with the actual port
  • Claude Desktop: edit claude_desktop_config.json, then restart Claude Desktop after editing

It can also be run via npx -y mcp-ppsspp.

PSP memory map (quick reference)

PSP is little-endian (MIPS Allegrex). The kernel-mode mirror 0x88xxxxxx maps to the same physical RAM as 0x08xxxxxx.

Button names

cross, circle, triangle, square, up, down, left, right, start, select, ltrigger, rtrigger, home.

Use cases

Suitable for development, debugging, or automation scenarios that require memory read/write, input control, screenshots, breakpoint debugging, and register inspection for PSP games in PPSSPP through an MCP client.

Limitations and notes

  • No savestate API: PPSSPP's WebSocket debugger does not expose savestate.save / load. Currently, you can use PPSSPP's key bindings (F1-F8 correspond to save slots) through UI operations. In theory, it may be possible to trigger key bindings via input.buttons.press as a workaround, but this is not natively supported.
  • Frame advancement is instruction-level only (cpu.stepInto). To advance a whole frame, you can set a breakpoint at the vblank handler and resume.
  • The analog stick is shared state: ppsspp_send_analog updates a persistent stick position and does not release automatically.
  • mcp-ppsspp has no default port—you need to read the active port from PPSSPP's Developer Tools → Allow remote debugger dialog and pass it in as PPSSPP_PORT.
  • tools/list works even when PPSSPP is not connected; however, calling tools requires PPSSPP to be running with the remote debugger enabled.

Debugging with MCP Inspector

You can interactively browse and call this server's tools through MCP Inspector. If you have edited src/ since the last npm install, build first (npm run build, or keep npm run dev running).