Skip to main content

PS5 Remote Play MCP

An MCP server that lets an LLM agent (Claude Code, Codex, any MCP client) see the screen of a stock PlayStation 5 and drive it like a gamepad. It uses Sony's official Remote Play protocol over your local network: no jailbreak and no capture card.

Good for menus, settings, launching games, turn-based and slow-paced games, and "what's on screen right now?". Not for real-time action: one frame → model → button round trip takes seconds.

Claude Code ──stdio──▶ ps5-remoteplay-mcp ──HTTP (127.0.0.1)──▶ daemon ──Remote Play (LAN)──▶ PS5

A long-lived daemon owns the single Remote Play session. The thin MCP server is started and restarted by your agent and talks to the daemon. Connecting to the console takes a few seconds, so the daemon survives agent restarts and keeps the session warm. It starts automatically on the first tool call.

Quick start

You need a PS5 on the same network as your computer (Ethernet or Wi-Fi) and uv. Tested on Windows 11; macOS and Linux are expected to work but untested.

0. Install uv (once; skip if uv --version works), then open a new terminal:

# Windows (PowerShell)
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
# macOS / Linux
curl -LsSf https://astral.sh/uv/install.sh | sh

1. On the PS5: Settings → System → Remote Play → Enable Remote Play.

2. Add the server to Claude Code — one command, no IP address needed:

claude mcp add --transport stdio --scope user ps5 -- uvx ps5-remoteplay-mcp

No claude command in your terminal (you use Claude Code only inside VS Code)? Ask Claude instead: "Add a user-scope MCP server named ps5 that runs uvx ps5-remoteplay-mcp." Then restart Claude Code.

3. Ask the agent: "Connect to my PS5." It finds the console on your network and opens a sign-in window:

  1. Sign in to PSN on Sony's page in that window.
  2. On the PS5 open Settings → System → Remote Play → Link Device and type the 8-digit PIN into the window.

Done. From now on just ask: "What's on the PS5 screen?"

Tip: turn on a password for purchases in PlayStation Store. The agent is told never to confirm purchases, but it can physically navigate there.

Other ways to connect

Other MCP clients — Claude Desktop (claude_desktop_config.json), Cursor and others (standard mcpServers JSON):

{
  "mcpServers": {
    "ps5": { "command": "uvx", "args": ["ps5-remoteplay-mcp"] }
  }
}

Codex (~/.codex/config.toml):

[mcp_servers.ps5]
command = "uvx"
args = ["ps5-remoteplay-mcp"]

Latest version from GitHub instead of PyPI: replace uvx ps5-remoteplay-mcp with uvx --from git+https://github.com/khodossss/ps5-remoteplay-mcp ps5-remoteplay-mcp.

Set up from a terminal instead of through the agent: uvx ps5-remoteplay-mcp setup.

Updating

uvx keeps using the version it downloaded first. To move to the newest release, run once and restart your agent:

uvx ps5-remoteplay-mcp@latest stop

This fetches the latest version and stops the running daemon, so the next tool call starts the new one.

Optional

  • To let the agent wake the console from rest mode: Settings → System → Power Saving → Features Available in Rest Mode → turn on Stay Connected to the Internet and Enable Turning On PS5 from Network.
  • Several consoles on the network, or discovery blocked: pin one with PS5_HOST, e.g. claude mcp add --env PS5_HOST=192.168.1.50 --transport stdio ps5 -- uvx ps5-remoteplay-mcp. The console's IP is under Settings → System → System Software → Console Information.

Usage

Talk to your agent in plain language:

  • "What's on the PS5 screen right now?"
  • "Open Settings and tell me the system software version, then go back to the home screen."
  • "Launch Astro Bot and describe its main menu."
  • "In the current menu, move down to Display and Video and open it."

The agent looks at a screenshot, presses buttons and looks again. It typically passes snapshot_after_ms so a single tool call returns the screen after the input, with screen_changed saying whether anything moved.

Tools

Tool Arguments What it does
setup redirect_url?, pin? (chat fallback only) First run: find the PS5 and link this computer (sign-in window + PIN)
status — Console state (awake/standby), session, fps, age of the latest frame, firmware
wait_ready timeout_s=30 Wait until the video stream is live again after a reconnect or stall
snapshot max_width=1024, quality=80 Current screen as a JPEG
press button, duration_ms=80 Tap a button
hold button, duration_ms (≤ 10 000) Hold a button, then release
stick side, x, y (-1..1; y=-1 is up), duration_ms Deflect a stick, then re-center
trigger side, value (0..1), duration_ms Analog L2/R2
sequence steps[] Several inputs in one call (press / hold / stick / trigger / wait)
release_all — Release every button, center the sticks, release the triggers
disconnect — End the Remote Play session and stop the daemon, handing the console back
wake — Wake the console from rest mode
standby confirm="yes" Put the console into rest mode
viewer show Open or close a window with the live picture on the user's computer. Closed by default; the agent opens it when you ask to see the screen

