adb-automation-mcp
An MCP server exposing Android Debug Bridge (ADB) capabilities as typed, documented tools and resources.
Full documentation — architecture, decision log, per-tool reference, and client integration guides.
Install
uvx adb-automation-mcp
# or
pip install adb-automation-mcp
Quickstart
uv sync
uv run adb-automation-mcp
Talks to the adb binary on PATH by default. For real-device setup, the fake
backend, the full tool list, and per-client integration guides (Claude Code, Claude
Desktop, ...), see the docs site.
Installation prompt
Prefer not to configure this by hand? Hand the
AI-assisted install prompt
to an AI coding assistant that can run shell commands and edit MCP config (Claude
Code, GitHub Copilot in agent mode, ...) — it detects/installs uv, resolves adb's
absolute path, and registers this server for you.
MCP client configuration
Add this to your client's mcp.json (e.g. Claude Desktop's config, or a Claude Code
project's .mcp.json). Every real-device env var is shown below — all are optional,
see the full reference for
defaults and details (including ADB_AUTOMATION_BACKEND, a testing-only switch to the fake
in-memory backend, not something a real client config needs):
{
"mcpServers": {
"adb-automation-mcp": {
"command": "uvx",
"args": ["adb-automation-mcp"],
"env": {
"ADB_AUTOMATION_ADB_PATH": "/path/to/platform-tools/adb",
"ADB_AUTOMATION_TIMEOUT_S": "10",
"ADB_AUTOMATION_ALLOW_DESTRUCTIVE": "1",
"ADB_AUTOMATION_LOCAL_ROOT": "/path/to/local/root"
}
}
}
}
ADB_AUTOMATION_ADB_PATH— explicit path to theadbbinary; MCP clients usually launch the server with a minimal environment that doesn't include your shell'sPATHcustomizations, so set this explicitly rather than relying onPATHresolutionADB_AUTOMATION_TIMEOUT_S— per-command timeout in secondsADB_AUTOMATION_ALLOW_DESTRUCTIVE=1— allowdestructive-category tools (e.g.remove_user); denied by defaultADB_AUTOMATION_LOCAL_ROOT— the folder on this machine where file-saving tools (pull_file,stop_log_session,take_screenshot) are allowed to write; unset means those tools refuse to write anywhere
Testing
uv run pytest # meta (Layer 0), unit (Layer 1), and e2e (Layer 3) tests
uv run mypy src # strict type checking
uv run ruff check . # lint
uv run mkdocs build --strict # docs site
Tools
87 tools. Full signatures, docstrings, and worked examples are in the
tool reference.
Tools marked † are destructive — not registered unless
ADB_AUTOMATION_ALLOW_DESTRUCTIVE=1.
| Module | Tools |
|---|---|
activities (3) |
start_activity, resolve_activity, get_foreground_activity |
android_services (4) |
start_service, start_foreground_service, stop_service, get_service_status |
anr (1) |
get_anr_reports |
app_data (2) |
clear_app_data†, clear_app_cache |
broadcasts (1) |
send_broadcast |
connection (6) |
restart_adb_server, connect_device, disconnect_device, restart_adbd_as_root†, restart_adbd_as_shell, wait_for_device_state |
content (1) |
query_content |
date_time (1) |
get_date_time |
device_info (1) |
list_connected_devices |
diagnostics (2) |
check_adb_available, get_adb_version |
displays (3) |
list_displays, get_display_size, get_display_density |
files (2) |
pull_file, push_file |
input (4) |
tap, swipe, input_text, press_key |
instrumentation (1) |
run_instrumentation |
logger (6) |
read_logs, clear_logs, get_log_buffer_size, read_package_logs, start_log_session, stop_log_session |
network (3) |
list_network_interfaces, get_routes, get_connectivity_state |
packages (7) |
list_packages, install_apk, uninstall_package†, install_existing_for_user, get_package_path, get_package_info, set_package_enabled_state |
permissions (3) |
grant_permission, revoke_permission, get_package_permissions |
port_forwarding (6) |
create_forward, list_forwards, remove_forward, create_reverse, list_reverses, remove_reverse |
power (3) |
get_power_state, reboot_device†, wake_device |
processes (5) |
force_stop_app, kill_background_processes, list_processes, get_process_id, get_process_memory |
screen (2) |
take_screenshot, record_screen |
settings (2) |
get_setting, set_setting |
system_properties (4) |
get_property, list_properties, get_property_metadata, set_property |
ui (3) |
dump_ui_hierarchy, find_ui_elements, wait_for_ui_element |
user (11) |
get_current_user, dump_user, user_info, list_users, switch_user, create_user, remove_user†, get_user_capabilities, start_user, is_user_stopped, get_user_state |
License
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file adb_automation_mcp-0.2.0.tar.gz.
File metadata
- Download URL: adb_automation_mcp-0.2.0.tar.gz
- Upload date:
- Size: 449.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
401eff5e4d956b0e839dbd9437a09bf491acea9c5c8346d11701078b8084c721
|
|
| MD5 |
3f15926e530c98fb0d21af6356056a3e
|
|
| BLAKE2b-256 |
a4df702f0b01058a28b75ba5a615c460497a10a875dcdcdde3cfe4c72dfbbf96
|
Provenance
The following attestation bundles were made for adb_automation_mcp-0.2.0.tar.gz:
Publisher:
publish.yml on allaudin/adb-automation-mcp
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
adb_automation_mcp-0.2.0.tar.gz -
Subject digest:
401eff5e4d956b0e839dbd9437a09bf491acea9c5c8346d11701078b8084c721 - Sigstore transparency entry: 2748311695
- Sigstore integration time:
-
Permalink:
allaudin/adb-automation-mcp@e7aedb8ac6d456cbe21a5a0d65c831077cbf3cac -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/allaudin
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@e7aedb8ac6d456cbe21a5a0d65c831077cbf3cac -
Trigger Event:
release
-
Statement type:
File details
Details for the file adb_automation_mcp-0.2.0-py3-none-any.whl.
File metadata
- Download URL: adb_automation_mcp-0.2.0-py3-none-any.whl
- Upload date:
- Size: 238.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fdd4fb4735789a5c33bfc3662ee5e1e6c4402c90344be771415fc2b7818f82f8
|
|
| MD5 |
0261e25547d0ad784f49b0ddbb86f1e2
|
|
| BLAKE2b-256 |
c981d5a45b9ecaf6e5ccb8aacfe52b1d3b3f8d1d1bd220eae718c86be752b237
|
Provenance
The following attestation bundles were made for adb_automation_mcp-0.2.0-py3-none-any.whl:
Publisher:
publish.yml on allaudin/adb-automation-mcp
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
adb_automation_mcp-0.2.0-py3-none-any.whl -
Subject digest:
fdd4fb4735789a5c33bfc3662ee5e1e6c4402c90344be771415fc2b7818f82f8 - Sigstore transparency entry: 2748311750
- Sigstore integration time:
-
Permalink:
allaudin/adb-automation-mcp@e7aedb8ac6d456cbe21a5a0d65c831077cbf3cac -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/allaudin
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@e7aedb8ac6d456cbe21a5a0d65c831077cbf3cac -
Trigger Event:
release
-
Statement type: