get_packagesLABSCO SUMMARY
The screen described in coordinates, not just captured as a picture.
A screenshot tells the model what the screen looks like; the UI layout call tells it where to tap. Having both is what turns "describe this screen" into "press that button".
What it is
A thin server over the Android Debug Bridge. It picks the connected device automatically when there is only one, and otherwise takes the device serial from a config file.
What you get
execute_adb_command— run any ADB command and get its output back, which is the escape hatch that covers everything elseget_screenshot— a screenshot of the device, returned as an imageget_uilayout— the clickable elements on the current screen with their text, content description, bounds and centre coordinates, which is what makes tapping the right thing possibleget_packages— every package installed on the deviceget_package_action_intents— the non-data actions from the Activity Resolver Table for a package
Requirements
Python and ADB installed and configured, plus an Android device or emulator connected. The project uses uv: uv python install 3.11 then uv sync. Configuration is optional — with exactly one device connected it connects automatically. With several connected you must create config.yaml from the example and set device.name to a serial from adb devices; without it the server reports an error listing the available devices rather than picking one. Register it in the client by pointing command at uv with --directory set to your clone and run server.py as the arguments.
Setup effort
Build from source — git clone https://github.com/minhalvp/android-mcp-server.git
USE CASES
Driving an app screen by screen
Read the clickable elements with their centre coordinates, then tap through an ADB input command — the layout call is what supplies the coordinates.
Seeing what is on the device right now
Take a screenshot and have the model describe or check it, without reaching for the phone.
Auditing what is installed
List every package on the device, then look up which actions a specific one declares.
Working with several devices attached
Set the serial in the config file; with more than one device and no config the server names the candidates instead of choosing for you.
Doing anything ADB can do
The raw command tool covers the rest — logcat, input events, package installs — with the output returned to the model.
5 tools
Listed in project docs. Your client may show a different list.
execute_adb_commandget_uilayoutget_screenshotget_package_action_intentsBEFORE YOU INSTALL
What to know first
Tools you get
5 tools named in the project's documentation.
Requires
- uv on PATH
- ADB (Android Debug Bridge) installed and configured
- An Android device or emulator connected
Where it runs
The documented client runs the server on your machine.
INSTALLATION
Connect your client
Server setup
git clone https://github.com/minhalvp/android-mcp-server.git
cd android-mcp-server
uv python install 3.11
uv syncMCP Clients
Claude Desktop
{
"mcpServers": {
"android": {
"command": "<YOUR_PATH_TO_UV>",
"args": [
"--directory",
"<YOUR_PATH_TO_ANDROID_MCP_SERVER>",
"run",
"server.py"
]
}
}
}<YOUR_PATH_TO_UV> is the full path to your uv executable, and <YOUR_PATH_TO_ANDROID_MCP_SERVER> is the absolute path of your clone. With more than one device connected, copy config.yaml.example to config.yaml in the clone and set device.name to a serial from adb devices.