MCP server for Android device control via ADB and scrcpy
Drift inferred · capture-to-capture
No drift recorded — single capability capture; advisories appear once its surface changes.
tools
-
app_current
Get the current foreground app and activity
-
app_install
Install an APK from the host machine
-
app_list
List installed packages, optionally filter by name or system/third-party
-
app_start
Launch an app by package name. Prefix with + to force-stop before launch.
-
app_stop
Force-stop an app
-
app_uninstall
Uninstall an app
-
clipboard_get
Get clipboard content. Uses scrcpy to bypass Android 10+ restrictions.
-
clipboard_set
Set clipboard content. Pass paste: true to also paste immediately.
-
collapse_panels
Collapse notification/settings panels (requires active session)
-
device_info
Get model, Android version, screen size, SDK level, battery
-
device_list
List all connected devices with serial, state, and model
-
drag_drop
Drag from one point to another
-
expand_notifications
Pull down the notification panel (requires active session)
-
expand_settings
Pull down the quick settings panel (requires active session)
-
file_list
List directory contents on the device
-
file_pull
Pull a file from the device to the host machine
-
file_push
Push a file from the host machine to the device
-
input_text
Type a text string into the focused field
-
key_event
Send a key event: HOME, BACK, ENTER, VOLUME_UP, VOLUME_DOWN, POWER, etc.
-
long_press
Long press at coordinates
-
rotate_device
Rotate the screen (requires active session)
-
screen_off
Turn the screen off
-
screen_on
Wake the device screen
-
screen_record_start
Start recording the screen to a file on the device
-
screen_record_stop
Stop recording and optionally pull the file to the host
-
screenshot
Capture the screen and return it as an image. ~33ms with scrcpy, ~500ms via ADB.
-
scroll
Scroll at a position (dx=horizontal, dy=vertical)
-
shell_exec
Execute an arbitrary ADB shell command and return the output
-
start_session
Start a scrcpy session. When active, input and screenshots use the fast path (10-50x faster).
-
stop_session
Stop the scrcpy session. Tools fall back to ADB.
-
swipe
Swipe from one point to another
-
tap
Tap at screen coordinates
-
ui_dump
Dump the full UI hierarchy as XML
-
ui_find_element
Find elements by text, resource ID, class name, or content description. Returns tap coordinates.
analyzed commit 7a1e1ef · analyzer v17 · 3d ago
skills & prompt files 1
- agent-rulesJuanCF-scrcpy-mcp-7a1e1ef/AGENTS.md
filesystem 3
- fs JuanCF-scrcpy-mcp-7a1e1ef/src/tools/apps.ts :2
import * as fs from "fs" - fs JuanCF-scrcpy-mcp-7a1e1ef/src/tools/files.ts :2
import * as fs from "fs" - fs JuanCF-scrcpy-mcp-7a1e1ef/src/utils/scrcpy.ts :5
import * as fs from "fs"
shell / exec 4
- shell JuanCF-scrcpy-mcp-7a1e1ef/src/tools/vision.ts :1
import { spawn, ChildProcess } from "child_process" - shell JuanCF-scrcpy-mcp-7a1e1ef/src/utils/adb.ts :1
import { execFile } from "child_process" - shell JuanCF-scrcpy-mcp-7a1e1ef/src/utils/mjpeg.ts :2
import { spawn } from "child_process" - shell JuanCF-scrcpy-mcp-7a1e1ef/src/utils/scrcpy.ts :1
import { spawn, execSync, ChildProcess } from "child_process"
network 2
- net JuanCF-scrcpy-mcp-7a1e1ef/src/utils/mjpeg.ts :1
import http from "http" - net JuanCF-scrcpy-mcp-7a1e1ef/src/utils/scrcpy.ts :3
import * as net from "net"
declared dependencies 11
- @modelcontextprotocol/sdk@^1.27.1
- zod@^4.3.6
- @eslint/js@^10.0.1
- @types/node@^22
- eslint@^10.0.2
- tsup@^8.5.1
- tsx@^4.21.0
- typescript@^5.9.3
- typescript-eslint@^8.56.1
- vitest@^4.0.18
- ffmpeg-static@^5.3.0