PS5 MCP
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| PS5_HOST | Yes | Your PS5's IP address. There is no default. | |
| PS5MCP_VIEW | No | Set to 1 to show the app window; by default the MCP server starts the app headless. | |
| PS5MCP_VIDEO | No | Video source for the server, e.g. synthetic or file:PATH. | |
| PS5MCP_STREAM_PORT | No | Port used to start the MJPEG stream server with the MCP server, e.g. 8090. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| snapshotB | Current PS5 screen as a JPEG (scaled to max_width; the source is 1920x1080). |
| pressB | Press and release one button (e.g. cross, circle, up, options). Optionally return a frame afterwards. |
| holdC | Hold several buttons together for duration_ms, then release them. |
| stickC | Deflect the left or right stick. x, y in -1..1 (left/up negative), then return to centre. |
| triggerC | Pull L2 or R2 (side: left/right) to value 0..1, then release. |
| touchpadC | Click the touchpad. Coordinates are sent but not yet delivered by padd (touch mapping is unknown). |
| sequenceA | Run timed states in order, then release everything. Each step: {"buttons": [...], "lx"/"ly"/"rx"/"ry": -1..1, "l2"/"r2": 0..1, "duration_ms": N}. A step with no inputs is a pause. Total duration is capped at 60 s. |
| record_startA | Start recording every input (agent tools and the keyboard in the viewer) as timed steps. |
| record_stopB | Stop recording and save it under |
| list_recordingsC | Saved recordings with their length. |
| play_recordingC | Replay a saved recording with its original timing (up to 5 minutes). |
| save_templateB | Save a region of the current frame (full 1920x1080 coordinates) as a template for wait_for. |
| list_templatesC | Saved template names. |
| wait_forB | Wait until a saved template appears on screen (or disappears, with gone=true). Matching is normalised cross-correlation over the whole frame; score 1.0 is identical. Returns where it was found, the score and the frame. |
| release_allA | Release every button and centre the sticks (agent and keyboard). |
| homeA | Go to the PS5 home screen (stands in for the PS button, which the pad cannot send). method: "suspend" (suspend the running game, as the PS button does), "system" or "shellcore". From system screens such as Settings, press circle instead. |
| close_appA | Close the running game or app (unsaved progress is lost). The console returns to the home screen. |
| launchA | Launch an installed title by id (e.g. PPSA01325). list_apps() shows what is installed. A game takes input only from the controller that launched it: launch it here to control it, because a game the user started with their own controller ignores this pad (and one launched here ignores theirs). |
| list_appsC | Installed title ids (from /user/app on the console). |
| uninstall_appsA | DESTRUCTIVE: uninstall installed titles by id (e.g. ["PPSA01325"]); their data is deleted. Only uninstall what the user asked for by name. For titles ShadowMountPlus manages, their source folder or image is deleted too (otherwise it installs them again). The console refuses while a game is running; close_app first. Removal finishes in the background after each request is accepted. Needs padd 1.3 or later. |
| installA | Install a file from this Mac onto the console. path: a .pkg package (uploaded through Web File Manager to /data/ps5-mcp/pkg, then installed; can take minutes) or an .elf payload (added to Payload Manager's library). run=True also starts the .elf once. |
| wait_for_changeB | Wait until the screen changes (mean luma difference >= threshold on a 32x18 grid); returns the new frame. |
| statusC | Payload link, payload version and counters, capture state and frame age. |
| show_viewerA | Open the live video window for a human (keyboard in that window drives the console too). |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 24 tools
Tools split cleanly into input emulation, recording, vision/template matching, and app management, with distinct purposes. Minor overlap between press/hold/sequence and between wait_for/wait_for_change, but the descriptions clearly differentiate each.
Almost entirely lowercase snake_case with predictable verb_noun or noun forms (record_start, list_recordings, save_template, wait_for_change, uninstall_apps). A few bare single-word names (snapshot, press, touchpad, home, status) deviate slightly but remain readable and consistent in style.
At 24 tools it sits at the heavy end, but the domain genuinely spans capture, input, recording, vision, and app lifecycle, so each tool earns its place. Slightly over-scoped but reasonable for the feature breadth.
Covers the full lifecycle: capture/view, input, record/replay, template-based waits, app install/launch/uninstall, and status. Minor gaps like no delete for templates or recordings, but agents can work around these.