Every input tool (press … sequence) also takes snapshot_after_ms (return the screen that long after the input) and until_change (return as soon as the screen changes, waiting at most snapshot_after_ms).

Buttons: cross circle square triangle up down left right l1 r1 l2 r2 l3 r3 options create touchpad ps.

A sequence example:

[{"op": "press", "button": "down"}, {"op": "wait", "duration_ms": 400}, {"op": "press", "button": "cross"}]

CLI

The same package is a command-line tool: uvx ps5-remoteplay-mcp <command>. Installed with uv tool install ps5-remoteplay-mcp, it is also on your PATH as ps5-remoteplay-mcp and the short ps5rp.

setup                    # find the console and link this computer (window, or --no-gui for the terminal)
status                   # console + session state
snapshot -o screen.jpg   # save the current screen
press cross              # tap a button
latency                  # press-to-screen latency
view                     # watch the console picture in a window
daemon                   # run the daemon in the foreground with logs (--view opens the window)
stop                     # stop the daemon (releases all input first)

Configuration

All optional. Environment variables; CLI flags of the same name override them.

Variable Default Purpose
PS5_HOST discovered Console IP; by default the console is found on the LAN and remembered
PS5_USER first linked PSN user for the session
PS5_RESOLUTION / PS5_FPS 720p / 30 Stream quality (360p…1080p, 30/60)
PS5_QUALITY default Video bitrate: very_low … very_high. Lower it on weak Wi-Fi
PS5_DAEMON_ADDR 127.0.0.1:9395 Daemon API address (loopback only)
PS5_MAX_HOLD_MS 10000 Upper bound for any hold
PS5_BACKEND pyremoteplay fake runs without a console (for development)
PS5_VIEWER off 1: open the picture window whenever the daemon starts (otherwise the agent opens it on request, or run uvx ps5-remoteplay-mcp view). Closing it does not stop the session
PS5_IDLE_EXIT_S 600 The daemon closes the session after this long without calls or computer-gamepad activity; 0 = never
PS5_CONFIG_DIR ~/.config/ps5-remoteplay-mcp Where credentials, the saved console and the log live

Credentials live in ~/.config/ps5-remoteplay-mcp/profiles.json and never appear in logs or tool responses. The daemon log is ~/.config/ps5-remoteplay-mcp/daemon.log. A folder from an earlier version (~/.config/ps5-agent) is moved there automatically.

Playing alongside the agent

  • Gamepad on the computer (DualSense by USB or Bluetooth): it shares the daemon's session with the agent, and you take priority. Touching it interrupts the agent and drops its queued commands; the agent is refused until the gamepad has been neutral for two seconds. status reports gamepad and human_input.
  • Keep the daemon running while you play this way: disconnect would stop your input too. Unplugging the gamepad releases everything it held; after a session loss, let go of the gamepad before pressing again.
  • Controller connected to the PS5 itself: outside this arbitration. Ask the agent to disconnect (the disconnect tool) to hand the console back first.
  • Watch on the TV, or in a window on the computer: ask the agent to show the screen, or run uvx ps5-remoteplay-mcp view.

Safety and reliability

  • No stuck input. Everything is released on error, when the client disconnects, when the daemon stops, and when the session drops. A watchdog releases anything held past the cap. If the daemon is killed hard mid-hold, the console releases the input together with the session (verified on hardware).
  • One input queue. Two agents cannot press at the same time.
  • Computer-gamepad activity keeps the daemon alive while the human plays.
  • Reconnects with exponential backoff; status reports reconnecting honestly. If the console gets a new IP address, it is found again by its MAC address.
  • Stale and black frames are flagged. A frame older than 2 s, or a black frame (content blocked from Remote Play), comes with a text warning.
  • Wi-Fi: lost video packets are recovered with forward error correction (Cauchy Reed-Solomon). The network test measures the real MTU/RTT.
  • The daemon API listens on 127.0.0.1 only.

Measurements

PS5 firmware 26.06-14.10.00.03, Ethernet; host Windows 11.

Metric Value
Press → visible change on screen median 110–265 ms, depending on what changes on screen
Stream 1280×720 at ~30 fps
Video decoding ~28% of one CPU core
Session connect ~2 s
3% of video packets dropped artificially all losses recovered, 0 corrupt frames (46 in 12 s without FEC)

