PCSX2 MCP
The PCSX2 MCP server lets you control, debug, and automate the PCSX2 PlayStation 2 emulator through an MCP interface, exposing emulator internals as callable tools.
Connection & Status: Connect/disconnect to EE or IOP GDB servers; check connection status; query VM status, game title, serial, and CRCs.
Emulator Control: Pause, resume, single-step, reset the VM; advance frames; launch, list, and terminate PCSX2 processes.
Memory Operations: Read/write guest memory (hex, base64, ASCII, u32 array); read null-terminated strings; write from local files; dump regions; search byte patterns with wildcards; snapshot and diff memory ranges.
Register Operations: Read/write all guest registers (EE or IOP) by name or index; set the program counter directly.
Debugging: Disassemble guest instructions; evaluate debugger expressions; list BIOS threads, IOP modules, and stack backtraces; set/remove/list execution breakpoints and memory watchpoints (exec, read, write, RW), including conditional and temporary breakpoints.
Savestates & Rewind: Save/load savestate slots or explicit file paths; wait for async compression; start/stop a rewind ring buffer; step back through captures.
Cheats & Patches: Reload patch files from disk; list, enable, or disable individual cheats; toggle the global cheats switch.
Tracing: Take single timestamped register/memory samples or run background periodic traces to JSONL files.
Screenshots & Input: Capture screenshots even when the window is inactive/minimized; send keyboard/XInput/native input without activating the window.
Logs: Resolve the PCSX2 log file path; tail, filter, and retrieve recent error/warning log entries.
Configuration: Auto-configure GDB server settings in PCSX2.ini. Warns about destructive operations; local-only binding recommended.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@PCSX2 MCP connect to EE and get registers"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
PCSX2 MCP
ENGLISH | KOREAN
PCSX2 MCP is a Windows-focused Model Context Protocol server for controlling and debugging PCSX2 through its EE and IOP GDB Remote Serial Protocol endpoints. It exposes emulator control, memory inspection, debugger operations, tracing, savestates, cheats, screenshots, process management, and log access as MCP tools.
Basic register and memory operations require PCSX2's GDB servers. Extended tools such as emulator commands, debugger expressions, cheat control, screenshots, and savestate automation require a compatible PCSX2 build that implements theqPcsx2 commands used by this server.
Features
Connect to the EE or IOP GDB server and inspect connection status.
Pause, resume, single-step, reset, and advance frames.
Read and write registers, memory, strings, and files.
Dump memory regions, search byte patterns with wildcards, and compare snapshots.
Disassemble code, evaluate debugger expressions, and inspect threads, modules, and backtraces.
Add, remove, list, and clear breakpoints and watchpoints.
Save and load states, capture screenshots, and maintain a rewind ring buffer.
Reload patches and list, enable, or disable cheats at runtime.
Record periodic register and memory traces to JSONL.
Launch, list, and terminate PCSX2 processes.
Locate, tail, and filter PCSX2 logs.
Capture and control PCSX2 while its window remains inactive.
Use native
qPcsx2input, an optional virtual XInput controller, or targeted keyboard messages.
Requirements
Windows
Python 3.10 or newer
PCSX2 with the EE/IOP GDB servers enabled
An MCP client that supports local stdio servers
The default endpoints are:
Target | Host | Port |
EE |
|
|
IOP |
|
|
Installation
Open PowerShell in the repository directory:
python -m pip install -e .Keyboard input has no extra dependency. Optional XInput support uses
vgamepad and an installed ViGEmBus driver:
python -m pip install -e ".[xinput]"Run the server directly:
python -m pcsx2_mcpThe server communicates over stdio, so it normally runs under an MCP client rather than in a standalone interactive terminal.
Codex MCP configuration
To register PCSX2 MCP as a local stdio server in Codex, add the following blocks to %USERPROFILE%\.codex\config.toml. Replace C:\path\to\PCSX2_MCP with the path where you cloned this repository.
[mcp_servers.pcsx2]
command = "python"
args = ["-m", "pcsx2_mcp"]
cwd = 'C:\path\to\PCSX2_MCP'
[mcp_servers.pcsx2.env]
PYTHONPATH = 'C:\path\to\PCSX2_MCP\src'The python command must resolve to the interpreter where the project dependencies were installed. Restart Codex after changing config.toml.
PCSX2 setup
Start the MCP server in your client.
Run the
configure_gdb_settingstool once, or enable the EE and IOP GDB servers manually in the compatible PCSX2 configuration.Restart PCSX2 after changing the GDB settings.
Start a game, then call
connectwithtarget="ee"ortarget="iop".Call
statusorpcsx2_statusbefore using debugging and automation tools.
Background capture and input
take_screenshot uses the custom qPcsx2 screenshot_file command when the
GDB client is connected, so it captures the emulator render buffer without
touching the desktop focus. When disconnected, PNG requests fall back to
capture_pcsx2_window, which uses PrintWindow without restoring or
activating the window.
configure_background_input preserves existing Pad 1 bindings and adds
keyboard plus XInput mappings. Input tools accept backend="auto",
"native", "keyboard", or "xinput". auto uses an already-connected
EE or IOP qPcsx2 client first, then tries optional XInput, and finally falls
back to targeted PostMessageW keyboard events when vgamepad or its driver
is unavailable.
PCSX2's top-level Qt key filter may request activation. The MCP keyboard backend therefore sends only to a verified native render child. If that child cannot be identified, it returns an error instead of sending to the top-level window.
Typical workflow
Use
launch_pcsx2or start PCSX2 yourself.Use
connectfor the required target.Inspect state with
get_registers,read_memory,disassemble, orevaluate.Control execution with
pause,step,resume, breakpoints, or watchpoints.Call
disconnectbefore shutting down PCSX2.
Safety
This server can modify emulated memory, overwrite memory from a file, change registers, load savestates, control cheats, and terminate PCSX2 processes. Keep it bound to local MCP clients and review tool arguments before approving destructive operations.
Generated logs, screenshots, traces, rewind captures, virtual environments, bytecode, and build outputs are excluded from version control.
License
This project is distributed under the terms in LICENSE.
Available Tools
40 toolsclear_debug_breakpointsC
Clear all PCSX2 debugger breakpoints and watchpoints.
Inputs: target.
connectB
Connect to PCSX2's EE or IOP GDB server. PCSX2 pauses the VM on connect.
Inputs: host, port, target, auto_resume.
disassembleC
Disassemble guest instructions using PCSX2's native debugger disassembler.
Inputs: address (required), count, target.
disconnectC
Disconnect one GDB target.
Inputs: target.
dump_memoryC
Dump guest memory to a local file.
Inputs: length (required), address (required), file_path (required), target.
dump_regionB
Dump a named memory region. Use list_memory_regions for names.
Inputs: region (required), file_path (required).
evaluateC
Evaluate a PCSX2 debugger expression.
Inputs: expression (required), target.
find_patternC
Search guest memory for a hex pattern. Use ?? as a wildcard byte.
Inputs: pattern (required), end, start, target, +2 more.
frame_advanceC
Advance the VM by one or more frames and pause.
Inputs: frames, target.
get_debug_registersC
Return full-width PCSX2 debug registers through qPcsx2.
Inputs: target, category.
get_registersC
Return guest registers for EE or IOP.
Inputs: target.
list_breakpoint_kindsA
Return accepted breakpoint kind names and RSP types.
Inputs: no named parameters.
list_debug_breakpointsC
List PCSX2 debugger breakpoints and conditions.
Inputs: target.
list_memory_regionsA
List predefined dump regions.
Inputs: no named parameters.
list_tracesB
List active background traces.
Inputs: no named parameters.
list_watchpointsC
List PCSX2 debugger memory watchpoints.
Inputs: target.
load_state_fileB
Load a savestate from an explicit file path.
Inputs: file_path (required), target.
load_state_slotC
Load a PCSX2 savestate slot.
Inputs: slot (required), backup, target.
memory_diffA
Snapshot and diff a guest memory range. First call saves, second call compares and clears.
Inputs: length (required), address (required), name, reset, +1 more.
overwrite_memory_from_fileB
Overwrite guest memory with bytes read from a local file.
Inputs: address (required), file_path (required), target, max_bytes.
read_memoryC
Read guest memory as hex, base64, ascii, hexdump, or u32_array.
Inputs: length (required), address (required), target, as_format.
read_stringC
Read a null-terminated guest string.
Inputs: address (required), target, encoding, max_length.
remove_breakpointC
Remove a breakpoint or watchpoint.
Inputs: address (required), kind, size, target.
remove_debug_breakpointD
Remove a PCSX2 debugger breakpoint.
Inputs: address (required), target.
remove_watchpointC
Remove a PCSX2 debugger memory watchpoint.
Inputs: address (required), size, target.
resetC
Request a VM reset.
Inputs: target.
resumeC
Resume the VM.
Inputs: target.
sample_traceC
Take one timestamped register/memory sample.
Inputs: target, registers, memory_ranges.
save_state_slotC
Save a PCSX2 savestate slot synchronously.
Inputs: slot (required), target.
set_breakpointC
Set an exec/read/write/rw breakpoint or watchpoint.
Inputs: address (required), kind, size, target.
set_watchpointC
Set a PCSX2 debugger memory watchpoint.
Inputs: address (required), kind, size, action, +2 more.
start_rewind_captureB
Start periodic savestate capture into a ring buffer for rewind.
Inputs: slots, target, directory, rewind_id, +1 more.
start_traceC
Start background register/memory tracing, optionally writing JSONL records.
Inputs: trace_id (required), target, registers, interval_ms, +3 more.
statusA
Return MCP-side connection status for both EE and IOP.
Inputs: no named parameters.
stepC
Single-step one guest instruction and stop again.
Inputs: target.
take_screenshotB
Save the current PCSX2 render frame to an image file, even if the emulator window is inactive or minimized.
Inputs: target, file_path.
wait_savestate_flushC
Wait until async savestate compression has flushed.
Inputs: target.
write_debug_registerC
Write a full-width PCSX2 debug register by category and index.
Inputs: index (required), value (required), category (required), target.
write_memoryC
Overwrite guest memory with hex bytes.
Inputs: address (required), data_hex (required), target.
write_registerC
Overwrite one register by name or numeric index.
Inputs: value (required), register (required), target.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 40 tools
There is noticeable overlap between breakpoint and watchpoint tools, with two sets (regular and debug) that could confuse. Tools like set_breakpoint and set_watchpoint have similar purposes, and distinctions are not always clear. Most other tools are well-separated.
Most tools follow a verb_noun pattern with underscores (e.g., read_memory, set_breakpoint). However, a few tools use standalone nouns (status) or noun_verb (memory_diff), and verbs vary (get vs read, set vs write). Overall consistent but with minor deviations.
With 40 tools, the surface is quite large. While the PCSX2 domain is complex, several groups (e.g., 9 breakpoint tools, 9 memory tools) could potentially be consolidated. The count is on the high side but still manageable for a full-featured debugger server.
The tools cover connection, control, savestates, registers, disassembly, memory, breakpoints, tracing, and rewind, which is comprehensive. However, a tool to list active non-debug breakpoints is missing, and there is no way to query emulation state (paused/running). Minor gaps but overall solid.
Maintenance
Related MCP Connectors
An MCP server that measures MCP client behaviour and converts EBCDIC to ASCII, which nobody needs.
An MCP server that provides read access to your cloud storage providers, bank accounts and more.
A MCP server built for developers enabling Git based project management with project and personal…
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceAn MCP server for debugging Windows processes using WinDbg and CDB. It enables users to attach to processes, manage breakpoints, inspect memory, and control execution flow through natural language.2-
- AlicenseBqualityDmaintenanceAn MCP server providing direct access to gdb-multiarch for debugging Nintendo Switch executables on Yuzu or hardware via a GDB stub. It features specialized tools for offset-based breakpoints, instruction patching, and frame-pointer backtraces relative to the game's base address.333MIT
- AlicenseAqualityBmaintenanceMCP 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.1431 npm3MIT
- AlicenseNot gradedqualityDmaintenanceMCP server for remote debugging with gdbserver, offering full debugging capabilities including breakpoint control, stepping, memory inspection, and process management.30 PyPIMIT