Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, email [email protected] and we’ll put it right.

io.github.JuanCF/scrcpy-mcp

NPM · SCRCPY-MCP · SCANNED AUG 3

MCP server for Android device control via ADB and scrcpy

Available components

+34 this week 80 Trust /100
Trust breakdown (6 categories)

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score →

Supply Chain Security87
  • No malware found by supply-chain analysis.Pass
  • Only part of the dependency tree could be resolved (111 of 115), so this covers what we could see, not the whole tree.Partial
  • No install/post-install scripts declared.Pass
  • Only part of the dependency tree could be resolved (111 of 115), so this covers what we could see, not the whole tree. View diagnostics → Partial
Provenance & Transparency97
  • Source repository is publicly reachable at the declared URL. View diagnostics → Pass
  • Cryptographically verified build provenance (signed, bound to JuanCF/scrcpy-mcp). View diagnostics → Pass
  • Clear OSI-approved license (MIT).Pass
  • Actively maintained (last published 28 days ago).Pass
  • Disclosure check failed: no security disclosure policy was found in the source repository. See how to fix → Fail
Schema Quality & AI Usability79
  • AI-judged instruction clarity (excellent).Pass
  • Tool/resource definitions use about 2179 tokens (~55/item across 39 items; 39 tools + 0 resources), lean.Pass
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management27
  • Stability observed for 8 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage100
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 100% of tool parameters carry a description.Pass
  • Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Capabilities100
  • Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Install

Add this component to your MCP client. Where a client-specific snippet is available, pick your client below and copy it straight into your config; otherwise use the connection detail shown.

npm · scrcpy-mcp

# add to Claude Code
claude mcp add juancf-scrcpy-mcp -- npx -y scrcpy-mcp
# add to Codex CLI
codex mcp add juancf-scrcpy-mcp -- npx -y scrcpy-mcp
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "juancf-scrcpy-mcp": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "scrcpy-mcp"
      ],
      "enabled": true
    }
  }
}
# add to OpenClaw
openclaw mcp add juancf-scrcpy-mcp --command npx --arg -y --arg scrcpy-mcp
# ~/.hermes/config.yaml
mcp_servers:
  juancf-scrcpy-mcp:
    command: "npx"
    args: ["-y", "scrcpy-mcp"]
// mcp.json
{
  "mcpServers": {
    "juancf-scrcpy-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "scrcpy-mcp"
      ]
    }
  }
}
Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 3 Aug 26 +4
    • Stability: unverified → 0.27 functional
  • 2 Aug 26 +55
    • Known CVEs: unverified → partial security
    • Install scripts: unverified → pass security
    • Provenance: unverified → pass security
    • Malware scan: unverified → pass security
    • Stability: Stability not yet verified: not enough scan history yet (needs a 30-day window). security
    • The attested source repository moved: JuanCF/scrcpy-mcp security
    • Security disclosure: fail → unverified functional
    • Tool coverage: 100 → unverified functional
    • Schema quality: unverified → excellent functional
    • License: unverified → pass functional
    • Dependency health: unverified → partial functional
    • Maintenance: unverified → pass functional
    • MCP protocol: unverified → pass functional
    • First check of Schema quality: unverified functional
    • Licence: MIT functional
  • 1 Aug 26 −7
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
  • 31 Jul 26 −18
    • Malware scan: pass → unverified security
  • 27 Jul 26 46

    First indexed and scored.

Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 3 Aug 2026 · Analysed npm/[email protected]

Provenance verified

Ecosystem: npm · Outcome: verified

Reason: verified

Source repo:
JuanCF/scrcpy-mcp
Certificate issuer:
https://token.actions.githubusercontent.com
Certificate SAN:
https://github.com/JuanCF/scrcpy-mcp/.github/workflows/publish.yml@refs/heads/main
Rekor log index:
2083979478
Predicate type:
https://slsa.dev/provenance/v1
Subject digest:
sha512:6308cb8ecea42012e70ae0441b6ad2f052f9b5d4696755943ea56d562f885fd18dabe19f28cfc6acfc999616a0c03323384bed7648172653cbead9646
Discovery method:
attestation_endpoint
Dependencies 111 packages

