Skip to main content
Glama

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.

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-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 var

Default

Purpose

PPSSPP_HOST

127.0.0.1

WebSocket host to dial

PPSSPP_PORT

(required)

WebSocket port — see PPSSPP's debugger settings

Tools

Tool

Description

ppsspp_ping

Verify connectivity (returns version)

ppsspp_get_info

Title, disc ID, version, run state

ppsspp_read8 / ppsspp_read16 / ppsspp_read32

Read u8 / u16-LE / u32-LE from PSP memory

ppsspp_write8 / ppsspp_write16 / ppsspp_write32

Write to PSP memory

ppsspp_read_range

Read up to 64 KiB as a byte array

ppsspp_write_range

Write byte array to memory

ppsspp_read_string

Read null-terminated UTF-8 string

ppsspp_press_buttons

Set persistent PSP button state

ppsspp_press_button

Press a button for N frames + auto-release

ppsspp_send_analog

Set analog stick position

ppsspp_pause / ppsspp_resume

Pause / resume emulation

ppsspp_step

Step one MIPS instruction

ppsspp_reset

Soft-reset the loaded game

ppsspp_screenshot

Capture framebuffer as inline PNG

ppsspp_get_registers

Read all MIPS Allegrex registers

ppsspp_breakpoint_add / _remove / _list

CPU execution breakpoints

PSP memory map (cheat sheet)

Range

Region

0x00010000 - 0x00013FFF

Scratchpad (fast 16 KiB SRAM)

0x04000000 - 0x041FFFFF

VRAM (2 MiB GE video memory)

0x08000000 - 0x087FFFFF

Kernel RAM (8 MiB, low half)

0x08800000 - 0x09FFFFFF

User RAM (24 MiB, where most game state lives)

0xBC000000+

Hardware registers

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

PPSSPP_PORT must be set on startup

Set the env var to the port shown in PPSSPP's Developer Tools dialog

WebSocket connection failed

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

Invalid address on memory ops

Address is outside the PSP's mapped regions (user RAM is 0x08800000+, not 0x00000000+)

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 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 stateppsspp_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

Available Tools

23 tools
ppsspp_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'.

ParametersJSON Schema
NameRequiredDescriptionDefault
addressYesPSP execution address. Usually in user RAM (0x08800000+) or kernel RAM.

TDQS

A4.6/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.6/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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'.

ParametersJSON Schema
NameRequiredDescriptionDefault
addressYesPSP execution address of the breakpoint to remove.

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.9/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.6/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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'.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.9/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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)'.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A5/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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)'.

ParametersJSON Schema
NameRequiredDescriptionDefault
buttonYesPSP button name. Valid: cross, circle, triangle, square, up, down, left, right, start, select, ltrigger, rtrigger, home.
durationNoNumber of frames to hold the button before releasing (default 1).

TDQS

A4.9/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
buttonsYesMap 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

A4.9/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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)'.

ParametersJSON Schema
NameRequiredDescriptionDefault
addressYesPSP 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

A4.9/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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)'.

ParametersJSON Schema
NameRequiredDescriptionDefault
addressYesPSP 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

A4.9/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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)'.

ParametersJSON Schema
NameRequiredDescriptionDefault
addressYesPSP 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

A4.9/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
addressYesPSP 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.
sizeYesNumber of bytes to read (1-65536). Larger reads work but produce big responses.

TDQS

A4.5/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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"'.

ParametersJSON Schema
NameRequiredDescriptionDefault
addressYesPSP 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

A4.5/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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'.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.9/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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'.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
sourceNoWhich 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

A5/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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)'.

ParametersJSON Schema
NameRequiredDescriptionDefault
stickYesWhich analog stick to update. PSP only has 'left' natively; 'right' is reserved.
xYesHorizontal axis. -1 = full left, 0 = center, 1 = full right.
yYesVertical axis. -1 = full down, 0 = center, 1 = full up.

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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'.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.9/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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'.

ParametersJSON Schema
NameRequiredDescriptionDefault
addressYesPSP 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.
valueYes16-bit value (0-65535).

TDQS

A4.9/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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'.

ParametersJSON Schema
NameRequiredDescriptionDefault
addressYesPSP 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.
valueYes32-bit value (0-4294967295).

TDQS

A4.9/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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'.

ParametersJSON Schema
NameRequiredDescriptionDefault
addressYesPSP 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.
valueYesByte value (0-255).

TDQS

A4.6/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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'.

ParametersJSON Schema
NameRequiredDescriptionDefault
addressYesPSP 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.
bytesYesByte values (each 0-255), written sequentially from `address`.

TDQS

A4.6/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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. 1 tool updatev0.1.3
    • Changedppsspp_screenshot2 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / source
        Added 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"
        +}
  2. 23 tool updatesv0.1.0
    • First observedppsspp_breakpoint_add
    • First observedppsspp_breakpoint_list
    • First observedppsspp_breakpoint_remove
    • First observedppsspp_get_info
    • First observedppsspp_get_registers
    • First observedppsspp_pause
    • First observedppsspp_ping
    • First observedppsspp_press_button
    • First observedppsspp_press_buttons
    • First observedppsspp_read_range
    • First observedppsspp_read_string
    • First observedppsspp_read16
    • First observedppsspp_read32
    • First observedppsspp_read8
    • First observedppsspp_reset
    • First observedppsspp_resume
    • First observedppsspp_screenshot
    • First observedppsspp_send_analog
    • First observedppsspp_step
    • First observedppsspp_write_range
    • First observedppsspp_write16
    • First observedppsspp_write32
    • First observedppsspp_write8

TDQS

A4.6/5.0
Disambiguation5/5

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.

Naming Consistency5/5

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.

Tool Count4/5

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.

Completeness4/5

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

ActivityNo data
ResponsivenessResponsive

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

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    MCP 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.
    14
    26
    2
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    MCP 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.
    17
    24
    3
    MIT

Latest Blog Posts

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