Android MCP Server: control Android through ADB
Android MCP Server
A Python MCP server: the agent takes screenshots of an Android device, reads clickable interface elements and runs ADB commands
- 811 ★ on the repository
- Last commit
- Apache-2.0
Broad access
Why this level
- execute_adb_command runs arbitrary ADB commands on the connected device, including installing and removing apps
- Screenshots and element lists can contain personal data from the phone
Install
- Works in
Manual install
git clone https://github.com/minhalvp/android-mcp-server.git && cd android-mcp-server && uv python install 3.11 && uv syncSteps from the README. ADB must be installed beforehand.
Access and checks
How we reviewBroad accessThe tool can change data, run commands or handle secrets.
- execute_adb_command runs arbitrary ADB commands on the connected device, including installing and removing apps
- Screenshots and element lists can contain personal data from the phone
This is third-party code. Review the repository files before installing.
What it does
The server links an MCP client to a phone or tablet through the Android Debug Bridge. The agent gets five tools: get_screenshot returns a screenshot, get_uilayout lists clickable elements with their text, description, bounds and centre coordinates, get_packages lists installed packages, get_package_action_intents shows actions from the Activity Resolver table for a package, and execute_adb_command runs an arbitrary ADB command. With one device connected the server picks it up by itself. With several devices you need a config.yaml whose device.name field holds the serial number from adb devices. Without that setting and with several devices the server shows an error listing the available ones.
Who it is for. For mobile developers and testers who want to give Claude Desktop or Cursor control over an Android device.
Good fit when
- You want to see what is on a test phone's screen and get the buttons with coordinates
- The agent has to find which packages are installed on the device
- You need to run an adb command from the conversation, for example to open a screen or read a setting
- You want to know which intent actions a package declares
- Several devices are connected to the computer and the right one is set by serial number in config.yaml
Not a fit when
- You need taps and text input as separate tools: they are not provided, so control goes through execute_adb_command
- You need iOS: the server works with Android only
- An emulator is the main target: the README marks it as untested
- You want a ready package from a registry: installation uses git clone and uv sync
- Policy forbids connecting the device over ADB
Example request
Take a screenshot of the phone and tell me which clickable elements are on itMCP
- Transport
- stdio
- Authentication
- not required
Limitations
Python 3.x, a configured ADB and the uv tool are required; the README suggests uv python install 3.11. Installation goes through git clone and there is no ready package in a registry. The README calls the Android emulator untested. Apache-2.0 licence, last commit on May 28, 2025. There are no separate tools for taps and text input, so those actions go through execute_adb_command. Tests live in the tests folder and cover the ADB manager, configuration and integration.
How to disable. Delete the android block from mcpServers in the client configuration and restart the client. You can remove the cloned repository folder by hand.
FAQ
How do I connect Android to Claude over MCP?
Clone the repository, run uv sync and add an android server to claude_desktop_config.json with the uv command and the arguments --directory, the folder path, run, server.py. The device must have ADB debugging on and adb devices must list it.
What if several devices are connected?
Copy config.yaml.example to config.yaml and put the serial number from adb devices into device.name. Without it the server returns an error listing the devices.
Which tools does the server have?
Five: get_screenshot, get_uilayout, get_packages, get_package_action_intents and execute_adb_command.
How is it different from other Android MCP servers in the catalog?
This server is minimal and built around ADB: a screenshot, an element list, packages and an arbitrary command. The cursortouch entry navigates apps and runs auto-tests, and mobile-mcp controls both iOS and Android.
Is config.yaml required?
No, it is optional. With exactly one device connected the server selects it by itself. The file is needed only with several devices: put the serial number from adb devices into device.name.
Discussion
No questions or reviews yet.
Related
MCP serversAn MCP server that drives an Android device over ADB: app navigation, input and automated tests
Android Remote Control MCP
android-remote-control-mcp
An Android app that turns a phone or emulator into an MCP server: accessibility services and screenshots
An MCP server to drive iOS and Android: simulators, emulators and real devices via accessibility trees and screenshots
An Android emulator in Docker with an MCP server: the agent drives the device over adb, opens apps and pages, presses buttons
Google Play Developer MCP
google-play-developer-mcp
An MCP server for Google Play Console: releases and tracks, staged rollouts, store listings, reviews and subscriptions from an agent chat
An MCP server that takes plain-language commands and drives the iOS Simulator through idb: apps, taps, logs
Comparison with similar tools
Entries that share the main search query, and how they differ.
| Entry | Official | Authentication | Repository stars | Main difference |
|---|---|---|---|---|
| Android MCP Server: control Android through ADB (this entry) | no | not required | 811 | |
| Android MCP | no | not required | 908 | a different project that navigates apps, types input and runs auto-tests |
| Mobile MCP | no | not required | 10,126 | controls iOS and Android through the accessibility tree and screenshots |
| SimUtil: MCP for emulators and simulators | no | not required | 1,201 | desktop app and CLI for Android emulators |
README in short
The README explains how to install uv and the dependencies, how to select a device automatically or through config.yaml, and how to register the server in Claude Desktop on macOS and Windows. It has a table of device selection scenarios and descriptions of the five tools as Python signatures.