Skip to main content

MCP server for Android device automation via ADB

Project description

Android MCP Server

An MCP (Model Context Protocol) server that provides programmatic control over Android devices through ADB (Android Debug Bridge). This server exposes various Android device management capabilities that can be accessed by MCP clients like Claude desktop and Code editors (e.g. Cursor)

Features

  • 🔧 ADB Command Execution
  • 📸 Device Screenshot Capture
  • 🎯 UI Layout Analysis
  • 📱 Device Package Management

Prerequisites

  • Python 3.11+
  • ADB (Android Debug Bridge) installed and configured
  • Android device or emulator

Installation

Quick Install (Recommended)

# Using uvx (no installation needed)
uvx mcp-server-android

# Or using pip
pip install mcp-server-android

# Or using uv tool
uv tool install mcp-server-android

Development Installation

  1. Clone the repository:
git clone https://github.com/minhalvp/android-mcp-server.git
cd android-mcp-server
  1. Install dependencies: This project uses uv for project management via various methods of installation.
uv python install 3.11
uv sync

Configuration

The server supports flexible device configuration with multiple usage scenarios.

Environment Variables (New!)

You can configure the server using environment variables:

  • ANDROID_DEVICE_SERIAL - Specify the device serial (overrides config file)
  • ANDROID_MCP_CONFIG - Path to custom config file (default: config.yaml)

Example:

export ANDROID_DEVICE_SERIAL="emulator-5554"
uvx mcp-server-android

Device Selection Modes

1. Automatic Selection (Recommended for single device)

  • No configuration file needed
  • Automatically connects to the only connected device
  • Perfect for development with a single test device

2. Manual Device Selection

  • Use when you have multiple devices connected
  • Specify exact device in configuration file

Configuration File (Optional)

The configuration file (config.yaml) is optional. If not present, the server will automatically select the device if only one is connected.

For Automatic Selection

Simply ensure only one device is connected and run the server - no configuration needed!

For Manual Selection

  1. Create a configuration file:
cp config.yaml.example config.yaml
  1. Edit config.yaml and specify your device:
device:
  name: "your-device-serial-here" # Device identifier from 'adb devices'

For auto-selection, you can use any of these methods:

device:
  name: null              # Explicit null (recommended)
  # name: ""              # Empty string  
  # name:                 # Or leave empty/comment out

Finding Your Device Serial

To find your device identifier, run:

adb devices

Example output:

List of devices attached
13b22d7f        device
emulator-5554   device

Use the first column value (e.g., 13b22d7f or emulator-5554) as the device name.

Usage Scenarios

Scenario Configuration Required Behavior
Single device connected None ✅ Auto-connects to the device
Multiple devices, want specific one config.yaml with device.name ✅ Connects to specified device
Multiple devices, no config None ❌ Shows error with available devices
No devices connected N/A ❌ Shows "no devices" error

Note: If you have multiple devices connected and don't specify which one to use, the server will show an error message listing all available devices.

Usage

An MCP client is needed to use this server. The Claude Desktop app is an example of an MCP client. To use this server with Claude Desktop:

  1. Locate your Claude Desktop configuration file:

    • Windows: %APPDATA%\Claude\claude_desktop_config.json
    • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
  2. Add the Android MCP server configuration to the mcpServers section:

{
  "mcpServers": {
    "android": {
      "command": "uvx",
      "args": ["mcp-server-android"],
      "env": {
        "ANDROID_DEVICE_SERIAL": "your-device-serial"  // Optional
      }
    }
  }
}

Or if installed with pip:

{
  "mcpServers": {
    "android": {
      "command": "mcp-server-android",
      "args": []
    }
  }
}

https://github.com/user-attachments/assets/c45bbc17-f698-43e7-85b4-f1b39b8326a8

Available Tools

The server exposes the following tools:

def get_packages() -> str:
    """
    Get all installed packages on the device.
    Returns:
        str: A list of all installed packages on the device as a string
    """
def execute_adb_shell_command(command: str) -> str:
    """
    Executes an ADB shell command and returns the output.
    Args:
        command (str): The ADB shell command to execute
    Returns:
        str: The output of the ADB command
    """
def get_uilayout() -> str:
    """
    Retrieves information about clickable elements in the current UI.
    Returns a formatted string containing details about each clickable element,
    including their text, content description, bounds, and center coordinates.

    Returns:
        str: A formatted list of clickable elements with their properties
    """
def get_screenshot() -> Image:
    """
    Takes a screenshot of the device and returns it.
    Returns:
        Image: the screenshot
    """
def get_package_action_intents(package_name: str) -> list[str]:
    """
    Get all non-data actions from Activity Resolver Table for a package
    Args:
        package_name (str): The name of the package to get actions for
    Returns:
        list[str]: A list of all non-data actions from the Activity Resolver
        Table for the package
    """

Contributing

Contributions are welcome!

Acknowledgments

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

mcp_server_android-0.2.1.tar.gz (11.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

mcp_server_android-0.2.1-py3-none-any.whl (15.4 kB view details)

Uploaded Python 3

File details

Details for the file mcp_server_android-0.2.1.tar.gz.

File metadata

  • Download URL: mcp_server_android-0.2.1.tar.gz
  • Upload date:
  • Size: 11.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.13

File hashes

Hashes for mcp_server_android-0.2.1.tar.gz
Algorithm Hash digest
SHA256 4f2ceeeb0c57463f18610f27bd35f93078c6b6602e9d21c285a1c9885581ae9d
MD5 1113155aa6a8f5685185cffa692d2141
BLAKE2b-256 9beee859e3eb58debac2c55a759628dd7655523f7a6bc380528ce0a69194e1d8

See more details on using hashes here.

File details

Details for the file mcp_server_android-0.2.1-py3-none-any.whl.

File metadata

File hashes

Hashes for mcp_server_android-0.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 e303992518811d9316a59242662aef925ce09cbf07e1f3b905e44b8ffb9b2563
MD5 8bdd6ad4ab55580818394536190f9b07
BLAKE2b-256 bc53fd343da63968cb262246c15e6181d4d4e0cd4b111ed87b970c031a9018ac

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page