111 packages in the resolved dependency tree · 102 deprecated · 40 stale.

The dependency tree was only partially resolved, so these counts may be incomplete.

MCP tools — 39 exposed · ~2,179 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability.

Tool Tokens
app_current ~29

Get the currently foregrounded app package name and activity.

NameTypeReqDescription
serialstringDevice serial number
NameTypeReqDescription
activityyesForeground activity name, if resolvable
packageNamestringyesPackage name of the foreground app

No examples provided.

app_install ~48

Install an APK file on the device from the host machine.

NameTypeReqDescription
apkPathstringyesAbsolute path to the APK file on the host machine
serialstringDevice serial number
NameTypeReqDescription
messagestringyesInstall result or error output from adb
successbooleanyesWhether the APK installed successfully

No examples provided.

app_list ~79

List installed packages on the device. Optionally filter by name or restrict to system/third-party apps.

NameTypeReqDescription
filterstringFilter packages by name (partial match, case-insensitive)
serialstringDevice serial number
systembooleantrue = system apps only, false = third-party only, omit = all
NameTypeReqDescription
countintegeryesNumber of packages returned
packagesarrayyesInstalled package names

No examples provided.

app_start ~99

Launch an app on the device. Uses scrcpy START_APP when a session is active for faster launch, falls back to ADB `am start`. Supports force-stop prefix (+) to stop the app before launching.

NameTypeReqDescription
packageNamestringyesPackage name to launch (e.g., 'com.example.app'). Prefix with '+' to force-stop the app first (e.g., '+com.example.app')
serialstringDevice serial number
NameTypeReqDescription
messagestringyesHuman-readable description of the result
sourcestringMechanism used to launch the app (scrcpy or adb)
successbooleanyesWhether the app was launched

No examples provided.

app_stop ~47

Force-stop an app on the device.

NameTypeReqDescription
packageNamestringyesPackage name to force-stop (e.g., 'com.example.app')
serialstringDevice serial number
NameTypeReqDescription
messagestringyesHuman-readable description of the result
successbooleanyesWhether the app was force-stopped

No examples provided.

app_uninstall ~47

Uninstall an app from the device.

NameTypeReqDescription
packageNamestringyesPackage name to uninstall (e.g., 'com.example.app')
serialstringDevice serial number
NameTypeReqDescription
messagestringyesUninstall result or error output from adb
successbooleanyesWhether the app was uninstalled

No examples provided.

clipboard_get ~55

Get the current clipboard content from the device. Uses scrcpy GET_CLIPBOARD when a session is active (works on Android 10+), falls back to ADB clipboard commands.

NameTypeReqDescription
serialstringDevice serial number
NameTypeReqDescription
contentstringyesCurrent clipboard text on the device
sourcestringyesMechanism used to read the clipboard (scrcpy or adb)

No examples provided.

clipboard_set ~80

Set the clipboard content on the device. Uses scrcpy SET_CLIPBOARD when a session is active (with optional paste flag), falls back to ADB clipboard commands.

NameTypeReqDescription
pastebooleanAlso simulate paste action (scrcpy only)
serialstringDevice serial number
textstringyesText to set in the clipboard
NameTypeReqDescription
messagestringyesHuman-readable description of the result
sourcestringMechanism used to set the clipboard (scrcpy or adb)
successbooleanyesWhether the clipboard was set

No examples provided.

collapse_panels ~35

Collapse all open panels (notification, settings) (requires active scrcpy session)

NameTypeReqDescription
serialstringDevice serial number
NameTypeReqDescription
messagestringyesHuman-readable description of the result
successbooleanyesWhether the action succeeded

