dmang-dev/mcp-ppsspp

๐ŸŽฎ Gaming๐ŸŸข Verified Active
0 Views
0 Installs

๐Ÿ“‡ ๐Ÿ  ๐ŸŽ ๐ŸชŸ ๐Ÿง - Drive PSP games through PPSSPP's built-in WebSocket debugger interface โ€” no plugin needed. Memory r/w (u8/u16/u32/range/string), input (buttons + analog), pause/resume/step, screenshot, MIPS Allegrex registers, CPU execution breakpoints. The richest debugger surface in the family thanks to PPSSPP's native instrumentation.

Quick Install

One-Click IDE Configuration
claude_desktop_config.json
{
  "mcpServers": {
    "dmang-dev-mcp-ppsspp": {
      "command": "npx",
      "args": [
        "-y",
        "dmang-dev-mcp-ppsspp"
      ]
    }
  }
}
Or

Using an AI coding agent (Claude Code, Cursor, etc.)? Copy a ready-made prompt that tells it to fetch the setup instructions and install this server for you.

Documentation Overview

mcp-ppsspp

npm version npm downloads CI License: MIT Snyk Socket Bundlephobia npmgraph

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

+------------------+    stdio     +------------------+   WebSocket    +------------------+
|   MCP client     |   JSON-RPC   |    mcp-ppsspp    |   JSON-RPC     |     PPSSPP       |
| (Claude / etc.)  | ===========> |     (Node.js)    | =============> |    (debugger)    |
+------------------+              +------------------+                +------------------+

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

npm install -g mcp-ppsspp

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)

claude mcp add ppsspp --scope user --env PPSSPP_PORT=12345 mcp-ppsspp

Replace 12345 with your actual port. Verify:

claude mcp list
# ppsspp: mcp-ppsspp - โœ“ Connected

Claude Desktop

Edit claude_desktop_config.json:

{
  "mcpServers": {
    "ppsspp": {
      "command": "mcp-ppsspp",
      "env": { "PPSSPP_PORT": "12345" }
    }
  }
}

Restart Claude Desktop after editing.

Configuration

Env varDefaultPurpose
PPSSPP_HOST127.0.0.1WebSocket host to dial
PPSSPP_PORT(required)WebSocket port โ€” see PPSSPP's debugger settings

Tools

ToolDescription
ppsspp_pingVerify connectivity (returns version)
ppsspp_get_infoTitle, disc ID, version, run state
ppsspp_read8 / ppsspp_read16 / ppsspp_read32Read u8 / u16-LE / u32-LE from PSP memory
ppsspp_write8 / ppsspp_write16 / ppsspp_write32Write to PSP memory
ppsspp_read_rangeRead up to 64 KiB as a byte array
ppsspp_write_rangeWrite byte array to memory
ppsspp_read_stringRead null-terminated UTF-8 string
ppsspp_press_buttonsSet persistent PSP button state
ppsspp_press_buttonPress a button for N frames + auto-release
ppsspp_send_analogSet analog stick position
ppsspp_pause / ppsspp_resumePause / resume emulation
ppsspp_stepStep one MIPS instruction
ppsspp_resetSoft-reset the loaded game
ppsspp_screenshotCapture framebuffer as inline PNG
ppsspp_get_registersRead all MIPS Allegrex registers
ppsspp_breakpoint_add / _remove / _listCPU execution breakpoints

PSP memory map (cheat sheet)

RangeRegion
0x00010000 - 0x00013FFFScratchpad (fast 16 KiB SRAM)
0x04000000 - 0x041FFFFFVRAM (2 MiB GE video memory)
0x08000000 - 0x087FFFFFKernel RAM (8 MiB, low half)
0x08800000 - 0x09FFFFFFUser RAM (24 MiB, where most game state lives)
0xBC000000+Hardware registers

PSP is little-endian (MIPS Allegrex). Kernel-mode mirrors at 0x88xxxxxx map to the same physical RAM as 0x08xxxxxx.

PSP buttons

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

Troubleshooting

SymptomCause / Fix
PPSSPP_PORT must be set on startupSet the env var to the port shown in PPSSPP's Developer Tools dialog
WebSocket connection failedPPSSPP isn't running, "Allow remote debugger" isn't checked, or you have the wrong port
Tool calls hang / time outCheck the PPSSPP UI is responding; the WebSocket request requires PPSSPP's main loop to dispatch
Invalid address on memory opsAddress is outside the PSP's mapped regions (user RAM is 0x08800000+, not 0x00000000+)
Screenshot returns no dataNo game loaded โ€” boot an ISO/EBOOT first
Buttons don't seem to do anythingPPSSPP's input has the buttons but they may not "feel" right via remote input if the game polls fast; try ppsspp_press_button with a longer duration

Limitations

  • No savestate API โ€” PPSSPP's WebSocket debugger doesn't expose savestate.save / load. Use PPSSPP's keybinds (F1-F8 for slots) via the UI for now. Could be hacked by using input.buttons.press to trigger the keybind, but not native.
  • Frame-advance is instruction-level only (cpu.stepInto). To advance a whole frame, set a breakpoint at the vblank handler and resume.
  • Analog stick is shared state โ€” ppsspp_send_analog updates the persistent stick position; not auto-released.

Development

npm install
npm run dev      # tsc --watch โ€” autobuilds on src/ changes

Debugging with the MCP Inspector

Browse and call this server's tools interactively with the MCP Inspector:

PPSSPP_PORT=<port> npm run inspector

Build first if you've edited src/ since your last npm install (npm run build, or keep npm run dev running). mcp-ppsspp has no default port โ€” read the active one off PPSSPP's Developer Tools โ†’ Allow remote debugger dialog and pass it as PPSSPP_PORT. tools/list works even without PPSSPP connected; calling a tool needs PPSSPP running with the remote debugger enabled.

License

MIT

Related MCP Servers

3aKHP/prts-mcp

๐Ÿ ๐Ÿ“‡ โ˜๏ธ ๐Ÿ  - MCP Server for Arknights, querying the PRTS Wiki API and serving auto-synced operator archives and voice lines from game data. Designed for fan-creation (ๅŒไบบๅ‰ตไฝœ) AI agents. Python (stdio/Docker) and TypeScript (Streamable HTTP) implementations.

๐ŸŽฎ Gaming0 views
alex-gon/thegamecrafter-mcp-server

๐Ÿ“‡ โ˜๏ธ - Design, manage, and price tabletop games on The Game Crafter. Browse catalogs, create projects, upload artwork, get pricing.

๐ŸŽฎ Gaming0 views
antics-gg/antics-mcp

๐Ÿ“‡ โ˜๏ธ - Deploy a single-file HTML game to a shareable multiplayer URL with rooms, state sync, and leaderboards. No backend or player accounts.

๐ŸŽฎ Gaming0 views
beckettlab/beckett-godot-mcp

๐Ÿ  ๐ŸŽ ๐ŸชŸ ๐Ÿง - Beckett โ€” MCP for Godot: a zero-sidecar GDScript editor addon that serves MCP over Streamable HTTP from inside the Godot 4 editor (no Node/Python sidecar). Reflection over any class, validate-before-write GDScript, scene/script/resource authoring, and a runtime play-test loop (play, screenshot, input, assert). MIT.

๐ŸŽฎ Gaming0 views

Engagement

Views
0
Installs
0
Upvotes
0

Views and upvotes are unique per visitor network (hashed IP). Installs count copy actions.

Status

Health: Active

Recent health check succeeded.

Last checked: 7/28/2026, 10:17:00 PM

Unclaimed listing (imported or pending owner verification). Claim it โ†’
โ˜… Spotlight Slot

Feature Your MCP Server

Get maximum visibility for your server across our directory, search results, and detail pages.

Spotlight Your Server

Own this project?

This directory is pre-filled from public sources. Claim via GitHub README, site badge, or DNS TXT to get the verified badge and attach your website.

Claim this listing

Promote this listing

Optional paid placement. Free listings stay free forever.

Share & Embed

Add our SVG badge (dark/light directory styles) or embeddable widget to your site.