Skip to main content

Control any Android phone from Claude, Cursor, or any MCP client — via ADB

Project description

agi-android-mcp

Control any Android phone from Claude Code, Cursor, or any MCP client — just ADB, no app required.

Demo

How it works

Claude Code  ──(MCP stdio)──►  agi-android-mcp  ──(ADB)──►  Android Phone

A lightweight Python MCP server that translates tool calls into adb commands. Works with any Android phone that has USB debugging enabled. No proprietary dependencies.

Quick Start

1. Install

pip install agi-android-mcp

2. Plug in your phone

Enable USB debugging (Settings > Developer options > USB debugging), connect via USB, and verify:

adb devices
# emulator-5554    device

3. Add to Claude Code

Add to ~/.claude/claude_code_config.json:

{
  "mcpServers": {
    "android": {
      "command": "agi-android-mcp"
    }
  }
}

Restart Claude Code. That's it. Tell Claude:

"Take a screenshot of my phone"

"Open Chrome and search for the weather"

"Launch Settings and turn on dark mode"

Claude will take screenshots, reason about the UI, and tap/type/swipe to accomplish the task.

Add to Cursor

Add to .cursor/mcp.json:

{
  "mcpServers": {
    "android": {
      "command": "agi-android-mcp"
    }
  }
}

Any MCP client

The server uses stdio transport. Run agi-android-mcp as the command — it speaks MCP over stdin/stdout.

Tools (18)

Tool Description
screenshot Take a screenshot, returned as PNG image
get_screen_size Get screen dimensions in pixels
tap(x, y) Tap at pixel coordinates
double_tap(x, y) Double-tap at pixel coordinates
long_press(x, y) Long-press at pixel coordinates
type_text(text) Type text into focused input field
press_key(key) Press a key (enter, backspace, tab, space, home, back)
swipe(direction) Swipe up/down/left/right from screen center
drag(start, end) Drag between two points
press_home() Press the Home button
press_back() Press the Back button
open_notifications() Open the notification shade
open_quick_settings() Open quick settings panel
launch_app(package) Launch an app by package name
get_current_app() Get the currently visible app/activity
list_installed_apps() List installed packages
shell(command) Run any ADB shell command
get_device_info() Get device model, Android version, screen size, battery

Environment Variables

Variable Default Description
ADB_PATH Auto-detected Path to adb binary
ADB_SERIAL (none) Target a specific device by serial number

Multiple devices? Set ADB_SERIAL:

{
  "mcpServers": {
    "android": {
      "command": "agi-android-mcp",
      "env": {
        "ADB_SERIAL": "XXXXXXXXXXXXXX"
      }
    }
  }
}

Agentic Demo

demo.py runs a full autonomous loop: screenshot → Claude reasons → execute action → repeat.

pip install anthropic
ANTHROPIC_API_KEY=sk-... python demo.py "Open Chrome and search for cats"

How It Works

  1. MCP server starts over stdio (standard MCP transport)
  2. When a tool is called, it translates to an adb subprocess call
  3. Screenshots: adb exec-out screencap -p
  4. Input: adb shell input tap/swipe/text/keyevent
  5. Apps: adb shell am, adb shell pm

Development

pip install -e .
python -c "from agi_android_mcp.server import mcp; print(len(mcp._tool_manager._tools), 'tools')"

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

agi_android_mcp-0.0.1.tar.gz (349.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

agi_android_mcp-0.0.1-py3-none-any.whl (7.8 kB view details)

Uploaded Python 3

File details

Details for the file agi_android_mcp-0.0.1.tar.gz.

File metadata

  • Download URL: agi_android_mcp-0.0.1.tar.gz
  • Upload date:
  • Size: 349.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.12

File hashes

Hashes for agi_android_mcp-0.0.1.tar.gz
Algorithm Hash digest
SHA256 a88227c87f12140400f686031cddc883d02f86ed3b495142c8555c8c35d68aae
MD5 e824882fb08f45b44838e77f5350ac5c
BLAKE2b-256 fd9bfdb9abce73100428d21ee47d098f478043530ab0b1e15f622726956a3ca0

See more details on using hashes here.

File details

Details for the file agi_android_mcp-0.0.1-py3-none-any.whl.

File metadata

File hashes

Hashes for agi_android_mcp-0.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 d533428651aabc20374e287558c4083cf84900f08360c4d44412356020e56715
MD5 6b6cdad5c3141827a96af3e41b14f34d
BLAKE2b-256 ba625cab55030d1c8f00d7104da6c11628e13238ac3b08622865e19acd3f4bde

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page