{"name":"io.github.AstralVoidZ/ppsspp-dfx-mcp","slug":"astralvoidz-ppsspp-dfx-mcp","title":"PPSSPP Debug MCP Server","description":"Engineering-grade MCP debugging SDK turning the PPSSPP PSP emulator into an AI-debuggable target.","url":"https://mcp.market/server/astralvoidz-ppsspp-dfx-mcp","rating":null,"grade":"C","score":65,"certified":false,"status":"active","category":"other","tags":[],"presence":{"score":13,"stars":null,"forks":null,"downloads_week":375,"last_push_at":null,"license":"MIT"},"uptime":null,"claimed":false,"transport":"pypi","callable_via_gateway":false,"default_price_micros":0,"repository":null,"website":null,"version":"0.1.4","remotes":[],"packages":[{"registryType":"pypi","identifier":"ppsspp-dfx-mcp","version":"0.1.4","transport":{"type":"stdio"}}],"tools":[{"name":"_lifespan","description":"Startup: spawn idle GC + load manifest + register exposed scripts.","write_action":false,"price_micros":0,"input_schema":null},{"name":"ppsspp_analyze_log","description":"PURPOSE: Filter a PPSSPP log file for ERROR / WARNING / CRASH lines.","write_action":false,"price_micros":0,"input_schema":null},{"name":"ppsspp_assemble","description":"PURPOSE: Assemble MIPS instruction(s) and write the resulting bytes to memory.","write_action":false,"price_micros":0,"input_schema":null},{"name":"ppsspp_batch_cancel","description":"PURPOSE: Request cancellation of a queued or running background batch job.","write_action":true,"price_micros":0,"input_schema":null},{"name":"ppsspp_batch_list","description":"PURPOSE: Survey all background batch jobs currently retained by the registry — the list companion to ppsspp_batch_status / ppsspp_batch_cancel.","write_action":false,"price_micros":0,"input_schema":null},{"name":"ppsspp_batch_status","description":"PURPOSE: Poll the state and progress of a background batch job without touching the session.","write_action":false,"price_micros":0,"input_schema":null},{"name":"ppsspp_batch_step","description":"","write_action":false,"price_micros":0,"input_schema":null},{"name":"ppsspp_breakpoint","description":"","write_action":false,"price_micros":0,"input_schema":null},{"name":"ppsspp_convert_address","description":"PURPOSE: Convert an address between IDA and PPSSPP address spaces (offset ±0x08804000).","write_action":false,"price_micros":0,"input_schema":null},{"name":"ppsspp_disassemble","description":"PURPOSE: Disassemble N MIPS instructions at a given address.","write_action":false,"price_micros":0,"input_schema":null},{"name":"ppsspp_dump_clut","description":"PURPOSE: Dump the currently-bound CLUT palette as an image plus metadata.","write_action":false,"price_micros":0,"input_schema":null},{"name":"ppsspp_dump_texture","description":"PURPOSE: Dump the currently-bound GPU texture as an image plus metadata.","write_action":false,"price_micros":0,"input_schema":null},{"name":"ppsspp_evaluate","description":"PURPOSE: Evaluate a debugger expression (register names, hex literals, simple arithmetic).","write_action":false,"price_micros":0,"input_schema":null},{"name":"ppsspp_frame_snapshot","description":"PURPOSE: One-call paused scene snapshot — pause (unless already paused), capture pc + registers + optional named probes, then resume.","write_action":false,"price_micros":0,"input_schema":null},{"name":"ppsspp_get_pc","description":"PURPOSE: Safely read the current Program Counter.","write_action":false,"price_micros":0,"input_schema":null},{"name":"ppsspp_gpu_record","description":"PURPOSE: Capture the next rendered frame's GE command stream as a binary dump file.","write_action":false,"price_micros":0,"input_schema":null},{"name":"ppsspp_gpu_stats","description":"PURPOSE: Query GPU counters — fps, vblanks per second, timing info.","write_action":false,"price_micros":0,"input_schema":null},{"name":"ppsspp_health","description":"PURPOSE: Probe MCP server liveness and readiness without contacting PPSSPP. Use this before any session-dependent tool to verify the server is up.","write_action":false,"price_micros":0,"input_schema":null},{"name":"ppsspp_hold_buttons","description":"PURPOSE: Hold a combination of PSP buttons until a subsequent call changes the state.","write_action":false,"price_micros":0,"input_schema":null},{"name":"ppsspp_list_addresses","description":"PURPOSE: List the project's known address constants from addresses.yaml — the single source of truth; never guess hex addresses.","write_action":false,"price_micros":0,"input_schema":null},{"name":"ppsspp_list_scripts","description":"PURPOSE: List diagnostic scripts declared in .ppsspp-dfx/config/scripts.manifest.yaml.","write_action":false,"price_micros":0,"input_schema":null},{"name":"ppsspp_memory_info_search","description":"PURPOSE: Search PPSSPP's memory-tracking metadata for allocation/texture tags matching a string.","write_action":false,"price_micros":0,"input_schema":null},{"name":"ppsspp_memory_map","description":"PURPOSE: Get the PPSSPP memory region map (user / kernel / VRAM ranges).","write_action":false,"price_micros":0,"input_schema":null},{"name":"ppsspp_press_button","description":"PURPOSE: Simulate a single PSP button press for a duration.","write_action":false,"price_micros":0,"input_schema":null},{"name":"ppsspp_query","description":"","write_action":false,"price_micros":0,"input_schema":null},{"name":"ppsspp_read_memory","description":"","write_action":false,"price_micros":0,"input_schema":null},{"name":"ppsspp_reload_scripts","description":"PURPOSE: Manually reload the script manifest YAML and clear the script module cache.","write_action":false,"price_micros":0,"input_schema":null},{"name":"ppsspp_replay","description":"","write_action":false,"price_micros":0,"input_schema":null},{"name":"ppsspp_run_script","description":"PURPOSE: Invoke a manifest-registered diagnostic script by name with validated input.","write_action":true,"price_micros":0,"input_schema":null},{"name":"ppsspp_screenshot","description":"PURPOSE: Capture the framebuffer as an image (ImageContent) plus metadata.","write_action":false,"price_micros":0,"input_schema":null},{"name":"ppsspp_search_disasm","description":"PURPOSE: Loop-search disassembly for a substring, collecting matching instructions with context.","write_action":false,"price_micros":0,"input_schema":null},{"name":"ppsspp_send_analog","description":"PURPOSE: Send an analog stick position (x, y in [0, 255], 128 = center).","write_action":true,"price_micros":0,"input_schema":null},{"name":"ppsspp_session","description":"","write_action":false,"price_micros":0,"input_schema":null},{"name":"ppsspp_session_list","description":"PURPOSE: List all active PPSSPP sessions.","write_action":false,"price_micros":0,"input_schema":null},{"name":"ppsspp_smoke_test","description":"PURPOSE: Four-point session health check — iso_loaded, cpu_running, ws_connected, game_mode_valid.","write_action":false,"price_micros":0,"input_schema":null},{"name":"ppsspp_state_observer","description":"","write_action":false,"price_micros":0,"input_schema":null},{"name":"ppsspp_step","description":"PURPOSE: Aggregate CPU step + run-state control (into / over / out, pause, resume, reset, run_until, next_hle).","write_action":false,"price_micros":0,"input_schema":null},{"name":"ppsspp_trace_memory_access","description":"PURPOSE: One-call answer to 'what code reads/writes this address' — arm a memory breakpoint, wait for the hit, capture pc (+registers/backtrace), remove the breakpoint, and resume.","write_action":false,"price_micros":0,"input_schema":null},{"name":"ppsspp_wait_breakpoint","description":"PURPOSE: Block until a breakpoint hit (any kind) — replaces polling gpu_stats errors as a hit probe.","write_action":false,"price_micros":0,"input_schema":null},{"name":"ppsspp_wait_frames","description":"PURPOSE: Wait N frames (wall-clock sleep at 60 FPS by default) to let the emulator advance.","write_action":false,"price_micros":0,"input_schema":null},{"name":"ppsspp_write_memory","description":"PURPOSE: Write u8/u16/u32 or raw bytes to memory.","write_action":true,"price_micros":0,"input_schema":null},{"name":"ppsspp_write_register","description":"PURPOSE: Set a CPU register (GPR/FPU/VFPU names, plus pc/hi/lo).","write_action":true,"price_micros":0,"input_schema":null},{"name":"register_all_tools","description":"Import every static tool module, triggering decorator registration.","write_action":false,"price_micros":0,"input_schema":null}],"scan":{"score":65,"grade":"C","scanned_at":"2026-09-19T21:13:47.314Z","report":{"scannerVersion":"0.1.8","scannedAt":"2026-09-19T21:13:47.322Z","components":{"code":{"score":25,"max":25,"notes":["117 source files scanned"]},"reliability":{"score":-1,"max":20,"notes":["no gateway calls yet and no remote to probe"]},"poisoning":{"score":-1,"max":15,"notes":["tools not inspected (local package is not executed); not counted"]},"auth":{"score":12,"max":15,"notes":["local package, no credentials required"]},"maintenance":{"score":3,"max":15,"notes":["no repository listed"]},"identity":{"score":2,"max":10,"notes":["no repository or website to verify"]}},"findings":[{"id":"maint.no-repo","severity":"low","component":"maintenance","title":"No source repository listed"}],"inputs":{"packages":[{"registryType":"pypi","identifier":"ppsspp-dfx-mcp","version":"0.1.4","found":true,"weeklyDownloads":375,"license":"MIT","dependencyCount":8,"publishedAt":"2026-09-17T20:59:35.542823Z"}],"repo":{"found":false},"icon":{"url":null,"source":"none"},"presence":{"stars":null,"forks":null,"downloadsWeek":375,"license":"MIT","lastPushAt":null,"score":13}}}},"grade_history":[{"kind":"restore","fromGrade":"D","toGrade":"C","reason":"score 65: No source repository listed","createdAt":"2026-09-19T21:13:47.873Z"},{"kind":"downgrade","fromGrade":"C","toGrade":"D","reason":"score 46: Whole environment serialized (possible credential exfil); No source repository listed","createdAt":"2026-09-19T00:29:43.471Z"}],"reviews":[]}