LabscoMCP early access ↗
minhalvpMCP SERVER

Android MCP

Control an Android device or emulator over ADB — run commands, take screenshots, list clickable elements with their coordinates, and inspect installed packages.

by minhalvp ↗Mobile & App Store ReleaseCommunity

LABSCO 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 else
  • get_screenshot — a screenshot of the device, returned as an image
  • get_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 possible
  • get_packages — every package installed on the device
  • get_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