Skip to main content
Glama

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
PS5_HOSTYesYour PS5's IP address. There is no default.
PS5MCP_FTPNoSet to 0 to remove the push and pull tools.
PS5MCP_VIEWNoSet to 1 to show the app window (headless by default).
PS5MCP_VIDEONoVideo source for development without a capture card, e.g. 'synthetic' or 'file:PATH'.
PS5MCP_FTP_PORTNozftpd's port (default 2120).2120
PS5MCP_SMP_PORTNoShadowMount's API port for native-title registration checks (default 10101).10101
PS5MCP_STREAM_PORTNoPort for the MJPEG stream server (default 8090).8090
PS5MCP_FTP_AUTOSTARTNoSet to 0 to never start zftpd.

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

CapabilityDetails
tools
{
  "listChanged": false
}
prompts
{
  "listChanged": false
}
resources
{
  "subscribe": false,
  "listChanged": false
}
experimental
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
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 name (letters, digits, - and _).

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 (refused while another agent has claimed it).

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.

pushA

Copy a file or folder from this Mac to the console (refused while another agent has claimed it).

Uses FTP through zftpd (port 2120), starting it from Payload Manager when it is not running; without zftpd, files go one at a time through Web File Manager. remote_path is absolute and names the destination itself; end it with "/" to copy into that folder. Unchanged files (same size, not newer here) are skipped and partial ones resumed; force=True sends everything again. Native executables/modules are chmodded to 0755 and remote execute bits verified, including skipped files (requires zftpd). Native title folders with a PS5 manifest also wait for ShadowMount registration through its LAN-accessible API (port 10101 or PS5MCP_SMP_PORT). Failed title uploads block launch in this server session until push succeeds.

pullA

Copy a file or folder from the console to this Mac.

Uses FTP through zftpd (port 2120), starting it from Payload Manager when it is not running (that start is refused while another agent has claimed the console); without zftpd, only single files can be copied. If local_path is an existing folder or ends with "/", the item is copied into it. Unchanged files are skipped and partial ones resumed; force=True copies everything again.

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.

claim_consoleA

Reserve the PS5 so other agents cannot drive it until you call release_console().

reason: what you are doing, shown to other agents and in the app window. If another agent holds the console you join the queue; with wait_s > 0 (up to 600) this waits for your turn. Calling it again keeps your place, so call it again to keep waiting. The claim lapses after idle_timeout_s (10..3600, default 600) without a tool call from you, and when this session or the app ends; status() shows claim.held_by_you. Looking (snapshot, status) needs no claim; humans at the keyboard always win.

release_consoleA

Give up your claim on the PS5 (or your place in the queue); the next agent in the queue gets it.

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

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

TDQS

B3.1/5.0

Scored across 28 tools

Disambiguation4/5

Tools are mostly distinct by resource and action: input primitives, capture, recordings, templates, app/file management, and console arbitration. Some overlap exists (hold vs sequence, home vs close_app, wait_for vs wait_for_change), but descriptions clarify boundaries well enough.

Naming Consistency4/5

Names are consistently lowercase snake_case, with clear verb_noun or verb patterns for compound tools such as list_apps, claim_console, and wait_for_change. A few single-word or noun names (home, status, snapshot) break the verb pattern slightly but remain readable and conventional.

Tool Count2/5

28 tools is high for an MCP server; many tools could be grouped by lifecycle area such as recordings, templates, file transfer, and console claims. Although the PS5 control domain is broad, the set is heavy and exceeds the 25-tool threshold for too many tools.

Completeness4/5

The surface covers core PS5 control lifecycle: input, screen capture/waiting, recording, templates, app launch/close/install/uninstall, file transfer, and console arbitration. Minor gaps remain, such as no delete operations for saved recordings/templates and no text-entry support, but these are workaround-able.

Maintenance

ActivityMaintained
ResponsivenessNo issues