Mcp Android

io.github.dockndevaiPublished by GitHub account dockndevaiv0.1.0Updated Nov 4, 2026

Control Android devices over ADB from AI agents — safe-by-default, read-only by default, audited.

Overview

AI-generated overview

Local MCP server that lets an assistant control a USB- or Wi-Fi-connected Android phone over ADB: see the screen, tap and type, launch apps, and read…

What you can do
  • Inspect the device: list connected devices, read device info, take screenshots, dump the UI hierarchy, and see the current app.
  • Read apps and notifications: list installed apps and read pending notifications.
  • Drive the UI: tap, swipe, type text, press keys, launch apps, and open URLs.
  • Set alarms and timers on the phone.
  • Admin actions, when enabled: install an APK, uninstall an app, clear app data, and run raw adb shell commands.
When to use it
Useful when you want an assistant to operate or inspect a real Android phone from your desktop, for example to check what is on screen, automate a repetitive tap-and-type flow, set alarms and timers, or review notifications.
Requirements
Runs locally on a desktop via npx from the npm package; needs Node.js and the adb binary (ANDROID_ADB_PATH, default adb on PATH). The phone must have USB or wireless debugging enabled and this computer authorized. Configured through environment variables such as ANDROID_MODE, ANDROID_SERIAL and the allow flags; no account or API key.
Before you install
It controls a real device. Defaults are read-only, but read-write mode allows taps, typing, app launches, alarms and timers, and admin mode with ANDROID_ALLOW_INSTALL or ANDROID_ALLOW_SHELL allows installs, uninstalls, data clearing and arbitrary shell commands. Keep ANDROID_MODE at read-only unless needed, use ANDROID_PACKAGE_ALLOWLIST and ANDROID_PROTECTED_PACKAGES, and note that destructive tools only pause for human approval when the client supports MCP elicitation. ANDROID_DRY_RUN…

Installation

In SourceWeft

  1. Open Mcp Android in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.

Other MCP clients

Follow the launch instructions in the repository.

README

mcp-android

[CI] [License: MIT] [npm]

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

bash
brew install android-platform-tools        # provides adb# On the phone: Settings → Developer options → enable USB (or Wireless) debugging, then authorize this computeradb devices                                 # confirm your device shows "device"

Run it straight from npm — no clone or build needed:

bash
npx -y @dockndevai/mcp-android

Or add it to Claude Code in one line (start read-only):

bash
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

bash
brew install android-platform-tools        # provides adbadb 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

ConcernFlagDefault
What it can doANDROID_MODEread-only
Which packages in scopeANDROID_PACKAGE_ALLOWLIST(all)
Protected packages (never uninstall/clear)ANDROID_PROTECTED_PACKAGESsettings, systemui, gms
Allow install/uninstall/clearANDROID_ALLOW_INSTALLfalse
Allow raw adb shellANDROID_ALLOW_SHELLfalse
Interactive confirmation (destructive ops)MCP elicitation (client-driven)(on when the client supports it)
Preview without touching deviceANDROID_DRY_RUNfalse
Audit log (stderr)ANDROID_AUDIT_LOGtrue

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

json
{  "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

bash
npm run devnpm test          # security policynpm run typecheck

License

MIT

Source: README.md at commit a3a3fd6

Tools

0
SourceWeft has not started this package in its sandbox yet, so its tools are not known.

Version history

1
  1. v0.1.0LatestOct 14, 2026

Score

50% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 days25 pts

    Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.

  • Auth declared10 pts

    Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.

  • Tools listed15 pts

    Answer tools/list without a credential, or ship a package that starts in a sandbox without one.

  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts