An MCP (Model Context Protocol) server that exposes Android Debug Bridge (ADB) to AI assistants. Control Android devices and emulators directly from Claude, Codex, GitHub Copilot, Gemini CLI, Cursor, or any MCP-compatible client.
- Screenshot — capture device screen with inline image display and auto-compression
- UI interaction — tap, swipe, find elements by text/ID, type text, press keys
- App management — install, uninstall, inspect app info and intent filters
- File transfer — push and pull files between host and device
- Streaming — capture logcat, top, and other long-running commands
- Multi-device — target specific devices by serial when multiple are connected
- Claude Desktop compatible — auto-detects ADB path, no PATH configuration needed
- Node.js 18+
- Android SDK Platform Tools (
adb) - A connected Android device or running emulator
See docs/adb-setup.md for installation instructions on macOS, Linux, and Windows.
Add to claude_desktop_config.json:
| Platform | Path |
|---|---|
| macOS | ~/Library/Application Support/Claude/claude_desktop_config.json |
| Windows | %APPDATA%\Claude\claude_desktop_config.json |
{
"mcpServers": {
"android": {
"command": "npx",
"args": ["-y", "@moallemi/android-mcp-server"]
}
}
}claude mcp add android -- npx -y @moallemi/android-mcp-serverOr add manually to .mcp.json in your project root:
{
"mcpServers": {
"android": {
"command": "npx",
"args": ["-y", "@moallemi/android-mcp-server"]
}
}
}Use command: npx with args: ["-y", "@moallemi/android-mcp-server"] in your client's MCP server configuration.
npx @moallemi/android-mcp-server| Tool | Description |
|---|---|
adb_devices |
List connected devices with model, Android version, and API level |
adb_command |
Run any ADB command (everything after adb) |
adb_stream |
Capture streaming output (logcat, top) for a set duration or line count |
| Tool | Description |
|---|---|
adb_screenshot |
Capture screen — returns inline image compressed to JPEG. Use savePath to also save locally, fullResolution: true for PNG. |
adb_tap |
Tap screen coordinates. Pass screenshotWidth/screenshotHeight to auto-scale from image coordinates to device resolution. |
adb_find_and_tap |
Find a UI element by text, resource ID, or content description and tap it |
adb_get_ui_elements |
List visible UI elements — filter by text, resource ID, class, or clickable |
| Tool | Description |
|---|---|
adb_install |
Install an APK with helpful error messages for common failures |
adb_uninstall |
Uninstall an app by package name |
adb_app_info |
Get version, permissions, install path, memory usage, and running status |
adb_app_actions |
Discover all registered activities, services, and receivers with their intent filters |
| Tool | Description |
|---|---|
adb_file_transfer |
Push a local file to device or pull a file from device |
Once configured, you can ask Claude things like:
- "Take a screenshot of my device"
- "Open the Settings app and navigate to Wi-Fi"
- "Tap the Login button"
- "Install the APK at ~/Downloads/app-debug.apk"
- "What activities does com.example.app have?"
- "Show me the last 100 lines of logcat filtered to 'crash'"
- "Pull the database file from /data/data/com.example.app/databases/app.db"
# Clone and install
git clone https://github.com/moallemi/android-mcp-server
cd android-mcp-server
npm install
# Build
npm run build
# Run tests (requires a connected device or emulator)
npm testMIT