Android Mcp Server — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited Android Mcp Server (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
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)
git clone https://github.com/minhalvp/android-mcp-server.git
cd android-mcp-serverThis project uses uv for project management via various methods of installation.
uv python install 3.11
uv syncThe server supports flexible device configuration with multiple usage scenarios.
1. Automatic Selection (Recommended for single device)
2. Manual Device Selection
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
cp config.yaml.example config.yamlconfig.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 outTo find your device identifier, run:
adb devicesExample output:
List of devices attached
13b22d7f device
emulator-5554 deviceUse the first column value (e.g., 13b22d7f or emulator-5554) as the device name.
| 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.
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:
%APPDATA%\Claude\claude_desktop_config.json~/Library/Application Support/Claude/claude_desktop_config.jsonmcpServers section:{
"mcpServers": {
"android": {
"command": "path/to/uv",
"args": ["--directory", "path/to/android-mcp-server", "run", "server.py"]
}
}
}Replace:
path/to/uv with the actual path to your uv executablepath/to/android-mcp-server with the absolute path to where you cloned thisrepository
<https://github.com/user-attachments/assets/c45bbc17-f698-43e7-85b4-f1b39b8326a8>
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_command(command: str) -> str:
"""
Executes an ADB command and returns the output.
Args:
command (str): The ADB 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
"""Contributions are welcome!
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.