Android MCP
Provides ADB-driven control and inspection of Android devices, including device profiles and serial resolution, UI interaction (screenshots, hierarchy, tap/swipe/type/key), app management, logcat capture and crash extraction, file operations, system diagnostics, and gated shell access.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Android MCPtake a screenshot of the TV and show its battery level"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
๐ฑ Android MCP
ADB-driven Android control for the estate โ device-first, profile-aware, read-only by default
See, drive, and debug any Android device over ADB โ with first-class device profiles so one server targets the whole fleet.
Why this exists
The estate's Android fleet is heterogeneous: a Hisense Android TV and a
Pixel 9 Pro XL, each a different device with a different ADB target. Driving
them raw by serial is fragile (and the Pixel's ADB port rotates on re-pair).
android-mcp wraps ADB behind the Model Context Protocol and adds a device
profile registry โ so the agent says "check the TV" or "target the Pixel",
and the server resolves the right serial automatically.
This product is a hard fork merge of
us-all/android-mcp-server
(v1.14.4) โ chosen over martingeidobler and nexus-android via a trio-compare of
the candidates (the engines are near-orthogonal; see the fork decision below).
Related MCP server: Android Forensics ADB MCP Server
โจ Features
77 tools +
search-toolsmeta across device / UI / apps / logcat / files / system / shellDevice profiles โ each Android device is a named profile (serial, model, platform codename) resolved through a single strict chokepoint
Read-only by default โ writes need
ANDROID_MCP_ALLOW_WRITE=true, shell needsANDROID_MCP_ALLOW_SHELL=true(independent gates)stdio + Streamable HTTP โ run locally or expose over the LAN with Bearer auth
Diagnostic depth โ logcat search/crash extraction, dumpsys (mem/gfx/cpu), getprop, processes, package internals
๐ Device profiles
profile | id (serial) | model | adb target | role |
|
| SmartTV 4K FFM |
| living-room TV |
|
| Pixel 9 Pro XL |
| hardware auth SSOT |
Select a profile:
Environment โ
ANDROID_PROFILE=hisense-wuyishan(default), orPer call โ pass
serial="pixel-9-pro-xl"to any tool that takes a serial.
๐ The Pixel's adb port is volatile (
:36993rotates when re-paired via wireless debugging / Flotilla:25245). Updatepixel-9-pro-xl.adbSerialwhen it changes โ the profile id (ro.serialno4C121FDAS0004Y) is stable.
How profile resolution works (the hard-merge)
Two deliberately-distinct functions in src/profiles.ts:
function | behavior | used by |
| lenient โ falls back to the default profile | active-profile accessor |
| strict โ returns | the adb chokepoint |
The adb chokepoint (src/adb.ts buildArgs) routes a tool's serial param
through lookupProfile, so every tool that takes serial becomes
profile-aware โ while a raw adb address like 10.0.0.77:36993 passes through
verbatim and is never silently retargeted to the default device.
flowchart LR
A[agent] -->|MCP| B[android-mcp]
B --> C[adb.ts buildArgs<br/>lookupProfile strict resolve]
C --> D{serial is a profile?}
D -->|yes| E[profile.adbSerial]
D -->|no| F[serial passed through verbatim]
E --> G[adb -s <target>]
F --> G๐ Quick start
pnpm install --frozen-lockfile
pnpm test # 102 tests (vitest)
pnpm build # tsc โ dist/
# run as stdio MCP (default profile = Hisense TV)
node dist/index.js
# expose over HTTP with Bearer token
MCP_TRANSPORT=http MCP_HTTP_TOKEN=secret MCP_HTTP_PORT=37009 node dist/index.jsRequires Node 22+ (this fork is a Node-runtime product; pnpm 10 + vitest). ADB must be on
PATHor setADB_PATH.
๐ง Tool categories
Category | Coverage |
Device | list/info/properties, wireless connect/disconnect |
Apps | install/uninstall/launch, permissions, intents, data-clear |
UI | screenshot, UI hierarchy, tap/swipe/type/key, annotated tap |
Logcat | capture/filter/clear/crash-extract |
Files | list/pull/push/delete |
System | battery/network/settings/display/wifi/notifications |
Debug | bugreport, mem/gfx/cpu info |
Shell |
|
Meta |
|
โ๏ธ Configuration
Variable | Default | Purpose |
|
| adb binary path |
| profile serial | target device serial |
|
| active device profile |
|
| enable write ops (install/tap/push) |
|
| enable arbitrary |
| โ | category allow/deny (token saver) |
|
|
|
| โ | Bearer token (required for http) |
๐งช Testing
102 tests across 12 files (vitest), including the profiles hard-merge
contract (tests/profiles.test.ts, tests/adb-profile.test.ts) that pins:
profile identities resolve to their adbSerial
raw adb addresses are NOT profile keys (pass through, never retargeted)
the default profile (Hisense) is index 0
pnpm test๐ Fork decision (receipt)
Chosen basis: us-all/android-mcp-server (76 tools, 2-tier security, stdio +
HTTP). Compared against martingeidobler (25 tools, emulator-oriented) and
nexus-android (native) with the trio compare engine โ the candidates are
near-orthogonal implementations (token Jaccard 0.01โ0.03), so the fork was
vendored wholesale and renamed, never partially merged. The compare output is
pinned in pens/agentic-moment/products/site/compare/fixtures/android-mcp-compare.json.
๐ Security & license
Read-only by default. Writes blocked without
ANDROID_MCP_ALLOW_WRITE=true.Shell gating separate.
execute-shellneedsANDROID_MCP_ALLOW_SHELL=trueeven with write enabled.HTTP transport requires a Bearer token (
MCP_HTTP_TOKEN); prefers localhost binding.License: MIT + upstream. Forked 2026-10-31 from
us-all/android-mcp-server;@us-all/mcp-toolkitnpm dep retained (real runtime dependency).
๐ฆ Source
pens/barn/products/android-mcp/ (canonical). Registered in the estate as the
android-mcp MCP upstream (thresher โ node dist/index.js), default profile
Hisense TV. Deploy after edits: pnpm build && /usr/local/bin/android-mcp โ
~/.local/bin/android-mcp symlink.
This server cannot be deployed
Maintenance
Related MCP Connectors
Remote enterprise management of Android devices and apps
Give your AI agent a real cloud Android phone: push APKs, drive it, get screenshots and logs.
Remote MCP for Android CLI agent build gate, structured receipts, audit logs, and reviewer-ready evi
Disposable cloud Android emulators for coding agents: run an APK or PR build, tap, type, screenshot.
Related MCP Servers
- AlicenseCqualityDmaintenanceEnables comprehensive control of Android devices via ADB for Flutter development, UI testing, and visual QA workflows. Provides 60+ tools for device management, UI inspection, app testing, performance profiling, and debugging through natural language.7735 PyPIMIT
- FlicenseAqualityDmaintenanceEnables forensic investigators to acquire data from Android devices via ADB, including device backup, artifact collection, and secure command execution.105-
- AlicenseNot gradedqualityDmaintenanceEnables remote control of Android devices via ADB, including screen operations, input, app management, file transfer, and advanced tools like UI testing and performance analysis.25MIT
- AlicenseAqualityDmaintenanceEnables an agent to inspect and interact with Android emulators or physical devices via ADB, capturing UI snapshots, tapping nodes, typing text, and reading app logs.10MIT