io.github.dockndevai/mcp-android
Control Android devices over ADB from AI agents — safe-by-default, read-only by default, audited.
Install
Add this to your client's MCP configuration (Claude Desktop: claude_desktop_config.json; Cursor: .cursor/mcp.json; VS Code and others use the same "mcpServers" shape).
@dockndevai/mcp-androidclaude mcp add mcp-android -e 'ANDROID_MODE=<ANDROID_MODE>' -e 'ANDROID_ADB_PATH=<ANDROID_ADB_PATH>' -e 'ANDROID_SERIAL=<ANDROID_SERIAL>' -e 'ANDROID_TIMEOUT_MS=<ANDROID_TIMEOUT_MS>' -e 'ANDROID_PACKAGE_ALLOWLIST=<ANDROID_PACKAGE_ALLOWLIST>' -e 'ANDROID_PROTECTED_PACKAGES=<ANDROID_PROTECTED_PACKAGES>' -e 'ANDROID_ALLOW_INSTALL=<ANDROID_ALLOW_INSTALL>' -e 'ANDROID_ALLOW_SHELL=<ANDROID_ALLOW_SHELL>' -e 'ANDROID_DRY_RUN=<ANDROID_DRY_RUN>' -e 'ANDROID_AUDIT_LOG=<ANDROID_AUDIT_LOG>' -- npx -y @dockndevai/mcp-android@0.1.0
{
"mcpServers": {
"mcp-android": {
"command": "npx",
"args": [
"-y",
"@dockndevai/mcp-android@0.1.0"
],
"env": {
"ANDROID_MODE": "<ANDROID_MODE>",
"ANDROID_ADB_PATH": "<ANDROID_ADB_PATH>",
"ANDROID_SERIAL": "<ANDROID_SERIAL>",
"ANDROID_TIMEOUT_MS": "<ANDROID_TIMEOUT_MS>",
"ANDROID_PACKAGE_ALLOWLIST": "<ANDROID_PACKAGE_ALLOWLIST>",
"ANDROID_PROTECTED_PACKAGES": "<ANDROID_PROTECTED_PACKAGES>",
"ANDROID_ALLOW_INSTALL": "<ANDROID_ALLOW_INSTALL>",
"ANDROID_ALLOW_SHELL": "<ANDROID_ALLOW_SHELL>",
"ANDROID_DRY_RUN": "<ANDROID_DRY_RUN>",
"ANDROID_AUDIT_LOG": "<ANDROID_AUDIT_LOG>"
}
}
}
}
Environment variables
ANDROID_MODEAccess mode: read-only | read-write | admin.ANDROID_ADB_PATHPath to the adb binary (default: adb on PATH).ANDROID_SERIALTarget device serial from `adb devices`. Empty = the only connected device.ANDROID_TIMEOUT_MSPer-command adb timeout in milliseconds.ANDROID_PACKAGE_ALLOWLISTComma-separated package allowlist for launch/uninstall/clear. Empty = all.ANDROID_PROTECTED_PACKAGESPackages that can be launched/inspected but never uninstalled or data-cleared.ANDROID_ALLOW_INSTALLEnable install_apk / uninstall_app / clear_app_data (requires admin mode too).ANDROID_ALLOW_SHELLEnable run_shell (arbitrary adb shell; requires admin mode too).ANDROID_DRY_RUNValidate + log write/admin actions without executing them on the device.ANDROID_AUDIT_LOGEmit a JSON audit line to stderr per guarded operation (default true).
Documentation
From the project's README on GitHub, refreshed weekly. Links open on GitHub.
Contents
mcp-android
A Model Context Protocol server to control an Android phone over ADB — the phone equivalent of the Mac-control servers. Claude can see the screen (screenshots + UI hierarchy) and tap, type, press keys, launch apps, set alarms/timers, and read notifications. Safe-by-default, with the suite's access-mode + flag model.
Runs on your computer and drives a phone connected by USB or wireless debugging (great for the Z Fold 7). It is not installed on the phone and does not need root.
iOS? A stock iPhone can't be controlled this way — Apple's sandbox forbids cross-app/system automation. See the separate mcp-ios repo for the realistic (Appium/WebDriverAgent over USB from a Mac) approach.
Quickstart
brew install android-platform-tools # provides adb
# On the phone: Settings → Developer options → enable USB (or Wireless) debugging, then authorize this computer
adb devices # confirm your device shows "device"
Run it straight from npm — no clone or build needed:
npx -y @dockndevai/mcp-android
Or add it to Claude Code in one line (start read-only):
claude mcp add android -e ANDROID_MODE="read-only" -- npx -y @dockndevai/mcp-android
See docs/CLIENTS.md for Claude Desktop, Cursor, Codex, Windsurf, and VS Code configs.
Setup from source
brew install android-platform-tools # provides adb
adb devices # confirm your device shows "device"
npm install && npm run build
Tools
Read (read-only+): list_devices, device_info, screenshot, ui_dump, current_app, list_apps, get_notifications
Write (read-write+): tap, swipe, input_text, press_key, launch_app, open_url, set_alarm, set_timer
Admin (admin): install_apk, uninstall_app, clear_app_data (need ANDROID_ALLOW_INSTALL), run_shell (needs ANDROID_ALLOW_SHELL; not registered otherwise)
The typical loop for driving the UI: screenshot → ui_dump (find bounds) → tap/input_text.
Security model
| Concern | Flag | Default |
|---|---|---|
| What it can do | ANDROID_MODE | read-only |
| Which packages in scope | ANDROID_PACKAGE_ALLOWLIST | (all) |
| Protected packages (never uninstall/clear) | ANDROID_PROTECTED_PACKAGES | settings, systemui, gms |
| Allow install/uninstall/clear | ANDROID_ALLOW_INSTALL | false |
Allow raw adb shell | ANDROID_ALLOW_SHELL | false |
| Interactive confirmation (destructive ops) | MCP elicitation (client-driven) | (on when the client supports it) |
| Preview without touching device | ANDROID_DRY_RUN | false |
| Audit log (stderr) | ANDROID_AUDIT_LOG | true |
When the connected client supports MCP elicitation, destructive tools (uninstall_app, clear_app_data, install_apk, run_shell) pause and ask the human to approve the exact action before it runs — the model can't approve on your behalf. When the client can't elicit, the access-mode + flag gates above are the control.
Run with Claude Desktop / Claude Code
{
"mcpServers": {
"android": {
"command": "node",
"args": ["/absolute/path/to/mcp-android/dist/index.js"],
"env": { "ANDROID_MODE": "read-write" }
}
}
}
Example prompts
- "Take a screenshot of my phone and tell me what's on screen."
- "Set an alarm for 6:30am labeled Gym."
- "Open the Clock app and start a 10-minute timer."
- "What notifications do I have piling up?"
Develop
npm run dev
npm test # security policy
npm run typecheck
License
MIT
Frequently asked questions
What is io.github.dockndevai/mcp-android?
Control Android devices over ADB from AI agents — safe-by-default, read-only by default, audited.
How do I install io.github.dockndevai/mcp-android?
It runs on your machine. In Claude Code: claude mcp add mcp-android -e 'ANDROID_MODE=<ANDROID_MODE>' -e 'ANDROID_ADB_PATH=<ANDROID_ADB_PATH>' -e 'ANDROID_SERIAL=<ANDROID_SERIAL>' -e 'ANDROID_TIMEOUT_MS=<ANDROID_TIMEOUT_MS>' -e 'ANDROID_PACKAGE_ALLOWLIST=<ANDROID_PACKAGE_ALLOWLIST>' -e 'ANDROID_PROTECTED_PACKAGES=<ANDROID_PROTECTED_PACKAGES>' -e 'ANDROID_ALLOW_INSTALL=<ANDROID_ALLOW_INSTALL>' -e 'ANDROID_ALLOW_SHELL=<ANDROID_ALLOW_SHELL>' -e 'ANDROID_DRY_RUN=<ANDROID_DRY_RUN>' -e 'ANDROID_AUDIT_LOG=<ANDROID_AUDIT_LOG>' -- npx -y @dockndevai/mcp-android@0.1.0. For other clients, paste the JSON configuration from this page into their MCP settings.
Does io.github.dockndevai/mcp-android need an API key?
Its registry entry lists no required key or secret. Some features may still need an account with the service it connects to.
Is io.github.dockndevai/mcp-android open source?
Yes. Its code is on GitHub under the MIT license.
Who maintains io.github.dockndevai/mcp-android?
It is published by dockndevai. AI.tn lists it but does not maintain or endorse it.
From the official MCP Registry. Listing is not an endorsement: review a server's code and permissions before giving it access to your data.