@tool decorated Android control for Strands Agents & DevDuck.
Drive any adb-connected Android device (phone / tablet / emulator) from an LLM — let your agent text people, read notifications, launch apps, take screenshots, drive the UI, take physical photos, stream logcat events, mutate settings.
📘 Full docs: cagataycali.github.io/strands-adb
Install
pip install strands-adb
brew install android-platform-tools # or apt / pacman / winget
Enable USB debugging on your phone, plug it in, accept the trust dialog.
adb devices
# 59230DLCH0012Z device
[](https://github.com/cagataycali/awesome-strands-agents)
Quickstart
from strands import Agent
from strands_adb import adb
agent = Agent(tools=[adb])
agent("take a screenshot of my phone and describe what's on screen")
DevDuck (1 line)
export DEVDUCK_TOOLS="strands_adb:adb;strands_tools:shell"
devduck "open whatsapp and read the last message from mom"
MCP Server (Claude Code / Claude Desktop / Cursor / any MCP client)
Expose adb + recorder over the Model Context Protocol:
No install needed — just uvx:
# stdio mode (default) — for Claude Code / Claude Desktop
uvx strands-adb
# HTTP mode — multi-client, background-capable
uvx strands-adb --http --port 8000
Claude Code:
claude mcp add strands-adb -- uvx strands-adb
Claude Desktop (claude_desktop_config.json):
{
"mcpServers": {
"strands-adb": {
"command": "uvx",
"args": ["strands-adb"]
}
}
}
Prefer pip?
pip install "strands-adb[mcp]"
strands-adb-mcp # stdio
strands-adb-mcp --http --port 8000 # HTTP
Now any MCP client can control your Android device — screenshots, UI automation, app control, sensors, everything.
👁️ Agent can SEE the screen
screenshot returns a proper Converse API image block — the same format as strands_tools.image_reader. The agent doesn't just get a file path, it actually receives the pixels and reasons over them:
agent("take a screenshot and tell me what app is open")
# → adb(action="screenshot") returns PNG bytes in Converse image block
# → vision model reads it → "You're on the WhatsApp chat with Mom..."
Disable with include_image=False if you just want the file path.
🎬 Record What The Agent Does
Non-blocking screen recording — start before the agent acts, stop after. Review the video to see what actually happened.
adb(action="screen_record_start", output_path="/tmp/run.mp4")
agent("open whatsapp and reply to mom") # agent works while recording
result = adb(action="screen_record_stop")
print(result["merged_path"]) # single mp4, auto-stitched past 180s
90+ Actions, One Tool
| Domain | Actions |
|---|---|
| Device | list, select, info, battery, wake, unlock |
| UI | tap, swipe, type, key, gestures, smart_tap |
| Screen | screenshot (image block), screen_record, screen_record_start/stop (bg), frames, ui_dump, ui_find |
| Apps | list, launch, kill, install, uninstall, clear_data |
| Files | push, pull, ls |
| Intents | open_url, share_text, start_activity |
| Camera | camera_photo (image block), camera_video |
| Sensors | accelerometer, gyro, light, pressure, step counter |
| Thermals | CPU / skin / battery / GPU / modem temps |
| Settings | brightness, ringer, airplane, bluetooth, any setting_put |
| Logs | logcat one-shot, log_stream → event_bus, notifications_parsed |
| A11y | enable services, captions, magnification, font scale |
| Comms | dial, sms_compose, media_control, volume |
Docs
- Installation
- Quickstart
- Connect a Device — USB / wireless / SSH
- Vision — screenshots as image blocks
- Smart Tap — semantic UI automation
- Camera — physical photos
- Logcat Streaming — event bus integration
- DevDuck Integration
- Safety — production hardening
- Examples — WhatsApp, notifications, autonomous
- Architecture
- API Reference
Safety
- Dry-run mode for destructive ops
- Allowlist/denylist for package operations
- No plaintext PIN/password storage
- Full audit logging of every adb invocation
License
MIT
Metadata
Release files for strands-adb 0.19.4
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 | Actions |
|---|---|---|---|---|
| strands_adb-0.19.4.tar.gz | 116.3 kB | Without provenance | Details for strands_adb-0.19.4.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| strands_adb-0.19.4-py3-none-any.whl | Python 3 | none | any | Details for strands_adb-0.19.4-py3-none-any.whl |
Total release size: 200.5 kB
Release files / strands_adb-0.19.4.tar.gz
| Download URL | strands_adb-0.19.4.tar.gz |
|---|---|
| Size | 116.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
0c406fef1ceef4aef97c78d11c96b2057abab8792d727dee021fcc54a4e4eea3
|
|
BLAKE2b-256 checksum How to use checksums |
4511591686892e9f178002e00bb224a03bd2af8eef4bd93d39b13dd977d86be6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.8.11
|
Release files / strands_adb-0.19.4-py3-none-any.whl
| Download URL | strands_adb-0.19.4-py3-none-any.whl |
|---|---|
| Size | 84.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
b33165437dfea2e62db06cc8b9c98152f724aa7b8a875691275b423374b5ef50
|
|
BLAKE2b-256 checksum How to use checksums |
79b48667aa861d599c88eff24149781b6cf76f49534ae58bd1a73405fda2e690
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.8.11
|
Security for strands-adb 0.19.4
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.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A 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.