No examples provided.

connect_wifi ~55

Enable WiFi ADB and connect to the device wirelessly. Returns the connection address.

NameTypeReqDescription
portintegerTCP port for ADB connection (default: 5555)
serialstringDevice serial number
NameTypeReqDescription
addressstringThe host:port the device was connected on
messagestringyesHuman-readable description of the result
successbooleanyesWhether the wireless connection was established

No examples provided.

device_info ~48

Get detailed info about a device: model, Android version, screen size, SDK level, battery level

NameTypeReqDescription
serialstringDevice serial number. If omitted, uses the only connected device.
NameTypeReqDescription
androidVersionyesAndroid release version
batteryLevelyesBattery level percentage
brandyesDevice brand
manufactureryesDevice manufacturer
modelyesDevice model
screenHeightintegeryesScreen height in pixels
screenWidthintegeryesScreen width in pixels
sdkLevelyesAndroid SDK API level
serialstringyesResolved device serial

No examples provided.

device_list ~23

List all connected Android devices with their serial numbers, state, and model

Input schema present but exposes no named parameters.

NameTypeReqDescription
countintegeryesNumber of connected devices
devicesarrayyesConnected devices

No examples provided.

disconnect_wifi ~40

Disconnect from a wireless ADB device

NameTypeReqDescription
addressstringyesDevice address (e.g., 192.168.1.100:5555)
NameTypeReqDescription
messagestringyesHuman-readable description of the result
successbooleanyesWhether the action succeeded

No examples provided.

drag_drop ~109

Perform a drag and drop gesture from one point to another. Uses input draganddrop on Android 8.0+ (API 26), falls back to swipe on older versions.

NameTypeReqDescription
durationintegerDuration in milliseconds
endXintegeryesEnd X coordinate
endYintegeryesEnd Y coordinate
serialstringDevice serial number
startXintegeryesStart X coordinate
startYintegeryesStart Y coordinate
NameTypeReqDescription
messagestringyesHuman-readable description of the action performed
successbooleanyesWhether the input action was dispatched to the device

No examples provided.

expand_notifications ~29

Expand the notification panel (requires active scrcpy session)

NameTypeReqDescription
serialstringDevice serial number
NameTypeReqDescription
messagestringyesHuman-readable description of the result
successbooleanyesWhether the action succeeded

No examples provided.

expand_settings ~30

Expand the quick settings panel (requires active scrcpy session)

NameTypeReqDescription
serialstringDevice serial number
NameTypeReqDescription
messagestringyesHuman-readable description of the result
successbooleanyesWhether the action succeeded

No examples provided.

file_list ~47

List directory contents on the device.

NameTypeReqDescription
pathstringyesAbsolute path to the directory on the device (e.g., /sdcard/)
serialstringDevice serial number
NameTypeReqDescription
countintegeryesNumber of entries returned
entriesarrayyesDirectory entries
pathstringyesThe directory that was listed

No examples provided.

file_pull ~69

Pull a file from the device to the host machine.

NameTypeReqDescription
localPathstringyesDestination absolute path on the host machine
remotePathstringyesPath to the file on the device (e.g., /sdcard/myfile.txt)
serialstringDevice serial number
NameTypeReqDescription
messagestringyesadb pull result or a confirmation message
successbooleanyesWhether the file was pulled

No examples provided.

file_push ~69

Push a file from the host machine to the device.

NameTypeReqDescription
localPathstringyesAbsolute path to the file on the host machine
remotePathstringyesDestination path on the device (e.g., /sdcard/myfile.txt)
serialstringDevice serial number
NameTypeReqDescription
messagestringyesadb push result or a confirmation message
successbooleanyesWhether the file was pushed

No examples provided.

input_text ~37

Type text into the currently focused input field

NameTypeReqDescription
serialstringDevice serial number
textstringyesText to type
NameTypeReqDescription
messagestringyesHuman-readable description of the action performed
successbooleanyesWhether the input action was dispatched to the device

No examples provided.

key_event ~64

Send a key event to the device. Supports keycodes like HOME, BACK, ENTER, VOLUME_UP, etc.

NameTypeReqDescription
keycodeyesKeycode name (e.g., 'HOME', 'BACK') or numeric value
serialstringDevice serial number
NameTypeReqDescription
messagestringyesHuman-readable description of the action performed
successbooleanyesWhether the input action was dispatched to the device

No examples provided.

long_press ~55

Perform a long press at the specified coordinates

NameTypeReqDescription
durationintegerDuration in milliseconds
serialstringDevice serial number
xintegeryesX coordinate
yintegeryesY coordinate
NameTypeReqDescription
messagestringyesHuman-readable description of the action performed
successbooleanyesWhether the input action was dispatched to the device

No examples provided.

rotate_device ~29

Rotate the device screen (requires active scrcpy session)

NameTypeReqDescription
serialstringDevice serial number
NameTypeReqDescription
messagestringyesHuman-readable description of the result
successbooleanyesWhether the action succeeded

No examples provided.

screen_off ~24

Turn the device screen off

NameTypeReqDescription
serialstringDevice serial number
NameTypeReqDescription
messagestringyesHuman-readable description of the result
successbooleanyesWhether the action succeeded

No examples provided.

screen_on ~27

Wake the device screen (turn screen on)

NameTypeReqDescription
serialstringDevice serial number
NameTypeReqDescription
messagestringyesHuman-readable description of the result
successbooleanyesWhether the action succeeded

No examples provided.

screen_record_start ~68

Start recording the screen. Recording continues until screen_record_stop is called.

NameTypeReqDescription
durationnumberMax recording duration in seconds (optional, device limit usually 180s)
remotePathstringPath on device to save recording
serialstringDevice serial number
NameTypeReqDescription
messagestringyesHuman-readable status message
remotePathstringPath on the device where the recording is saved
successbooleanyesWhether recording was started

No examples provided.

screen_record_stop ~68

Stop screen recording and optionally pull the file to the host.

NameTypeReqDescription
localPathstringLocal path to save recording (only if pullToHost is true)
pullToHostbooleanPull the recording to the host machine
serialstringDevice serial number
NameTypeReqDescription
localPathstringHost path the recording was pulled to, if requested
messagestringyesHuman-readable status message
successbooleanyesWhether recording was stopped

No examples provided.

screenshot ~33

Take a screenshot of the Android device screen. Returns the image as base64.

NameTypeReqDescription
serialstringDevice serial number
NameTypeReqDescription
encodingstringyesEncoding of the image data in the content block
mimeTypestringyesMIME type of the returned image
sourcestringyesCapture path used (scrcpy frame or adb screencap)

No examples provided.

scroll ~101

Scroll at the specified position. dx and dy are scroll amounts (-1 to 1 range approximated for ADB).

NameTypeReqDescription
dxnumberyesHorizontal scroll amount (negative=left, positive=right)
dynumberyesVertical scroll amount (negative=up, positive=down)
serialstringDevice serial number
xintegeryesX coordinate to scroll at
yintegeryesY coordinate to scroll at
NameTypeReqDescription
messagestringyesHuman-readable description of the action performed
successbooleanyesWhether the input action was dispatched to the device

No examples provided.

shell_exec ~59

Execute an arbitrary ADB shell command on the device and return the output. Use this for any device operation not covered by other tools.

NameTypeReqDescription
commandstringyesShell command to execute on the device
serialstringDevice serial number
NameTypeReqDescription
outputstringyesCombined stdout/stderr text from the command

No examples provided.

start_session ~93

Start a scrcpy session for fast input control and screenshots. When a session is active, tap/swipe/text/screenshot are 10-50x faster. Requires scrcpy-server to be installed.

