ULTIMATE PCSX2 Debugger MCP Server — custom C++ DebugServer plugin + Pine IPC
The PCSX2 MCP server has reasonable structure with 6 tools covering a specialized domain (PS2 emulator debugging). However, it exhibits significant gaps in parameter descriptions, lacks comprehensive output schema documentation, and has weak error handling guidance. Tool naming follows a clear verb_noun pattern (pcsx2_*), which is good. The server shows domain expertise but falls short of production-grade LLM-friendly definitions. Most tools have descriptions, but they lack the depth needed to guide LLM selection and parameter binding. No tool annotations (readOnlyHint/destructiveHint) are present despite clear risk profiles.
Connect to PCSX2. Tries DebugServer (21512), then Pine (28011). DebugServer gives FULL access (128-bit regs, expressions, conditional BP, native disasm). Pine gives memory + game info.
Read PS2 memory. Returns hex dump.
Read ALL EE registers — FULL 128-bit values. Categories: GPR, CP0, FPR, FCR, VU0F, VU0I, GSPRIV. Requires DebugServer.
Read null-terminated string from PS2 memory.
Get connection + emulator status.
Write hex data to PS2 memory. USE WITH CAUTION.
pcsx2_status has trivial description ('Get connection + emulator status.') lacking context on what fields are returned, when to call it, or how it drives tool selection. Does not guide LLM to understand return structure (e.g., what 'connection status' means).
pcsx2_write_memory lacks error handling guidance. Description says 'USE WITH CAUTION' but provides no recovery instructions or validation rules for hex data format. LLM has no guidance on what happens if data is malformed, address is invalid, or write fails.
No output schemas documented for any tool. LLM cannot infer what fields pcsx2_read_memory returns (e.g., does it return just hex data, or hex + metadata?), or what pcsx2_status structure looks like. Forces LLM to guess or reason about responses blindly.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 52 | 2026-07-28+ | v2 |
No tool annotations (readOnlyHint, destructiveHint) present. pcsx2_write_memory is clearly destructive, pcsx2_read_* tools are read-only. These hints are required (per current spec 2026-07-28) to enable client-side safety checks and proper tool ordering in agent plans.
pcsx2_connect description lists modes (auto, debug, pine) but does not explain functional differences or when to use each. LLM cannot determine which mode suits a given debugging task (e.g., 'use debug mode if you need 128-bit registers and expressions').
pcsx2_read_registers 'category' parameter description uses numeric enum (-1 to 6) with inline abbreviations (GPR, CP0, FPR, etc.). LLM cannot infer which category to use without domain knowledge. Should be a string enum with self-documenting keys like 'all', 'gpr', 'cp0', 'fpr', 'fcr', 'vu0f', 'vu0i', 'gspriv'.
pcsx2_read_memory format parameter offers 'ascii' option but no validation or length limit documented. LLM has no guidance on when ascii mode fails (e.g., non-printable bytes) or what error it receives.
Parameter descriptions are sparse. E.g., pcsx2_connect 'debug_port' description is 'DebugServer port', does not explain port range, what happens if port is invalid, or retry guidance. pcsx2_read_memory 'address' description is 'Memory address to read', does not specify format (hex? string? integer?) or validation.