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
111 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 |
binder (2) |
get_binder_call_stats, reset_binder_call_stats |
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 |
debugging (6) |
get_process_exit_history, set_debug_app, clear_debug_app, list_jdwp_processes, capture_native_backtrace, capture_native_tombstone |
device_info (1) |
list_connected_devices |
diagnostics (3) |
check_adb_available, get_adb_version, generate_bugreport |
displays (3) |
list_displays, get_display_size, get_display_density |
files (2) |
pull_file, push_file |
graphics (2) |
get_frame_stats, reset_frame_stats |
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 |
memory (8) |
get_app_memory_summary, get_app_memory_details, get_system_memory_summary, get_memory_history, capture_heap_dump, set_heap_watch, clear_heap_watch, get_memory_maps |
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 |
profiling (2) |
start_method_profile, stop_method_profile |
screen (2) |
take_screenshot, record_screen |
settings (2) |
get_setting, set_setting |
system_properties (4) |
get_property, list_properties, get_property_metadata, set_property |
tracing (3) |
capture_system_trace, start_ipc_trace, stop_ipc_trace |
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
Metadata
Release files for adb-automation-mcp 1.0.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| adb_automation_mcp-1.0.1.tar.gz | 505.2 kB | With provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| adb_automation_mcp-1.0.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 802.6 kB
Release files / adb_automation_mcp-1.0.1.tar.gz
| Download URL | adb_automation_mcp-1.0.1.tar.gz |
|---|---|
| Size | 505.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
3db175c11a0d7e0b1a4f323ae463d73d9bd9de7b8d5f89c38cf3c6d4e1099b0c
|
|
BLAKE2b-256 checksum How to use checksums |
864952cca09781cc94dd4b56e8d521f61a5e5794965c91446d40f23f7dec7261
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 7, 2026.
Transparency logRelease files / adb_automation_mcp-1.0.1-py3-none-any.whl
| Download URL | adb_automation_mcp-1.0.1-py3-none-any.whl |
|---|---|
| Size | 297.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
ed026f13f7e42ebcaccf703b2d3c30303824d043139903403567b7569c3c46d2
|
|
BLAKE2b-256 checksum How to use checksums |
83bd437bcef4228baad4fceeeaf4bd534ecd0a32e168c60b8dc800447d567240
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 7, 2026.
Transparency logSecurity for adb-automation-mcp 1.0.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for adb_automation_mcp-1.0.1.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 7, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.