NameTypeReqDescription
maxFpsintegerMax frames per second (default 30)
maxSizeintegerMax screen dimension in pixels (default 1024)
serialstringDevice serial number
NameTypeReqDescription
messagestringyesHuman-readable status message
screenSizeobjectyesNative display resolution — tap/swipe use these native coordinates, matching ui_dump / ui_find_element bounds directly (no scaling)
serialstringyesResolved device serial
statusstringyesSession status (e.g. 'connected')
videoAvailablebooleanyesWhether the scrcpy video stream is up. When false, the session still works for input/clipboard but screenshots fall back to adb screencap.

No examples provided.

start_video_stream ~67

Start an HTTP MJPEG video stream of the device screen and open a viewer window (ffplay). Starts a scrcpy session automatically if needed.

NameTypeReqDescription
portintegerHTTP port for the MJPEG stream (default 7183)
serialstringDevice serial number
NameTypeReqDescription
screenSizeobjectyesNative display resolution — tap/swipe use these native coordinates (no scaling)
statusstringyesStream status (e.g. 'started')
urlstringyesHTTP URL of the MJPEG stream
viewerstringyesViewer status message

No examples provided.

stop_session ~34

Stop the active scrcpy session. Tools will fall back to ADB commands.

NameTypeReqDescription
serialstringDevice serial number
NameTypeReqDescription
messagestringyesHuman-readable status message
successbooleanyesWhether the session was stopped

No examples provided.

stop_video_stream ~35

Stop the HTTP MJPEG video stream and close the viewer window for a device.

NameTypeReqDescription
serialstringDevice serial number
NameTypeReqDescription
messagestringyesHuman-readable status message
statusstringyesStream status (e.g. 'stopped')

No examples provided.

swipe ~81

Perform a swipe gesture from one point to another

NameTypeReqDescription
durationintegerDuration in milliseconds
serialstringDevice serial number
x1integeryesStart X coordinate
x2integeryesEnd X coordinate
y1integeryesStart Y coordinate
y2integeryesEnd Y coordinate
NameTypeReqDescription
messagestringyesHuman-readable description of the action performed
successbooleanyesWhether the input action was dispatched to the device

No examples provided.

tap ~42

Tap at the specified screen coordinates

NameTypeReqDescription
serialstringDevice serial number
xintegeryesX coordinate
yintegeryesY coordinate
NameTypeReqDescription
messagestringyesHuman-readable description of the action performed
successbooleanyesWhether the input action was dispatched to the device

No examples provided.

ui_dump ~41

Dump the full UI hierarchy of the current screen as XML. Useful for understanding screen structure before using ui_find_element.

NameTypeReqDescription
serialstringDevice serial number
NameTypeReqDescription
xmlstringyesThe UI hierarchy as a uiautomator XML document

No examples provided.

ui_find_element ~136

Find UI elements on screen by text, resource ID, class name, or content description. Returns matching elements with their tap coordinates. At least one search criterion must be provided.

NameTypeReqDescription
classNamestringClass name to match exactly (e.g., 'android.widget.Button')
contentDescstringContent description to search for (partial match, case-insensitive)
resourceIdstringResource ID to match exactly (e.g., 'com.app:id/button')
serialstringDevice serial number
textstringText content to search for (partial match, case-insensitive)
NameTypeReqDescription
countintegeryesNumber of matching elements
elementsarrayyesMatching UI elements with tap coordinates

No examples provided.

version ~47

Report which scrcpy version is being used by the MCP server. The version is detected from the SCRCPY_SERVER_VERSION environment variable, the scrcpy --version binary, or a built-in default.

Input schema present but exposes no named parameters.

NameTypeReqDescription
sourcestringyesWhere the version was resolved from: 'env' (SCRCPY_SERVER_VERSION env var), 'binary' (scrcpy --version), or 'default' (built-in constant)
versionstringyesScrcpy version string (e.g. '4.0', '2.7')

No examples provided.