Real-time global intelligence dashboard. AI-powered news aggregation, geopolitical monitoring, and infrastructure tracking in a unified situational awareness interface
MCP server for Android device control
Android MCP exposes Android device actions as MCP tools so an agent can work with a phone or emulator through text commands. It uses ADB and the Android Accessibility API to inspect state and trigger UI actions without a computer-vision pipeline.
Builders who want Claude Code, Cursor, or any MCP-aware agent to control Android devices.
You can let an agent operate Android apps, inspect screens, and run QA flows on a real device.
What it does
Native Android interaction
Launch apps, tap, swipe, drag, type text, and read view hierarchies through ADB and the Accessibility API.
Device state inspection
Read the current app and interactive UI elements before deciding on the next action.
Shell access on device
Run shell commands on the connected Android device from the agent.
WiFi and USB device selection
Target a specific device by serial, by WiFi host, or by auto-detected USB and WiFi settings.
MCP tool set for mobile automation
Provides tools for clicks, long clicks, typing, gestures, key presses, waiting, notifications, and screenshots.
How to get it
- 1Open a terminal and run
adb devices
- 2You should see your device listed
List of devices attached R38M30XXXXX device
- 3For WiFi ADB, connect the device first
adb connect 192.168.1.3:5555 adb devices
- 4Clone and Install
git clone https://github.com/CursorTouch/Android-MCP.git cd Android-MCP uv sync
README
Android-MCP is a lightweight, open-source tool that bridge between AI agents and Android devices. Running as an MCP server, it lets LLM agents perform real-world tasks such as app navigation, UI interaction and automated QA testing without relying on traditional computer-vision pipelines or preprogramed scripts.
https://github.com/user-attachments/assets/cf9a5e4e-b69f-46d4-8487-0f61a7a86d67
β¨ Features
-
Native Android Integration
Interact with UI elements via ADB and the Android Accessibility API: launch apps, tap, swipe, input text, and read view hierarchies. -
Bring Your Own LLM/VLM
Works with any language model, no fine-tuned CV model or OCR pipeline required. -
Rich Toolset for Mobile Automation
Pre-built tools for gestures, keystrokes, capture, device state, shell commands execution. -
Real-Time Interaction
Typical latency between actions (e.g., two taps) ranges 2-4s depending on device specs and load.
Supported Operating Systems
- Android 10+
Installation
π¦ Prerequisites
- Python 3.13
- ADB (Android Debug Bridge)
- Android 10+ (Emulator/ Android Device)
π² Testing ADB Connection
Before running the server, ensure your Android device is connected and recognized by ADB:
- Connect your Android device via USB or ensure your emulator is running.
- Open a terminal and run:
adb devices - You should see your device listed:
The serial number will differ per device. Emulators show serials likeList of devices attached R38M30XXXXX deviceemulator-5554. If the list is empty or shows "unauthorized", check your USB debugging settings on the device.
For WiFi ADB, connect the device first:
adb connect 192.168.1.3:5555
adb devices
π Getting Started
You can run the Android MCP server using UVX (recommended) or UV (for local development).
Option 1: UVX (Recommended)
No need to install dependencies manually. Just configure Claude Desktop:
Windows note: Use Python 3.13 for
uvxon Windows. Python 3.14 currently fails to resolve a transitivepywin32dependency used by the MCP stack.
-
Locate your config file
- Windows:
%APPDATA%\Claude\claude_desktop_config.json - macOS:
~/Library/Application Support/Claude/claude_desktop_config.json
- Windows:
-
Add the configuration
{ "mcpServers": { "android-mcp": { "command": "uvx", "args": [ "--python", "3.13", "android-mcp" ] } } }Note: The server starts first and connects lazily when a tool runs. If no device is specified, it auto-detects connected devices and prefers physical devices over emulators. Use
--device <serial>or theANDROID_MCP_DEVICEenvironment variable to target a specific device.Configure a specific WiFi device with environment variables:
{ "mcpServers": { "android-mcp": { "command": "uvx", "args": [ "--python", "3.13", "android-mcp" ], "env": { "ANDROID_MCP_CONNECTION": "wifi", "ANDROID_MCP_HOST": "192.168.1.3" } } } }Or pass explicit flags:
{ "mcpServers": { "android-mcp": { "command": "uvx", "args": [ "--python", "3.13", "android-mcp", "--wifi", "192.168.1.3" ] } } }
Option 2: UV Mode (Local Development)
-
Clone and Install
git clone https://github.com/CursorTouch/Android-MCP.git cd Android-MCP uv sync -
Configure Claude Desktop
{ "mcpServers": { "android-mcp": { "command": "uv", "args": [ "--directory", "</PATH/TO/Android-MCP>", "run", "android-mcp" ] } } }Note: Replace
</PATH/TO/Android-MCP>with the full path to your cloned directory. You can also add"--device", "<YOUR_DEVICE_serial>","--wifi", "192.168.1.3", or"--usb"to control device selection.uv syncfollows the repo's.python-version, so local development uses Python 3.13 by default.
Option 3: OpenCode
You can also use Android-MCP with OpenCode. After cloning and installing the repo (see Option 2), add the server as a local MCP in your OpenCode config (opencode.json):
{
"mcp": {
"android-mcp": {
"type": "local",
"command": ["uv", "--directory", "</PATH/TO/Android-MCP>", "run", "android-mcp"]
}
}
}
Note: Replace
</PATH/TO/Android-MCP>with the full path to your cloned directory. As with UV mode, you can append"--device","--wifi","--usb", etc. to thecommandarray to control device selection.
π Device Selection
Android-MCP resolves devices lazily when a tool is called, so the MCP server can start even if no device is available yet.
--device RFCN2013V8D: connect to a specific USB serial--device 192.168.1.3:5555: connect to a specific WiFi ADB target--wifi 192.168.1.3: use WiFi and auto-append port5555--usb: auto-detect the first USB-connected device--usb RFCN2013V8D: use a specific USB device--connection wifi: prefer the first available WiFi ADB device--connection usb: prefer the first available USB device
Supported environment variables:
ANDROID_MCP_DEVICE: explicit serial orhost:portANDROID_MCP_CONNECTION:auto,usb, orwifiANDROID_MCP_HOST: WiFi host, with:5555added automatically when omitted
If nothing is configured, Android-MCP will use the first available ADB device reported by adb devices. If none are available, tool calls return a configuration error instead of crashing the MCP handshake.
- Restart the Claude Desktop
Restart your Claude Desktop. You should see "android-mcp" listed as an available integration. That's it, now you're ready to start controlling your Android device with natural language.
For troubleshooting tips (log locations, common ADB issues), see the MCP docs.
π οΈ Available Tools
Claude can access the following tools to interact with Windows:
State-Tool: To understand the state of the device.Click-Tool: Click on the screen at the given coordinates.Long-Click-Tool: Perform long click on the screen at the given coordinates.Type-Tool: Type text on the specified coordinates (optionally clears existing text).Swipe-Tool: Perform swipe from one location to other.Drag-Tool: Drag from one point to another.Press-Tool: To press the keys on the mobile device (Back, Volume Up, ...etc).Wait-Tool: Pause for a defined duration.State-Tool: Combined snapshot of active apps and interactive UI elements.Notification-Tool: To access the notifications seen on the device.Shell-Tool: To execute shell commands on the android device.
βοΈ Environment Variables
SCREENSHOT_QUANTIZED: Set totrueto quantize the screenshot to reduce input tokens.
β οΈ Caution
Android-MCP can execute arbitrary UI actions on your mobile device. Use it in controlled environments (emulators, test devices) when running untrusted prompts or agents.
πͺͺ License
This project is licensed under the MIT License. See LICENSE for details.
π€ Contributing
Contributions are welcome! Please read CONTRIBUTING for dev setup and PR guidelines.
Made with β€οΈ by CursorTouch,
developers: Jeomon George, Muhammad Yaseen
Citation
@misc{
author = {cursortouch},
title = {Android-MCP},
year = {2025},
publisher = {GitHub},
howpublished = {\url{https://github.com/CursorTouch/Android-MCP}},
note = {Lightweight open-source bridge between LLM agents and Android},
}
Files in the repo
- assets
- src
- .gitignore
- .mcpbignore
- .python-version
- CONTRIBUTING.md
- e2e_test.py
- LICENSE
- manifest.json
- pyproject.toml
- README.md
- run_e2e_test.command
- SECURITY.md
- uv.lock
Discussion (0)
Ask about usage, or say what you built with itSign in to join the discussion.
No comments yet. Be the first to say what this is good for.
More connectors
High-performance code intelligence MCP server. Indexes codebases into a persistent knowledge graph β average repo in milliseconds. 158 languages, sub-ms queries, 99% fewer tokens. Single static binary, zero dependencies.

Universal provider proxy for OpenAI Codex & Claude Code β use any LLM (Claude, Gemini, Grok, DeepSeek, Ollamaβ¦) with Codex CLI, App, SDK, and Claude Code
Git-native persistent memory for AI coding agents. Implements Google OKF v0.2 with sub-300Β΅s in-memory BM25 search, embedded MCP server, and progressive disclosure. Slashes token bloat by 80% with zero external databases or dependencies. Built in pure Go.
Local-first code intelligence graph for MCP and CLI. Builds a persistent map of your codebase so AI coding tools read only what matters, with benchmarked context reductions on reviews and large-repo workflows.
Stop your AI from making things up β it proposes, deterministic tools decide, every claim checked against ground truth with evidence. Grounded facts and context survive resets. Reverse engineering is the proving ground. MCP server + CLI.