mcp-ppsspp
The mcp-ppsspp server bridges an AI client to PPSSPP's WebSocket debugger, enabling game automation, reverse engineering, cheat development, and visual inspection.
Connectivity & Game Info
Ping PPSSPP to verify the connection and retrieve its version
Get the loaded game's title, disc ID, version, and run state
Memory Access
Read/write 8-, 16-, or 32-bit values at any valid PSP memory address
Read/write arbitrary byte ranges (up to 64 KiB) as hex data
Read null-terminated UTF-8 strings from PSP memory
Supported regions include user RAM, kernel RAM, VRAM, scratchpad, and hardware registers
Input Simulation
Press/release PSP buttons (cross, circle, triangle, square, d-pad, start, select, L/R triggers, home) persistently or for a specified number of frames
Set the analog stick X/Y position
Emulation Control
Pause, resume, step one MIPS instruction, or soft-reset the loaded game
Visual Capture
Capture the PSP framebuffer as a PNG screenshot (from the raw render target or composited output)
CPU Debugging & Reverse Engineering
Read all MIPS Allegrex CPU registers (GPR, FPU, special registers like PC, SP, RA)
Add, remove, and list CPU execution breakpoints
Provides tools to interact with the PPSSPP emulator for PlayStation Portable, enabling memory read/write, button input, screenshot capture, breakpoints, and register inspection via WebSocket debugger.
mcp-ppsspp
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.
Related MCP server: chrome-devtools-mcp
Requirements
PPSSPP (recent version with WebSocket debugger — 1.7+)
Node.js 22+
"Allow remote debugger" enabled in PPSSPP
Install
npm install -g mcp-ppssppOr npx -y mcp-ppsspp.
Set up PPSSPP's debugger
Launch PPSSPP, load any PSP ISO/EBOOT
Settings → Tools → Developer Tools → Allow remote debugger (check the box)
PPSSPP will show the active host:port (e.g.
ws://192.168.1.10:12345/debugger)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-ppssppReplace 12345 with your actual port. Verify:
claude mcp list
# ppsspp: mcp-ppsspp - ✓ ConnectedClaude Desktop
Edit claude_desktop_config.json:
{
"mcpServers": {
"ppsspp": {
"command": "mcp-ppsspp",
"env": { "PPSSPP_PORT": "12345" }
}
}
}Restart Claude Desktop after editing.
Configuration
Env var | Default | Purpose |
|
| WebSocket host to dial |
| (required) | WebSocket port — see PPSSPP's debugger settings |
Tools
Tool | Description |
| Verify connectivity (returns version) |
| Title, disc ID, version, run state |
| Read u8 / u16-LE / u32-LE from PSP memory |
| Write to PSP memory |
| Read up to 64 KiB as a byte array |
| Write byte array to memory |
| Read null-terminated UTF-8 string |
| Set persistent PSP button state |
| Press a button for N frames + auto-release |
| Set analog stick position |
| Pause / resume emulation |
| Step one MIPS instruction |
| Soft-reset the loaded game |
| Capture framebuffer as inline PNG |
| Read all MIPS Allegrex registers |
| CPU execution breakpoints |
PSP memory map (cheat sheet)
Range | Region |
| Scratchpad (fast 16 KiB SRAM) |
| VRAM (2 MiB GE video memory) |
| Kernel RAM (8 MiB, low half) |
| User RAM (24 MiB, where most game state lives) |
| 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
Symptom | Cause / Fix |
| Set the env var to the port shown in PPSSPP's Developer Tools dialog |
| PPSSPP isn't running, "Allow remote debugger" isn't checked, or you have the wrong port |
Tool calls hang / time out | Check the PPSSPP UI is responding; the WebSocket request requires PPSSPP's main loop to dispatch |
| Address is outside the PSP's mapped regions (user RAM is |
Screenshot returns no data | No game loaded — boot an ISO/EBOOT first |
Buttons don't seem to do anything | PPSSPP's input has the buttons but they may not "feel" right via remote input if the game polls fast; try |
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 usinginput.buttons.pressto 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 andresume.Analog stick is shared state —
ppsspp_send_analogupdates the persistent stick position; not auto-released.
Development
npm install
npm run dev # tsc --watch — autobuilds on src/ changesDebugging with the MCP Inspector
Browse and call this server's tools interactively with the MCP Inspector:
PPSSPP_PORT=<port> npm run inspectorBuild 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
Available Tools
23 toolsppsspp_breakpoint_addA
PURPOSE: Add a CPU execution breakpoint at the given PSP physical address. Emulation halts when PC reaches that address. USAGE: For RE work and HLE intercepts. Combine with ppsspp_resume + (later) ppsspp_get_registers to inspect state at the breakpoint. BEHAVIOR: Modifies PPSSPP's breakpoint table. The breakpoint persists until removed via ppsspp_breakpoint_remove or PPSSPP restarts. Returns an error if the address isn't executable memory. RETURNS: Single line 'Breakpoint added at ADDR_HEX'.
| Name | Required | Description | Default |
|---|---|---|---|
| address | Yes | PSP execution address. Usually in user RAM (0x08800000+) or kernel RAM. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses key behaviors: modifies breakpoint table, persistence until removal or restart, error on non-executable memory. No annotations provided, so description carries full burden. Could mention whether duplicate addresses are handled, but overall adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sections with clear labels (PURPOSE, USAGE, BEHAVIOR, RETURNS). No redundant sentences; every line provides unique value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter tool with no output schema and no annotations, the description covers purpose, usage, behavior, return format, and error case. Missing details like duplicate handling or disabling momentarily, but still complete enough for successful invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers address with description, but description adds context: 'Usually in user RAM (0x08800000+) or kernel RAM.' This extra guidance helps the agent select correct addresses.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states verb+resource: 'Add a CPU execution breakpoint' with specific location (PSP physical address) and effect (emulation halts when PC reaches). Distinguishes from siblings like ppsspp_breakpoint_list and ppsspp_breakpoint_remove.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly describes when to use ('For RE work and HLE intercepts') and suggests combining with specific sibling tools (ppsspp_resume, ppsspp_get_registers), providing clear usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ppsspp_breakpoint_listA
PURPOSE: List all currently-set CPU execution breakpoints. USAGE: Inventory before bulk-removing, or sanity-check what's set. BEHAVIOR: No side effects — pure read. RETURNS: Multi-line text, one line per breakpoint with its address and any conditions.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Declares 'BEHAVIOR: No side effects — pure read.' Without annotations, the description fully covers behavioral traits, assuring the agent of safe, read-only operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with clear section headers (PURPOSE, USAGE, BEHAVIOR, RETURNS). Each of the four sentences serves a distinct purpose without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool with no parameters and no output schema, the description covers purpose, usage, behavior, and return format. Could mention sibling distinction, but overall sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema has zero parameters (100% coverage). Description adds no parameter details, but no parameters exist. Baseline of 4 for zero-parameter case is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description explicitly states 'List all currently-set CPU execution breakpoints', using specific verb and resource. Clearly distinguishes from sibling tools like ppsspp_breakpoint_add and ppsspp_breakpoint_remove.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit when-to-use instructions: 'Inventory before bulk-removing, or sanity-check what's set.' While no explicit alternatives or when-not-to, the context makes it clear it's for listing only.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ppsspp_breakpoint_removeA
PURPOSE: Remove a previously-added CPU execution breakpoint. USAGE: Clean up breakpoints when done debugging. To remove all, query ppsspp_breakpoint_list first. BEHAVIOR: Modifies PPSSPP's breakpoint table. Idempotent for non-existent breakpoints (no error). RETURNS: Single line 'Breakpoint removed at ADDR_HEX'.
| Name | Required | Description | Default |
|---|---|---|---|
| address | Yes | PSP execution address of the breakpoint to remove. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It discloses idempotent behavior for non-existent breakpoints and states it modifies the breakpoint table, which is beyond what annotations would provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise sentences structured with 'PURPOSE', 'USAGE', 'BEHAVIOR', 'RETURNS'. No unnecessary words, front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Simple tool with one parameter and no output schema. Description covers purpose, usage, behavior, and return value completely. No gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Single parameter 'address' with 100% schema coverage. Schema description already explains it as 'PSP execution address'. Description adds no additional semantic value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the verb 'Remove' and resource 'CPU execution breakpoint'. It distinguishes from siblings like ppsspp_breakpoint_add and ppsspp_breakpoint_list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'Clean up breakpoints when done debugging' and suggests using ppsspp_breakpoint_list to remove all. Provides clear context for when to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ppsspp_get_infoA
PURPOSE: Get the loaded game's title, disc ID, and version, plus PPSSPP's run state. USAGE: Call after ppsspp_ping to learn what game is loaded and whether emulation is currently running or stepping. BEHAVIOR: No side effects — pure read. Returns 'no game loaded' fields if PPSSPP is at the home menu / not currently emulating. RETURNS: Multi-line text with Title, Disc ID, Version, and run state (running / paused / stepping).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description fully covers behavior: 'No side effects — pure read' and 'Returns 'no game loaded' fields if PPSSPP is at the home menu / not currently emulating.' This completely informs the agent of safety and outcomes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is structured with 'PURPOSE:', 'USAGE:', 'BEHAVIOR:', 'RETURNS:' sections, making it easy to scan. It is concise with no wasted words, and the most critical information comes first.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (zero parameters, no output schema), the description completely covers purpose, usage, behavior, and return format. It leaves no ambiguity about what the tool does or when to use it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are no parameters, so the description adds value by explaining the return format and field names (Title, Disc ID, Version, run state). With 100% schema coverage, a baseline of 3 applies, but the extra detail on return fields justifies a 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Get the loaded game's title, disc ID, and version, plus PPSSPP's run state.' It uses specific verbs and resource names, and distinguishes itself from sibling tools like ppsspp_get_registers by focusing on game metadata and emulation state.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly advises to 'Call after ppsspp_ping to learn what game is loaded and whether emulation is currently running or stepping.' This provides clear context and sequencing relative to a sibling tool, and mentions the edge case of 'no game loaded' at the home menu.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ppsspp_get_registersA
PURPOSE: Read all MIPS Allegrex CPU registers (general-purpose + FPU + special). USAGE: For reverse engineering and debugging — inspect function arguments, return values, PC, stack pointer. PSP's calling convention puts args in $a0-$a3, return in $v0, stack in $sp, return address in $ra. BEHAVIOR: No side effects — pure read. Most informative when called while emulation is paused (ppsspp_pause first); on a running CPU the snapshot is from whenever PPSSPP samples it. RETURNS: Multi-line text with all register names + hex values, grouped by class (GPR, FPU, special).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully discloses behavior: no side effects, pure read, and notes that the snapshot timing depends on emulation state (paused vs running). No contradictions with annotations as none are provided.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with labeled sections (PURPOSE, USAGE, BEHAVIOR, RETURNS) and every sentence adds unique value. It is slightly verbose but balanced given the need to cover multiple aspects for a tool with no annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no parameters and no output schema, the description fully covers purpose, usage guidance, behavioral transparency, and return format. It is complete and leaves no significant gaps for an AI agent to understand invocation and expected output.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has no parameters, so baseline is 4. The description adds value by explaining the return format (multi-line with grouped registers), which is relevant for understanding the output even though it is not parameter documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool reads all MIPS Allegrex CPU registers, specifying GPR, FPU, and special registers. It uses a specific verb+resource and distinguishes from sibling memory-reading tools like ppsspp_read32 and ppsspp_read_range.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit usage contexts such as reverse engineering and debugging, including calling convention details for argument inspection. It offers clear guidance but does not explicitly state when not to use it or list alternative sibling tools for similar tasks.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ppsspp_pauseA
PURPOSE: Pause PSP emulation (the debugger calls this 'stepping mode'). USAGE: Use before a sequence of memory inspects when you need a stable game state across calls. Memory r/w tool calls still work while paused. Use ppsspp_resume to continue. BEHAVIOR: Modifies emulator run state. Pauses the MIPS CPU; rendering may continue at last frame. Idempotent — pausing already-paused is a no-op. RETURNS: Single line 'Emulation paused'.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Details that it modifies emulator run state, pauses MIPS CPU, rendering may continue at last frame, and is idempotent. Since no annotations exist, the description fully covers behavioral traits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with labeled sections (PURPOSE, USAGE, BEHAVIOR, RETURNS). Every sentence adds value; no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple pause tool with no output schema, the description explains the return value ('Emulation paused') and provides all necessary context. Complete and sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters; baseline is 4 as per rules. No additional explanation needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'Pause PSP emulation' with a specific verb and resource, and distinguishes from siblings like ppsspp_resume and ppsspp_step by mentioning 'stepping mode'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when to use (before memory inspects for stable state), notes that memory tools still work, and directs to ppsspp_resume for continuation. Provides clear usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ppsspp_pingA
PURPOSE: Verify that the PPSSPP WebSocket debugger is reachable and responding. USAGE: Call once at start-of-session before any other tool calls; if it succeeds, the WebSocket handshake worked and PPSSPP's debugger is available. BEHAVIOR: No side effects — calls the 'version' event to learn PPSSPP's release version. Times out after ~10 seconds if PPSSPP isn't running, doesn't have 'Allow remote debugger' enabled (Settings → Tools → Developer Tools), or the host:port isn't reachable. RETURNS: Single line 'pong (PPSSPP VERSION)'.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description details that the tool has no side effects, calls the 'version' event, and times out after ~10 seconds under conditions like PPSSPP not running or remote debugger disabled. It also mentions the prerequisite 'Allow remote debugger' setting. With no annotations provided, this fully informs the agent of behavioral traits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is structured with clear labels (PURPOSE, USAGE, BEHAVIOR, RETURNS), is very concise, and front-loads the essential information. Every sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description adequately explains the return format. It covers purpose, usage, behavior (including timeout), prerequisites, and return value. With 0 parameters, no further detail is needed; the description is complete for this tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0 parameters, so schema_description_coverage is 100%. The description adds value by explaining what the tool returns ('Single line 'pong (PPSSPP VERSION)''), exceeding the baseline expectation for zero-parameter tools.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Verify that the PPSSPP WebSocket debugger is reachable and responding.' This is a specific verb and resource, and it distinguishes the tool from sibling tools like ppsspp_get_info or ppsspp_breakpoint_add, which serve different purposes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'Call once at start-of-session before any other tool calls; if it succeeds, the WebSocket handshake worked.' This provides clear guidance on when to use the tool and what the result implies.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ppsspp_press_buttonA
PURPOSE: Press a PSP button for a fixed number of frames, then auto-release. USAGE: Use for discrete actions like pressing Start to skip a cutscene, or Cross to confirm a menu. For longer holds across many frames use ppsspp_press_buttons (persistent state) instead. BEHAVIOR: Modifies emulator input state. PPSSPP queues the press internally and releases the button after duration frames; the tool call returns immediately. Returns an error if the button name isn't recognized. RETURNS: Single line 'Pressed BUTTON for N frames (auto-released)'.
| Name | Required | Description | Default |
|---|---|---|---|
| button | Yes | PSP button name. Valid: cross, circle, triangle, square, up, down, left, right, start, select, ltrigger, rtrigger, home. | |
| duration | No | Number of frames to hold the button before releasing (default 1). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, but the description fully explains the behavior: the emulator queues the press internally, the tool returns immediately, and the button is auto-released after the specified duration. Also mentions error handling for unrecognized button names.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description uses a clear, structured format (PURPOSE, USAGE, BEHAVIOR, RETURNS) and is concise with no wasted words. All information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the low complexity (2 parameters, no nested objects, no output schema), the description is complete. It covers purpose, usage, behavior, return value, and error conditions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema covers 100% of parameters with descriptions. The description adds value by mentioning the return message format, which is not in the schema, and provides context about the button names without repeating the enum list.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it presses a PSP button for a fixed number of frames and auto-releases. It distinguishes from the sibling tool ppsspp_press_buttons by specifying that the press is discrete and temporary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says to use for discrete actions and to use ppsspp_press_buttons for longer holds. Provides concrete examples (skipping cutscene, confirming menu).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ppsspp_press_buttonsA
PURPOSE: Set the PSP joypad button state — the buttons in the map are 'held' until you send another buttons command. USAGE: Drive games with input. Unlike one-frame-only schemes on other emulators, PPSSPP's input.buttons.send updates the persistent button state — the buttons stay held until you call ppsspp_press_buttons again with them set false (or use ppsspp_press_button for a timed one-shot). To release all buttons, call with all keys set to false. BEHAVIOR: Modifies emulator input state until changed. PSP buttons (case-sensitive): cross, circle, triangle, square, up, down, left, right, start, select, ltrigger, rtrigger, home. Unrecognized button names return an error. RETURNS: Single line 'Set buttons: BUTTON+BUTTON+...' or '... (all released)' if nothing was pressed.
| Name | Required | Description | Default |
|---|---|---|---|
| buttons | Yes | Map of PSP button name → pressed (boolean). Valid names: cross, circle, triangle, square, up, down, left, right, start, select, ltrigger, rtrigger, home. Example: {"cross": true, "right": true} holds X and Right. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description fully discloses the persistent button state behavior, noting that buttons stay held until changed, which goes beyond the missing annotations. It also lists case-sensitive button names and error handling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with labeled sections (PURPOSE, USAGE, BEHAVIOR, RETURNS) and every sentence adds essential information without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter tool with no annotations or output schema, the description is fully complete, covering purpose, behavior, parameter details, return format, and error handling.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The parameter is well-documented in the schema, but the description adds value by listing valid button names, giving an example, and noting case-sensitivity, earning a score above the baseline of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the purpose as 'Set the PSP joypad button state' and distinguishes it from one-frame-only schemes, making it specific and actionable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides explicit when-to-use guidance (drive games with input) and contrasts with the sibling ppsspp_press_button for timed one-shots. It also explains how to release all buttons.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ppsspp_read16A
PURPOSE: Read an unsigned 16-bit little-endian value from PSP memory at the given physical address. USAGE: Use for 16-bit game-state fields (most counters, IDs, small numerics). For single bytes use ppsspp_read8; for 32-bit use ppsspp_read32; for arbitrary byte spans use ppsspp_read_range. BEHAVIOR: No side effects — pure read. PSP is little-endian (MIPS Allegrex). Returns an error if address+2 exceeds the valid memory region. RETURNS: Single line 'ADDR_HEX: VAL_DEC (0xVAL_HEX)'.
| Name | Required | Description | Default |
|---|---|---|---|
| address | Yes | PSP physical address. PSP memory layout: user RAM starts at 0x08800000 (or 0x08000000 — varies by firmware allocation), kernel RAM at 0x08000000-0x087FFFFF, VRAM at 0x04000000-0x041FFFFF, scratchpad at 0x00010000-0x00013FFF, hardware regs at 0xBC000000+. Most game state lives in user RAM. Note PPSSPP may also accept 0x88xxxxxx kernel-mode mirrors of the same physical memory. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses no side effects ('pure read'), error condition ('Returns an error if address+2 exceeds valid memory region'), endianness ('PSP is little-endian'), and return format ('Single line 'ADDR_HEX: VAL_DEC (0xVAL_HEX)''). With no annotations, the description fully addresses behavioral traits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with clear section headers (PURPOSE, USAGE, BEHAVIOR, RETURNS). Every sentence adds unique value, and there is no redundancy or unnecessary text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter read tool with no output schema, the description covers behavior, errors, endianness, return format, and memory layout hints. It is fully complete for an AI agent to select and use the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and includes memory layout details. The description adds extra context by reiterating endianness and return format, which enhances understanding beyond the schema. However, the schema already provides substantial information, so a baseline of 3 is appropriate; the extra value justifies a 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool reads an unsigned 16-bit little-endian value from PSP memory at a given physical address. It uses a specific verb ('read'), resource ('PSP memory'), and data type, and distinguishes from siblings by naming alternative tools for different sizes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'Use for 16-bit game-state fields' and provides direct alternatives: 'For single bytes use ppsspp_read8; for 32-bit use ppsspp_read32; for arbitrary byte spans use ppsspp_read_range.' This clearly indicates when to use this tool versus others.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ppsspp_read32A
PURPOSE: Read an unsigned 32-bit little-endian value from PSP memory at the given physical address. USAGE: Use for 32-bit fields — timestamps, large counters, pointers, RGBA colors. For 8/16-bit use ppsspp_read8/read16; for spans use ppsspp_read_range. BEHAVIOR: No side effects — pure read. PSP is little-endian. Returns an error if address+4 exceeds the valid memory region. RETURNS: Single line 'ADDR_HEX: VAL_DEC (0xVAL_HEX)'.
| Name | Required | Description | Default |
|---|---|---|---|
| address | Yes | PSP physical address. PSP memory layout: user RAM starts at 0x08800000 (or 0x08000000 — varies by firmware allocation), kernel RAM at 0x08000000-0x087FFFFF, VRAM at 0x04000000-0x041FFFFF, scratchpad at 0x00010000-0x00013FFF, hardware regs at 0xBC000000+. Most game state lives in user RAM. Note PPSSPP may also accept 0x88xxxxxx kernel-mode mirrors of the same physical memory. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided; description fully handles burden. Clearly states no side effects, little-endianness, and error condition when address+4 exceeds memory.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Structured with PURPOSE, USAGE, BEHAVIOR, RETURNS. Four lines, no fluff, front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Single parameter, no output schema, but description covers return format and error condition. Complete for the tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 100% coverage, but description adds value by explaining memory layout and address ranges, beyond the schema's description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states reading a 32-bit unsigned little-endian value from PSP memory. Distinguishes from siblings by specifying 32-bit fields and mentioning alternatives for other sizes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when to use this tool (32-bit fields) and when to use alternatives (ppsspp_read8/read16 for smaller, ppsspp_read_range for spans).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ppsspp_read8A
PURPOSE: Read an unsigned 8-bit byte from PSP memory at the given physical address. USAGE: Use for single-byte status flags, counters, and 8-bit fields. For 16/32-bit values use ppsspp_read16/read32 (one call instead of multi-byte assembly); for spans use ppsspp_read_range. BEHAVIOR: No side effects — pure read. Returns an error if the address isn't a valid PSP memory address (PPSSPP validates against the PSP's mapped regions). RETURNS: Single line 'ADDR_HEX: VAL_DEC (0xVAL_HEX)'.
| Name | Required | Description | Default |
|---|---|---|---|
| address | Yes | PSP physical address. PSP memory layout: user RAM starts at 0x08800000 (or 0x08000000 — varies by firmware allocation), kernel RAM at 0x08000000-0x087FFFFF, VRAM at 0x04000000-0x041FFFFF, scratchpad at 0x00010000-0x00013FFF, hardware regs at 0xBC000000+. Most game state lives in user RAM. Note PPSSPP may also accept 0x88xxxxxx kernel-mode mirrors of the same physical memory. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description fully carries burden. Clearly states no side effects (pure read), and that it returns an error if address is invalid. Also describes the return format.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Very concise with labeled sections (PURPOSE, USAGE, BEHAVIOR, RETURNS) that front-load key information. Every sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read tool with one parameter and no output schema, description covers purpose, usage context, behavioral traits, return format, and error handling. Nothing missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema provides detailed description of the address parameter (100% coverage). Description adds further context on PSP memory layout (user RAM, kernel RAM, VRAM, etc.), enhancing understanding beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it reads an unsigned 8-bit byte from PSP memory at a physical address. Distinguishes from siblings by mentioning alternative tools for other data widths (ppsspp_read16/read32) and ranges (ppsspp_read_range).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use: for single-byte fields, counters, etc. Provides alternatives for other scenarios, e.g., for 16/32-bit values or spans.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ppsspp_read_rangeA
PURPOSE: Read a contiguous range of bytes from PSP memory and return as a hex dump. USAGE: Use whenever you need more than ~4 bytes — one round-trip vs N typed reads. PPSSPP returns the data base64-encoded over the wire; this tool decodes and formats as space-separated hex bytes. No hard size limit from the WebSocket but stay reasonable (≤16 KiB per call) for response sizes. BEHAVIOR: No side effects — pure read. Reads size consecutive bytes starting at address. Returns an error if any byte in the range is outside the valid PSP memory map. RETURNS: 'ADDR_HEX [N bytes]:' header + space-separated 2-digit uppercase hex bytes.
| Name | Required | Description | Default |
|---|---|---|---|
| address | Yes | PSP physical address. PSP memory layout: user RAM starts at 0x08800000 (or 0x08000000 — varies by firmware allocation), kernel RAM at 0x08000000-0x087FFFFF, VRAM at 0x04000000-0x041FFFFF, scratchpad at 0x00010000-0x00013FFF, hardware regs at 0xBC000000+. Most game state lives in user RAM. Note PPSSPP may also accept 0x88xxxxxx kernel-mode mirrors of the same physical memory. | |
| size | Yes | Number of bytes to read (1-65536). Larger reads work but produce big responses. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description thoroughly discloses behavior: no side effects ('pure read'), internal decoding/formatting, error conditions for invalid addresses, and no hard size limits but a recommended cap. Since no annotations are provided, the description carries full burden and meets it exceptionally.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-organized with clear sections (PURPOSE, USAGE, BEHAVIOR, RETURNS), uses no redundant words, and is appropriately concise for the complexity of the tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite no output schema, it fully describes the return format and error conditions, covers the tool's scope and limitations, and provides all necessary context for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already has 100% coverage with detailed descriptions for both parameters. The tool description adds practical guidance (e.g., memory layout, recommended size limit) but does not introduce critical semantics beyond the schema, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states 'Read a contiguous range of bytes from PSP memory and return as a hex dump' and differentiates from sibling typed-read tools by noting its use for more than ~4 bytes, making it a specific verb+resource with clear distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly advises using this tool for reads of more than ~4 bytes to avoid multiple round-trips and recommends a practical size limit (≤16 KiB). It does not explicitly exclude use cases for smaller reads, but the advice implies the alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ppsspp_read_stringA
PURPOSE: Read a null-terminated UTF-8 string from PSP memory at the given address. USAGE: Use for in-game text, character names, dialogue, file names — anywhere the PSP stores a C-style null-terminated string. Stops at the first 0x00 byte. BEHAVIOR: No side effects — pure read. Reads bytes until null terminator, decodes as UTF-8. Returns an error if the address is outside valid memory, or if the string runs past valid memory before hitting a null. RETURNS: Single line 'ADDR_HEX: "STRING"'.
| Name | Required | Description | Default |
|---|---|---|---|
| address | Yes | PSP physical address. PSP memory layout: user RAM starts at 0x08800000 (or 0x08000000 — varies by firmware allocation), kernel RAM at 0x08000000-0x087FFFFF, VRAM at 0x04000000-0x041FFFFF, scratchpad at 0x00010000-0x00013FFF, hardware regs at 0xBC000000+. Most game state lives in user RAM. Note PPSSPP may also accept 0x88xxxxxx kernel-mode mirrors of the same physical memory. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Given no annotations are provided, the description fully covers behavioral traits: pure read with no side effects, reads until null terminator, decodes UTF-8, and returns errors for invalid memory or string running past valid memory. This is comprehensive and meets the burden fully.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise, using labeled sections (PURPOSE, USAGE, BEHAVIOR, RETURNS) to front-load key information. Every sentence adds value with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is complete for a simple read tool: it explains input (single address), behavior (null-terminated, UTF-8), output format (single line), and error cases. No output schema exists, but the description covers return value adequately.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides 100% coverage with a detailed description of the 'address' parameter, including PSP memory layout. The tool description does not add new semantic information beyond what the schema provides, so a baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool reads a null-terminated UTF-8 string from PSP memory, with specific use cases like in-game text and file names. It distinguishes itself from sibling tools that read raw bytes (e.g., ppsspp_read8/16/32) by its focus on string extraction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use the tool (in-game text, character names, dialogue, file names) and mentions the termination condition (stops at first 0x00 byte). However, it lacks an explicit statement of when not to use it or which alternative tool to use for non-string data, though the sibling context implies this.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ppsspp_resetA
PURPOSE: Reset the loaded PSP game — equivalent to soft-resetting the console. USAGE: Use to start fresh from the game's intro. To return to a specific point, set up a savestate via PPSSPP's UI and load it (savestate API is not in the WebSocket interface, so this must be done via PPSSPP's keybinds — typically F1-F8 for slots). BEHAVIOR: DESTRUCTIVE: RAM contents cleared, CPU returns to game entry point, framecount/game-state lost. The ISO/EBOOT stays loaded. RETURNS: Single line 'Game reset'.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Describes destructiveness in detail: 'RAM contents cleared, CPU returns to game entry point, framecount/game-state lost. The ISO/EBOOT stays loaded.' Since no annotations exist, this fully covers behavioral disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences covering purpose, usage, and behavior, plus return note. Each sentence earns its place; front-loaded with clear labels.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given zero parameters and no output schema, the description covers all necessary information: purpose, when to use, destructive behavior, and return value. Complete for the tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist (0 params, 100% coverage). Baseline is 4; description adds no param-specific info but none needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the purpose: 'Reset the loaded PSP game — equivalent to soft-resetting the console.' This is specific and distinguishes from sibling tools like pause/resume.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells when to use: 'start fresh from the game's intro.' Also explains alternative for savestate loading, providing clear context and exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ppsspp_resumeA
PURPOSE: Resume PSP emulation from a paused/stepping state. USAGE: Counterpart to ppsspp_pause. Use after a paused inspection sequence. To step a single frame instead, use ppsspp_step. BEHAVIOR: Modifies emulator run state. Idempotent — resuming already-running is a no-op. RETURNS: Single line 'Emulation resumed'.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Describes modifying emulator run state, idempotency (no-op if already running). No annotations provided, so description carries burden. Could mention if any side effects, but likely none needed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Very concise, structured with labeled sections (PURPOSE, USAGE, BEHAVIOR, RETURNS). Every sentence adds value, no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Fully covers tool's purpose, usage, behavior, and return value. No missing information given zero parameters and no output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Zero parameters, schema coverage 100%. Description adds no parameter info but baseline 4 for zero params is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states it resumes PSP emulation from a paused/stepping state, using a specific verb and resource. It distinguishes from siblings by mentioning ppsspp_pause and ppsspp_step as alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly identifies as counterpart to ppsspp_pause, advises use after paused inspection, and suggests ppsspp_step for frame stepping. Provides clear when-to-use and when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ppsspp_screenshotA
PURPOSE: Capture the current PSP framebuffer as a PNG-encoded screenshot. USAGE: For visual inspection or sequence documentation. Default 'render' source reads the active GPU render target — safer, native 480x272, what the PSP CPU asked the GPU to draw. Opt-in 'output' source reads PPSSPP's final composited output (post scaling/shaders) but can crash PPSSPP on games whose output framebuffer state confuses GPU_GetOutputFramebuffer (a real upstream bug — an assert that should be a graceful failure). Prefer 'render' unless you specifically need the post-processed image. BEHAVIOR: Transparently pauses the CPU (cpu.stepping), captures, then resumes — both PPSSPP buffer events require stepping. If the emulator was already paused, leaves it paused. Returns an error if no game is loaded. The 'output' source CAN crash PPSSPP on certain games; if it does, MCP auto-reconnects to the relaunched PPSSPP cleanly. RETURNS: Text confirmation + inline PNG image block.
| Name | Required | Description | Default |
|---|---|---|---|
| source | No | Which GPU buffer to capture. 'render' (default) reads the current render target via gpu.buffer.renderColor — native PSP 480x272, safer on homebrew/edge-case games. 'output' reads the final composited framebuffer via gpu.buffer.screenshot — post-processed (matches what's on screen) but can crash PPSSPP on games where GPU_GetOutputFramebuffer trips its null-buf assertion. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses key behaviors: pauses CPU during capture, resumes unless already paused, returns error if no game loaded, and that the 'output' source can crash PPSSPP but MCP auto-reconnects. Since no annotations are provided, the description carries the full burden and meets it fully.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is structured with clear sections (PURPOSE, USAGE, BEHAVIOR, RETURNS) and front-loads the purpose. Every sentence adds unique value without redundancy. Length is appropriate for a one-parameter tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description specifies the return format (text confirmation + inline PNG). It covers all aspects: purpose, source options, side effects, error cases, and post-capture behavior. Sufficient for an agent to select and invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema provides 100% coverage with enum values, but the description adds significant value: explains the technical difference (GPU render target vs composited output), notes native resolution for render, and gives crash context for output. This exceeds schema detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool captures a PNG screenshot of the PSP framebuffer, with specific verb 'capture' and resource 'framebuffer'. It distinguishes between 'render' and 'output' sources, and differs from sibling tools (no other screenshot tool) by focusing solely on visual capture.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance: 'Prefer 'render' unless you specifically need the post-processed image.' It warns against using 'output' on certain games due to crash risk, and explains the default behavior. There are no alternative screenshot tools among siblings, so it fully addresses when to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ppsspp_send_analogA
PURPOSE: Set the PSP analog stick state (one of left/right; the PSP only has one stick natively but PPSSPP exposes both for forward-compat). USAGE: Drive games that need analog input — character movement, camera control. X and Y are signed in [-1.0, 1.0]; (0, 0) = neutral, (1, 0) = full right, (0, -1) = full up. BEHAVIOR: Modifies emulator analog input. State persists until updated. RETURNS: Single line 'Set analog stick STICK to (X, Y)'.
| Name | Required | Description | Default |
|---|---|---|---|
| stick | Yes | Which analog stick to update. PSP only has 'left' natively; 'right' is reserved. | |
| x | Yes | Horizontal axis. -1 = full left, 0 = center, 1 = full right. | |
| y | Yes | Vertical axis. -1 = full down, 0 = center, 1 = full up. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description discloses key behavioral traits: 'Modifies emulator analog input. State persists until updated.' and describes the return string. This is adequate for a simple stateful setter, though rate limits or side effects are not mentioned.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with sections (PURPOSE, USAGE, BEHAVIOR, RETURNS) and is concise, covering all necessary points without extraneous words. A minor improvement could be removing redundant phrasing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple nature of the tool, complete schema coverage, and no output schema, the description fully addresses usage, behavior, and return format. The context of siblings (all emulator commands) is clear, and no further details are needed for an AI agent to use the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage, but the description adds useful context: it explains the coordinate system with examples like '(0,0) neutral, (1,0) full right, (0,-1) full up' and notes that 'right' is reserved. This goes beyond the schema's min/max and enum descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Set the PSP analog stick state' and specifies that it handles one of left/right, noting the PSP only has one stick natively. It differentiates from sibling tools like ppsspp_press_button by explaining it is for analog input needed in games.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'Drive games that need analog input — character movement, camera control.' It also clarifies that 'right' is reserved for forward-compat, guiding selection between sticks. However, it does not explicitly contrast with digital press tools or state when not to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ppsspp_stepA
PURPOSE: Step the MIPS CPU forward by ONE instruction (cpu.stepInto). USAGE: For instruction-level debugging — set a breakpoint, hit it, then step. NOT a frame-advance — one MIPS instruction is much smaller than one frame. To advance a frame's worth of execution, set a breakpoint at the start of the next frame's render and use ppsspp_resume. BEHAVIOR: Modifies emulator run state. Executes one MIPS instruction, then returns to stepping mode. Returns an error if emulation isn't currently in stepping mode (call ppsspp_pause first). RETURNS: Single line 'Stepped one instruction. PC: 0xADDR'.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It discloses that it modifies emulator run state, executes one instruction, returns to stepping mode, and errors if not in stepping mode. Return format is also specified.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with PURPOSE and USAGE sections. Every sentence is valuable; no waste. Extremely concise yet comprehensive.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers all necessary context: stepping mechanism, relation to frame-advance, prerequisites, return value. No output schema exists but return is described. Complete for a zero-parameter tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist, so baseline is 4. The description does not need to add parameter details, and the purpose is fully covered.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the purpose: stepping the MIPS CPU by one instruction (cpu.stepInto). It uses specific verbs and resources, and distinguishes from sibling tools like ppsspp_resume (frame advance) and ppsspp_pause (enters stepping mode).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit usage guidance: set a breakpoint then step, with clear note that it is not a frame-advance. It also states when to use alternatives (set breakpoint and ppsspp_resume) and prerequisites (emulation must be in stepping mode via ppsspp_pause).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ppsspp_write16A
PURPOSE: Write an unsigned 16-bit little-endian value to PSP memory. USAGE: Use for 16-bit cheats and pokes (HP, score, coordinates). For single bytes use ppsspp_write8; for 32/larger use ppsspp_write32/write_range. BEHAVIOR: DESTRUCTIVE: overwrites two bytes with no undo. PSP is little-endian (low byte at address, high at address+1). Returns an error if address+2 exceeds valid memory or value > 65535. RETURNS: Single line 'Wrote VAL → ADDR_HEX'.
| Name | Required | Description | Default |
|---|---|---|---|
| address | Yes | PSP physical address. PSP memory layout: user RAM starts at 0x08800000 (or 0x08000000 — varies by firmware allocation), kernel RAM at 0x08000000-0x087FFFFF, VRAM at 0x04000000-0x041FFFFF, scratchpad at 0x00010000-0x00013FFF, hardware regs at 0xBC000000+. Most game state lives in user RAM. Note PPSSPP may also accept 0x88xxxxxx kernel-mode mirrors of the same physical memory. | |
| value | Yes | 16-bit value (0-65535). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description highlights destructive behavior ('overwrites two bytes with no undo'), explains the little-endian byte order, and documents error conditions (address+2 out of bounds, value > 65535). Since no annotations are provided, this disclosure is critical and thorough.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is organized into clear sections (PURPOSE, USAGE, BEHAVIOR, RETURNS) and uses concise language. Every sentence provides necessary information without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (2 parameters, no output schema), the description covers all essential aspects: purpose, usage guidance, behavioral details, error handling, and return format. No gaps are apparent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds value by explaining endianness context (low byte at address, high at address+1) and linking the value range to the error condition. This is helpful beyond the schema's parameter descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Write an unsigned 16-bit little-endian value'), target resource ('PSP memory'), and distinguishes from siblings by specifying the bit width and endianness. Sibling references in the usage section confirm this differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells when to use this tool ('16-bit cheats and pokes') and when not ('For single bytes use ppsspp_write8; for 32/larger use ppsspp_write32/write_range'), providing direct alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ppsspp_write32A
PURPOSE: Write an unsigned 32-bit little-endian value to PSP memory. USAGE: Use for 32-bit cheats and pokes — timestamps, large counters, pointers. For 8/16-bit use ppsspp_write8/write16; for spans use ppsspp_write_range. BEHAVIOR: DESTRUCTIVE: overwrites four bytes with no undo. PSP is little-endian. Returns an error if address+4 exceeds valid memory or value > 4294967295. RETURNS: Single line 'Wrote VAL → ADDR_HEX'.
| Name | Required | Description | Default |
|---|---|---|---|
| address | Yes | PSP physical address. PSP memory layout: user RAM starts at 0x08800000 (or 0x08000000 — varies by firmware allocation), kernel RAM at 0x08000000-0x087FFFFF, VRAM at 0x04000000-0x041FFFFF, scratchpad at 0x00010000-0x00013FFF, hardware regs at 0xBC000000+. Most game state lives in user RAM. Note PPSSPP may also accept 0x88xxxxxx kernel-mode mirrors of the same physical memory. | |
| value | Yes | 32-bit value (0-4294967295). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully covers behavior: it declares 'DESTRUCTIVE: overwrites four bytes with no undo', mentions endianness, and error conditions for address+4 and value bounds.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Structured with clear headers (PURPOSE, USAGE, BEHAVIOR, RETURNS) and every sentence adds essential information. No fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, description adequately describes the return format. Covers purpose, usage, behavior, errors, and return. Complete for a 2-parameter tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema already covers both parameters (100% coverage). Description adds context like little-endian and error condition 'address+4 exceeds valid memory', but the schema already defines value max. Slight enhancement.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states 'Write an unsigned 32-bit little-endian value to PSP memory' – a clear verb+resource. It also distinguishes from similar tools by naming ppsspp_write8, write16, and write_range.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit usage guidance: 'Use for 32-bit cheats and pokes — timestamps, large counters, pointers.' Then gives clear alternatives for 8/16-bit and spans, fulfilling both when-to-use and when-not-to-use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ppsspp_write8A
PURPOSE: Write an unsigned byte (0-255) to PSP memory at the given physical address. USAGE: Use for single-byte cheats, debug pokes, game-state mutations. For 16/32-bit use ppsspp_write16/write32; for spans use ppsspp_write_range. BEHAVIOR: DESTRUCTIVE: overwrites whatever was at address with no undo. Direct memory write — no hardware mediation. Returns an error if the address is outside valid memory or value > 255. RETURNS: Single line 'Wrote VAL → ADDR_HEX'.
| Name | Required | Description | Default |
|---|---|---|---|
| address | Yes | PSP physical address. PSP memory layout: user RAM starts at 0x08800000 (or 0x08000000 — varies by firmware allocation), kernel RAM at 0x08000000-0x087FFFFF, VRAM at 0x04000000-0x041FFFFF, scratchpad at 0x00010000-0x00013FFF, hardware regs at 0xBC000000+. Most game state lives in user RAM. Note PPSSPP may also accept 0x88xxxxxx kernel-mode mirrors of the same physical memory. | |
| value | Yes | Byte value (0-255). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses destructive behavior, direct memory write, and error conditions. No annotations provided, so description bears full burden; it covers key behavioral traits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with labeled sections (PURPOSE, USAGE, BEHAVIOR, RETURNS). No unnecessary words. Front-loaded key information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Provides return format and error conditions. No output schema, so description compensates adequately. Could mention potential impact on emulator state, but sufficient for typical use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, baseline 3. Description adds context for the address parameter (memory layout, acceptable ranges) beyond schema. Value parameter is straightforward.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states that it writes an unsigned byte to PSP memory at a physical address. Distinguishes from sibling tools by mentioning write16, write32, and write_range.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states use cases (single-byte cheats, debug pokes, game-state mutations) and provides alternatives for other widths or ranges.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ppsspp_write_rangeA
PURPOSE: Write a contiguous byte sequence to PSP memory starting at the given address. USAGE: Use for installing cheat tables, patching code blocks, or seeding regions. Bytes are sent base64-encoded over the wire. BEHAVIOR: DESTRUCTIVE: overwrites N bytes with no undo. Direct memory write. Returns an error if address+N exceeds valid memory or any byte value is outside 0-255. RETURNS: Single line 'Wrote N bytes → ADDR_HEX'.
| Name | Required | Description | Default |
|---|---|---|---|
| address | Yes | PSP physical address. PSP memory layout: user RAM starts at 0x08800000 (or 0x08000000 — varies by firmware allocation), kernel RAM at 0x08000000-0x087FFFFF, VRAM at 0x04000000-0x041FFFFF, scratchpad at 0x00010000-0x00013FFF, hardware regs at 0xBC000000+. Most game state lives in user RAM. Note PPSSPP may also accept 0x88xxxxxx kernel-mode mirrors of the same physical memory. | |
| bytes | Yes | Byte values (each 0-255), written sequentially from `address`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It explicitly states 'DESTRUCTIVE: overwrites N bytes with no undo' and 'Direct memory write.' It also describes error conditions: 'Returns an error if address+N exceeds valid memory or any byte value is outside 0-255.' This fully discloses the tool's behavioral traits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is structured into labeled sections (PURPOSE, USAGE, BEHAVIOR, RETURNS) making it highly scannable. Every sentence is informative with no redundancy. It is concise yet complete.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers purpose, usage, destructive behavior, error conditions, return format, and notes encoding. Given the complexity (memory write, address range validation) it is fairly complete. A minor gap: it does not mention if the PSP emulator needs to be paused, but sibling tools ppsspp_pause/resume likely handle that. Overall, it provides sufficient context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds value by noting that bytes are 'base64-encoded over the wire' and specifying the return format: 'Single line "Wrote N bytes → ADDR_HEX"'. This provides semantic information beyond the schema's descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with a clear purpose statement: 'Write a contiguous byte sequence to PSP memory starting at the given address.' It specifies the verb (write), resource (PSP memory), and scope (contiguous byte sequence). It also lists specific use cases like 'installing cheat tables, patching code blocks, or seeding regions,' which distinguishes it from sibling tools that write single bytes/words or read memory.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The USAGE section provides explicit use cases: 'Use for installing cheat tables, patching code blocks, or seeding regions.' This gives context for when to use the tool. However, it does not explicitly contrast with alternatives like ppsspp_write8/16/32 for single-value writes or mention when not to use it. Still, the guidance is clear and helpful.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
1 tool update
v0.1.3- Changed
ppsspp_screenshot2 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / sourceAdded value: +{ + "description": "Which GPU buffer to capture. 'render' (default) reads the current render target via gpu.buffer.renderColor — native PSP 480x272, safer on homebrew/edge-case games. 'output' reads the final composited framebuffer via gpu.buffer.screenshot — post-processed (matches what's on screen) but can crash PPSSPP on games where GPU_GetOutputFramebuffer trips its null-buf assertion.", + "enum": [ + "render", + "output" + ], + "type": "string" +}
23 tool updates
v0.1.0- First observed
ppsspp_breakpoint_add - First observed
ppsspp_breakpoint_list - First observed
ppsspp_breakpoint_remove - First observed
ppsspp_get_info - First observed
ppsspp_get_registers - First observed
ppsspp_pause - First observed
ppsspp_ping - First observed
ppsspp_press_button - First observed
ppsspp_press_buttons - First observed
ppsspp_read_range - First observed
ppsspp_read_string - First observed
ppsspp_read16 - First observed
ppsspp_read32 - First observed
ppsspp_read8 - First observed
ppsspp_reset - First observed
ppsspp_resume - First observed
ppsspp_screenshot - First observed
ppsspp_send_analog - First observed
ppsspp_step - First observed
ppsspp_write_range - First observed
ppsspp_write16 - First observed
ppsspp_write32 - First observed
ppsspp_write8
TDQS
Each tool targets a distinct operation: memory reads/writes are separated by size (8/16/32, range, string), breakpoints have add/list/remove, input has button press/hold and analog, and emulation control has pause/resume/step/reset. No two tools overlap in purpose.
All tools follow a consistent `ppsspp_verb_noun` pattern with snake_case. Verbs like read, write, breakpoint, press, send, pause, resume, step, reset, ping, get, and screenshot are used uniformly. The specificity (e.g., read8, read16) follows a clear convention.
23 tools is slightly above the typical 3-15 range, but for an emulator debugger, each tool serves a distinct purpose (memory access sizes, breakpoints, input, state control). The count is justified and not excessive for the domain.
The tool set covers the core debugging workflow: memory inspection/modification, breakpoints, input simulation, and emulation control. Missing features like savestate management (not available via WebSocket) and direct register writes are minor gaps, but the set is well-scoped for RE and HLE tasks.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Hosted MCP server connecting claude.ai, ChatGPT and other AI apps to your own computer
Augments MCP Server - A comprehensive framework documentation provider for Claude Code
- QuallaaOAuthcom.quallaa
Talk to your public-facing AI from any MCP client — Claude, ChatGPT, Cursor, Cline, Windsurf.
MCP server for progressive tool usage at any scale (see https://klavis.ai)
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceA minimal WebSocket-based MCP server implementation that enables modern tool integrations with VSCode, Claude, and other applications.10ISC
- AlicenseNot gradedqualityCmaintenanceAn MCP Server for Chrome DevTools, following the Chrome DevTools Protocol. Integrates with Claude Desktop and Claude Code.307MIT
- AlicenseAqualityCmaintenanceMCP server for PCSX2 and other emulators that speak the PINE protocol. Read and write 8/16/32/64-bit emulator memory and control save states for PlayStation-family emulation.14262MIT
- AlicenseAqualityCmaintenanceMCP server for RetroArch via its Network Control Interface. Drive any libretro core — read/write memory, save/load state, screenshot, pause/frame-advance/reset — across NES, SNES, Genesis, N64, GBA, PS1 and more.17243MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/dmang-dev/mcp-ppsspp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server