Enhanced ADB MCP Server for Flutter/Android Development - 60+ tools for UI testing, debugging, and visual QA
Project description
Enhanced ADB MCP Server for Flutter/Android Development
A comprehensive MCP server for controlling Android devices via ADB, specifically designed for Flutter development, UI testing, and visual QA workflows.
Quick Start
# Install from PyPI
pip install r-adb-mcp-server
# Or run directly with uvx (no installation needed)
uvx r-adb-mcp-server
Then add to your MCP client configuration (Claude Desktop, Cursor, etc.) - see Configuration section below.
Features
📱 Device Management
- List connected devices with details
- Get comprehensive device info (model, Android version, battery, etc.)
- Screen specifications with DP calculations
📸 Visual Capture
- Screenshots (base64 or file)
- Screen recording with start/stop control
- Capture with metadata for Figma comparison
🔍 UI Inspection
- Full UI hierarchy dump (XML)
- Find elements by text or resource ID
- Get all clickable elements with coordinates
- Extract all visible text for verification
🎯 Input & Interaction
- Tap, double-tap, long-press
- Swipe and scroll (up/down/to-text)
- Text input and clear
- Key events (HOME, BACK, ENTER, etc.)
- Tap elements by text or ID
📦 App Management
- Launch/stop/clear apps
- Install/uninstall APKs
- List packages with filtering
- Get current activity
- App info (version, install date, etc.)
🐛 Debugging & Logs
- Logcat with filtering (tag, level, package)
- Flutter-specific logs
- Crash logs extraction
- ANR traces
⚡ Performance Profiling
- Memory usage per app
- CPU monitoring
- GPU rendering info
- Frame stats for jank detection
- Battery statistics
🌐 Network Control
- Network info (WiFi status, IP)
- Toggle WiFi/Airplane mode
- Set/clear HTTP proxy
⚙️ Developer Options
- Animation scale (speed up tests)
- Show taps (for recordings)
- Show layout bounds
- Screen rotation control
- Change resolution/density
♿ Accessibility Testing
- Font scale adjustment
- TalkBack toggle
- High contrast mode
- Color inversion
📍 Emulator Features
- GPS location spoofing
- Simulate SMS/calls
Prerequisites
-
ADB installed and in your PATH
adb version -
Android device/emulator connected with USB debugging enabled
adb devices -
Python 3.10+ with
uv(recommended) orpip
Installation
From PyPI (Recommended)
# Install globally with pip
pip install r-adb-mcp-server
# Or use with uvx (no installation needed)
uvx r-adb-mcp-server
From Source
cd adb-mcp-server
# Using uv (recommended)
uv sync
# Or using pip
pip install -e .
Configuration
Claude Desktop
Using installed package (recommended):
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Linux: ~/.config/Claude/claude_desktop_config.json
{
"mcpServers": {
"adb": {
"command": "uvx",
"args": ["r-adb-mcp-server"]
}
}
}
Or if installed with pip:
{
"mcpServers": {
"adb": {
"command": "r-adb-mcp-server"
}
}
}
Using from source:
{
"mcpServers": {
"adb": {
"command": "uv",
"args": ["--directory", "/path/to/adb-mcp-server", "run", "python", "src/adb_mcp_server/server.py"]
}
}
}
Cursor IDE
Add to .cursor/mcp.json:
Using installed package (recommended):
{
"mcpServers": {
"adb": {
"command": "uvx",
"args": ["r-adb-mcp-server"]
}
}
}
Using from source:
{
"mcpServers": {
"adb": {
"command": "uv",
"args": ["--directory", "/path/to/adb-mcp-server", "run", "python", "src/adb_mcp_server/server.py"]
}
}
}
Claude Code
Using installed package (recommended):
claude mcp add adb -- uvx r-adb-mcp-server
Using from source:
claude mcp add adb -- uv --directory /path/to/adb-mcp-server run python src/adb_mcp_server/server.py
GitHub Copilot
Using installed package (recommended):
Add to your VS Code settings (.vscode/settings.json or User Settings):
{
"github.copilot.chat.mcp.servers": {
"adb": {
"command": "uvx",
"args": ["r-adb-mcp-server"]
}
}
}
Or if installed with pip:
{
"github.copilot.chat.mcp.servers": {
"adb": {
"command": "r-adb-mcp-server"
}
}
}
Using from source:
{
"github.copilot.chat.mcp.servers": {
"adb": {
"command": "uv",
"args": ["--directory", "/path/to/adb-mcp-server", "run", "python", "src/adb_mcp_server/server.py"]
}
}
}
Note: Make sure you have GitHub Copilot Chat extension installed and MCP support enabled in VS Code.
Available Tools (60+)
Device Management
| Tool | Description |
|---|---|
list_devices() |
List all connected devices |
get_device_info() |
Comprehensive device details |
get_screen_specs() |
Screen size, density, DP values |
Visual Capture
| Tool | Description |
|---|---|
screenshot() |
Capture as base64 PNG |
screenshot_to_file(filename) |
Save screenshot to file |
start_screen_record(duration, filename) |
Start recording (max 180s) |
stop_screen_record() |
Stop recording |
pull_recordings(local_dir) |
Download recordings |
capture_screen_for_comparison(name) |
Screenshot with metadata |
UI Inspection
| Tool | Description |
|---|---|
get_ui_hierarchy() |
Full UI tree as XML |
get_clickable_elements() |
All tappable elements with coordinates |
find_element_by_text(text) |
Find by text content |
find_element_by_id(resource_id) |
Find by resource ID |
get_all_text_on_screen() |
Extract all visible text |
Input & Interaction
| Tool | Description |
|---|---|
tap(x, y) |
Tap at coordinates |
tap_element(text, resource_id) |
Tap by element identifier |
double_tap(x, y) |
Double tap |
long_press(x, y, duration) |
Long press |
swipe(x1, y1, x2, y2, duration) |
Swipe gesture |
scroll_down() / scroll_up() |
Scroll screen |
scroll_to_text(text) |
Scroll until text visible |
input_text(text) |
Type text |
clear_text_field(length) |
Clear current field |
press_key(keycode) |
Press any key |
press_back() / press_home() |
Navigation buttons |
App Management
| Tool | Description |
|---|---|
get_current_activity() |
Current foreground app |
launch_app(package) |
Launch by package name |
launch_activity(package, activity) |
Launch specific activity |
force_stop_app(package) |
Force stop app |
clear_app_data(package) |
Clear app data |
list_packages(filter, include_system) |
List installed apps |
get_app_info(package) |
App details |
install_apk(path) |
Install APK |
uninstall_app(package) |
Uninstall app |
Debugging & Logs
| Tool | Description |
|---|---|
get_logcat(lines, filter_tag, level) |
Get logs |
clear_logcat() |
Clear log buffer |
get_flutter_logs(lines) |
Flutter-specific logs |
get_crash_logs(package) |
Crash/exception logs |
get_anr_traces() |
ANR traces |
Performance
| Tool | Description |
|---|---|
get_memory_info(package) |
Memory usage |
get_cpu_info() |
CPU usage |
get_battery_stats() |
Battery details |
get_gpu_info() |
GPU rendering info |
get_frame_stats(package) |
Frame timing stats |
Network
| Tool | Description |
|---|---|
get_network_info() |
WiFi status, IP |
toggle_wifi(enable) |
Enable/disable WiFi |
toggle_airplane_mode(enable) |
Toggle airplane mode |
set_proxy(host, port) |
Set HTTP proxy |
clear_proxy() |
Clear proxy |
Developer Options
| Tool | Description |
|---|---|
toggle_show_taps(enable) |
Visual tap feedback |
toggle_show_layout_bounds(enable) |
Show layout bounds |
set_animation_scale(scale) |
Animation speed (0-1) |
rotate_screen(orientation) |
portrait/landscape/auto |
change_screen_size(w, h) |
Override resolution |
reset_screen_size() |
Reset to default |
change_density(dpi) |
Override DPI |
reset_density() |
Reset to default |
Accessibility
| Tool | Description |
|---|---|
set_font_scale(scale) |
System font size |
toggle_talkback(enable) |
Screen reader |
toggle_high_contrast(enable) |
High contrast text |
toggle_color_inversion(enable) |
Invert colors |
Files & Shell
| Tool | Description |
|---|---|
push_file(local, remote) |
Copy to device |
pull_file(remote, local) |
Copy from device |
list_files(path) |
List directory |
read_file(path) |
Read text file |
shell_command(cmd) |
Run any shell command |
reboot_device(mode) |
Reboot device |
Emulator Only
| Tool | Description |
|---|---|
set_location(lat, lng) |
Fake GPS location |
send_sms(number, message) |
Simulate SMS |
simulate_call(number) |
Simulate incoming call |
Example Prompts
Basic Usage
- "Take a screenshot of my phone"
- "What's the current screen resolution and density?"
- "List all installed apps containing 'flutter'"
- "What's currently on screen? Get all the text"
UI Testing
- "Find the login button and tap it"
- "Scroll down until you find 'Settings'"
- "Get all clickable elements and their positions"
- "Type 'test@email.com' into the current field"
Debugging
- "Show me the last 50 Flutter logs"
- "Are there any crash logs for my app?"
- "What's the memory usage of com.myapp?"
Visual QA
- "Capture this screen for comparison with Figma"
- "Take a screenshot and tell me about the UI structure"
- "Set the font scale to 1.3 and take a screenshot for accessibility testing"
Performance Testing
- "Set animation scale to 0 and run through the app"
- "Get frame stats for my app - is there any jank?"
- "What's the GPU rendering performance?"
Device Simulation
- "Change the screen to 1080x1920 to simulate a smaller phone"
- "Rotate to landscape mode"
- "Set location to San Francisco (37.7749, -122.4194)"
Extending
Add new tools easily:
@mcp.tool()
def my_custom_tool(param: str, device_serial: str | None = None) -> str:
"""Description shown to AI"""
return run_adb(["shell", "your-command", param], device_serial)
Tips for Flutter Development
- Speed up tests: Use
set_animation_scale(0)to disable animations - Visual QA: Use
capture_screen_for_comparison()with Figma MCP - Debug logs:
get_flutter_logs()filters Flutter-specific output - Hot reload: Keep
flutter runterminal open, use device for interaction - Responsive testing: Use
change_screen_size()andchange_density()
License
MIT
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
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 r_adb_mcp_server-0.1.2.tar.gz.
File metadata
- Download URL: r_adb_mcp_server-0.1.2.tar.gz
- Upload date:
- Size: 16.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5ab2f73e7f43355dd72db159c66e462e54d0b98897a267b8097fd5b55b1e686c
|
|
| MD5 |
0018f5f8f470c1a8e1e2fd01f471bd5f
|
|
| BLAKE2b-256 |
98842294696a24676d62e87767b2890e51c678aea1d333d1d0fc463314033576
|
File details
Details for the file r_adb_mcp_server-0.1.2-py3-none-any.whl.
File metadata
- Download URL: r_adb_mcp_server-0.1.2-py3-none-any.whl
- Upload date:
- Size: 16.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8d472e4bcc1532df9813448aa2fc20b4a8222afe10e41c0584857034da750e84
|
|
| MD5 |
97e94a66a2897125640962f3d25f1655
|
|
| BLAKE2b-256 |
3e92534948a52d611cdecbf22db5a4fbef32bd2b04833c10c597f27e4e933de7
|