ScrcpyCAUTION
MCP server for Android device control via ADB and scrcpy — gives AI agents vision and control over Android devices
Overview
From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.
MCP server that gives AI agents full vision and control over Android devices via ADB and scrcpy.
Connect any MCP-compatible AI assistant (Claude Code, OpenCode, Cursor, VS Code Copilot, etc.) to your Android device. The AI can see the screen, tap, swipe, type, launch apps, inspect UI elements, transfer files, and run shell commands.
[](https://lobehub.com/mcp/juancf-scrcpy-mcp)
Features
- 44 tools covering screenshots, input, apps, UI automation, shell, files, clipboard, video streaming, and audio streaming/recording
- scrcpy-first: uses scrcpy's binary control protocol for 10-50x faster input and near-instant screenshots (~33ms)
- ADB fallback: interaction tools work without scrcpy — slower but always available (the audio tools
start_audio_stream/audio_record_startand the video stream require scrcpy) - Image-returning screenshots: the AI actually sees the screen, not just a file path
- UI element finding:
ui_find_elementreturns tap coordinates so the AI can act on what it sees - Audio streaming & recording: stream device audio to host speakers (
start_audio_stream) or capture to.wav/.opus(audio_record_start) - Clipboard that works on Android 10+: scrcpy bypasses the restrictions that break ADB-only solutions
Prerequisites
Required
Optional (for enhanced performance)
7cb759112ac9OBSERVED · 2026-10-07Connect
Built from this server's own package name, version and transport as found in its source — not copied from anyone's documentation, so it cannot drift against a page we do not control.
claude mcp add scrcpy-mcp -- npx -y [email protected]
Exposed tools (44)
26 read · 16 write · 2 destructive. Blast radius: 2 tools can delete or overwrite — an agent that can be talked into calling a tool can be talked into calling this one.
| Tool | Risk | Description |
|---|---|---|
app_current | read | |
app_install | write | |
app_list | read | |
app_start | write | |
app_stop | write | |
app_uninstall | destructive | |
audio_capture | read | |
audio_record_start | write | |
audio_record_stop | write | |
clipboard_get | read | |
clipboard_set | write | |
collapse_panels | read | |
connect_wifi | read | |
device_info | read | |
device_list | read | |
disconnect_wifi | read | |
drag_drop | destructive | |
expand_notifications | read | |
expand_settings | read | |
file_list | read | |
file_pull | read | |
file_push | write | |
input_text | read | |
key_event | read | |
long_press | read | |
rotate_device | read | |
screen_off | read | |
screen_on | read | |
screen_record_start | write | |
screen_record_stop | write | |
screenshot | read | |
scroll | read | |
shell_exec | write | |
start_audio_stream | write | |
start_session | write | |
start_video_stream | write | |
stop_audio_stream | write | |
stop_session | write | |
stop_video_stream | write | |
swipe | read | |
tap | read | |
ui_dump | read | |
ui_find_element | read | |
version | read |
Trust audit
CAUTIONgrade B · trust 87/100 Install with care. The audit found things worth knowing before you trust its output.
| Layer | What it checks | Result |
|---|---|---|
| L0 | Provenance & inventory | PASS |
| L1 | Static analysis of the code | WARN |
| L2 | Instruction surface (what it tells the agent) | PASS |
| L3 | Class-specific surface | WARN |
| L4 | Behavioural (sandbox) | SKIPPED |
What the source does
- Filesystem
- declared (1 observation(s))
- Network
- declared (1 observation(s))
- Shell
- none-observed
- Dependencies
- not all pinned
- Secrets in source
- none-found
Findings (15)
- `scrcpy_start_video_stream` starts an HTTP MJPEG stream at `http://127.0.0.1:7183` and opens an ffplay viewer window on the host.
scrcpy_start_video_stream() // opens ffplay window at http://127.0.0.1:7183
return `http://127.0.0.1:${port}`app_uninstall, drag_drop
.coderabbit.yaml
.mcpbignore
import { resolveSerial, execAdbShell, execAdb } from "../../src/utils/adb.js"import { execAdbShell, resolveSerial } from "../../src/utils/adb.js"import { execAdb } from "../../src/utils/adb.js"@modelcontextprotocol/sdk, zod, @eslint/js, @types/node, eslint, tsup, tsx, typescript
| `version` | Report which scrcpy-server version the session pushes and where that version was resolved from. |
* **Version Mismatch**: The client must send the exact version of the `scrcpy-server` file it pushes. To guarantee that, the server and the version are never resolved separately — one scrcpy install i
│ ├── scrcpy.ts # scrcpy-server lifecycle, control socket, video stream, clipboard sync
| `src/utils/scrcpy.ts` | ~550 | **Core module**: scrcpy-server push/launch, control socket (binary protocol for input injection), video stream management (ffmpeg decode to frame buffer), clipboard sy
| `version` | — | Text (JSON) | Report the scrcpy-server version the session pushes, and which rung resolved it (env, binary, server-sibling, package manager, or built-in default) |
Gates applied: no_behavioural_pass.
7cb759112ac9full audit observations/trust-audit/mcp-server/juancf__scrcpy.json · Report an issue / request a re-scanAudit history
Every audit this server has had. A grade with a past is a grade somebody is still checking.
| Date | Source | Verdict | Grade | Score | Change |
|---|---|---|---|---|---|
| 2026-10-07 | 7cb759112ac9 | CAUTION | B | 87 | first audit |
Questions
What is the Scrcpy MCP server?
MCP server for Android device control via ADB and scrcpy — gives AI agents vision and control over Android devices
What tools does Scrcpy expose?
44 in total: 26 read-only, 16 that write, and 2 that can delete or overwrite (app_uninstall, drag_drop). Every one is listed on this page with its risk.
Is Scrcpy safe to connect to an agent?
With care. The audit graded it B (87/100) and found 15 things worth knowing before you trust this server, listed below with the exact line each was found on. Separately from the audit: 2 of its tools can destroy data, so scope the token you give it to what you actually need.
What credentials does Scrcpy need?
No credential environment variables were found in its source, so it appears to need none.
How does Scrcpy run?
It speaks stdio, so it runs as a local process your client starts. It is published on npm as scrcpy-mcp at 0.5.0.
How current is this page?
The grade is for one exact copy of the source (7cb759112ac9), read on 2026-10-07. The repository is watched and re-audited when it changes.