Model Context Protocol (MCP) server that enables control of Android devices using uiautomator2.
Android MCP Server
This is a Model Context Protocol (MCP) server that enables control of Android devices using uiautomator2.
Prerequisites
- Python 3.10+
- ADB installed and added to PATH
- An Android device connected via USB or WiFi (with ADB debugging enabled)
Installation
- Create a virtual environment:
python -m venv venv .\venv\Scripts\activate - Install dependencies:
pip install -r requirements.txt
Usage
To run the server:
python main.py
Tools Available
connect_device(serial): Connect to a device.device_info(): Get device status.dump_hierarchy(): View UI XML.click_element(text, resource_id, description): Click UI elements.wait_for_element(text, resource_id, description, timeout): Wait for element to appear.click_point(x, y): Click at coordinates.swipe(sx, sy, ex, ey): Swipe gesture.input_text(text, clear): Type text.press_key(key): Press physical keys (home, back, etc.).open_app(package_name): Launch an app.stop_app(package_name): Stop an app.install_app(url_or_path): Install APK.uninstall_app(package_name): Uninstall app.shell_command(command): Run ADB shell command.take_screenshot(): Capture screen.
Configuration
Ensure your device is visible via adb devices before connecting.
Gemini MCP Configuration
To use this server with Gemini CLI or compatible MCP clients, add the following to your MCP configuration file (e.g., ~/.gemini/settings.json):
"android": {
"command": "d:\\src\\android-mcp\\venv\\Scripts\\python.exe",
"args": [
"d:\\src\\android-mcp\\main.py"
]
}
Replace the paths with the actual absolute paths to your project if they differ.
Tools (15)
connect_deviceConnect to a device.device_infoGet device status.dump_hierarchyView UI XML.click_elementClick UI elements.wait_for_elementWait for element to appear.click_pointClick at coordinates.swipeSwipe gesture.input_textType text.press_keyPress physical keys (home, back, etc.).open_appLaunch an app.stop_appStop an app.install_appInstall APK.uninstall_appUninstall app.shell_commandRun ADB shell command.take_screenshotCapture screen.Configuration
{"android":{"command":"d:\\src\\android-mcp\\venv\\Scripts\\python.exe","args":["d:\\src\\android-mcp\\main.py"]}}