Known limitations

  • One Remote Play session per console. If someone else is connected through Remote Play, the daemon waits until that session ends.
  • After the daemon is killed, the console keeps the old session for ~30–40 s; the daemon reconnects by itself afterwards.
  • The console sometimes ignores a press during a screen-transition animation. The agent sees that on the next screenshot and presses again.
  • Analog L2/R2 and sticks are implemented per the protocol but not yet verified inside a game.
  • Forwarding a computer gamepad is not yet verified with a real DualSense over USB and Bluetooth.
  • No audio.
  • The sign-in window needs a desktop session (Edge WebView2 on Windows, WebKit on macOS, GTK or Qt on Linux). Without one, the agent walks you through sign-in in the chat instead.
  • macOS is untested.

Troubleshooting

Symptom Fix
no PS5 found on the local network The console must be on and on the same subnet; otherwise set PS5_HOST
status shows connecting, log says Another Remote Play session is connected to host Another device (or a just-killed daemon) holds the session. Wait 30–40 s or disconnect the other device
not_set_up Ask the agent to set up, or run uvx ps5-remoteplay-mcp setup
The console rejects the PIN PINs expire after a few minutes; open Link Device again for a fresh one
wake fails Turn on Enable Turning On PS5 from Network in rest-mode features
Garbled picture on Wi-Fi Set PS5_QUALITY=low or PS5_RESOLUTION=540p
Black screenshot with a warning The game or app blocks Remote Play video

Development

git clone https://github.com/khodossss/ps5-remoteplay-mcp.git
cd ps5-remoteplay-mcp
uv sync
uv run python tools/gate.py               # lint + format check + tests (one call)
PS5_HOST=<ip> uv run pytest -m hardware   # round trip against a real console
PS5_BACKEND=fake uv run ps5rp daemon      # run without a console

Tests run against a FakeBackend: frames come from a PNG folder or are synthetic, and right/left move focus. Hardware tests run only when PS5_HOST is set.

This section is all a contributor needs. AGENTS.md describes the maintainer's own agent workflow and can be skipped.

Credits

  • pyremoteplay by ktnrg45 — the Remote Play protocol implementation. A modified copy is vendored in src/ps5_remoteplay_mcp/vendor/pyremoteplay (changes listed in its NOTICE.md).
  • chiaki-ng — reference for protocol details; its FEC test vectors were used to validate the FEC implementation.
  • leolobato/ps5-mcp — inspiration for the tool set and the daemon + thin MCP architecture.

Not affiliated with Sony Interactive Entertainment. PlayStation and PS5 are trademarks of Sony Interactive Entertainment Inc.

License

GPL-3.0. The vendored pyremoteplay is GPL-3.0, so the whole project is distributed under the same license.

Metadata

Release files for ps5-remoteplay-mcp 0.2.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for ps5-remoteplay-mcp 0.2.1
File Size Uploaded Provenance Actions
ps5_remoteplay_mcp-0.2.1.tar.gz 316.4 kB Without provenance Details for ps5_remoteplay_mcp-0.2.1.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for ps5-remoteplay-mcp 0.2.1
File Interpreter ABI Platform Actions
ps5_remoteplay_mcp-0.2.1-py3-none-any.whl Python 3 none any Details for ps5_remoteplay_mcp-0.2.1-py3-none-any.whl

Total release size: 487.9 kB

Release files / ps5_remoteplay_mcp-0.2.1.tar.gz

Download URL ps5_remoteplay_mcp-0.2.1.tar.gz
Size 316.4 kB
Tags Source
SHA-256 checksum
How to use checksums
db49c0395ba8014d90750381f2685a6512e0b9edbb2e0764d8dd3a0098d3f7a2
BLAKE2b-256 checksum
How to use checksums
b7ca46364addb88f4d0a9306cca8f3aa636ef5cb4650f5d4d1ff05bd33768d8c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.13.6 {"installer":{"name":"uv","version":"0.13.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / ps5_remoteplay_mcp-0.2.1-py3-none-any.whl

Download URL ps5_remoteplay_mcp-0.2.1-py3-none-any.whl
Size 171.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
8717da2dc9d0b5bf2553a8799877332a15f4a7a2d482ebaede7006f64a73a051
BLAKE2b-256 checksum
How to use checksums
d7311618e8c6e23fc7010c0b680c4bcc45b71d355ca6f37b3b416cc3bc04b117
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.13.6 {"installer":{"name":"uv","version":"0.13.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Security for ps5-remoteplay-mcp 0.2.1

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.2.1 This release

2 release files No provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page