Android Debug Bridge MCP
This server provides MCP tools for Android device automation via ADB. Capabilities include:
Test Organization: Create named test folders to manage screenshots and artifacts per test run.
App Management: List installed apps matching a name pattern; open apps by package name with automatic launcher-activity resolution.
Screen Capture: Capture screenshots saved to test folders with step labels; capture UI hierarchy dumps for inspection.
Input Simulation: Send key events (BACK, HOME, ENTER, DELETE); tap at coordinates; input text; scroll in all directions (up, down, left, right).
Provides tools for controlling Android devices via ADB, enabling automation testing, app management, screen capture, UI analysis, and input simulation including taps, text input, and scrolling.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Android Debug Bridge MCPtake a screenshot and save it as step '001_homepage'"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Android Debug Bridge MCP
Control Android devices and emulators from an AI agent — over MCP or straight from the terminal.
Both surfaces share one engine, so anything you can do as an MCP tool call you can also do as a shell command, and vice versa.
Surface | Entry point | Best for |
MCP server |
| Screenshots rendered inline in the conversation, step-by-step reasoning |
CLI |
| Chained flows in one shell call, scripts, CI |
Features
UI automation that survives layout changes — parse the accessibility tree, find elements by label/description/resource-id, and tap them by name instead of by coordinate
Occlusion-aware taps — the accessibility tree has no z-order, so an element under a bottom bar still claims those pixels;
ui tapfinds an uncovered point inside the target and refuses (instead of silently hitting the overlay) when there is noneNormalized coordinates —
0.5 0.7means the same point on any screen size; raw pixels still workInput — tap, double tap, long press, swipe, scroll, type, clear fields, and 40+ hardware/software keys
Apps — list, launch (with launcher-activity resolution), stop, restart, clear data, install/uninstall, inspect versions, grant/revoke runtime permissions
Screen — screenshots to disk and base64, screen recording, rotation, wake/sleep, PIN unlock
Compressed screenshots — the full-resolution PNG goes to disk, the caller gets a downscaled copy: ~90% fewer bytes across the wire, which on an MCP client is the difference between a screenshot costing a few hundred tokens and costing a few hundred thousand
Marked screenshots — a ring where the tap landed, drawn on the returned image: Android's own touch indicator exists only while the finger is down, so a screenshot taken afterwards never shows it
Emulator console —
emu finger touchanswers a fingerprint prompt on an AVD, andemu sendreaches the rest of the virtual hardwareSystem — Wi-Fi/data/airplane toggles, logcat with package and priority filters, deeplinks, broadcasts, file push/pull, settings read/write, props, processes, memory, battery, notifications
Devices — list, TCP/IP connect, wait-for-boot, reboot, and multi-device targeting by serial, serial prefix, transport id or model name
Test artifacts — per-run folders with numbered screenshots
Agent skills — ready-to-install
SKILL.mdguides for both surfaces, also served by the CLI itself
Related MCP server: Android MCP Server
Installation
npm install -g android-debug-bridge-mcpPrerequisites: ADB on your PATH (Android platform-tools), and a device with USB debugging enabled or a running emulator.
sharp is an optional dependency. When it installs, screenshots come back as JPEG or WebP; when it does not (musl, restricted CI, --no-optional), a built-in PNG resizer takes over and everything keeps working — only the output is a bit larger.
Verify everything at once:
adb-agent doctorok adb adb — Android Debug Bridge version 1.0.41
ok workdir /home/tiago/project
ok screenshots sharp — max width 720, format auto, quality 60
ok devices 2 ready, targeting emulator-5554 (Pixel_7)
ok uiautomator 24 elements on screenCLI usage
adb-agent <group> <command> [arguments] [flags]adb-agent device list --json
adb-agent app launch com.android.settings
adb-agent ui find "Wi-Fi"
adb-agent ui tap "Wi-Fi"
adb-agent input text "hello world" --submit
adb-agent screen shot --test login --step 001_home
adb-agent system logcat --package com.example.app --priority E --lines 50Groups: device, ui, input, app, screen, system, test, skills, doctor, plus batch.
Run adb-agent <group> --help for a group's commands.
Several devices at once
With one device connected nothing changes. With more than one, every command
needs to know which one it means — otherwise adb answers more than one device/emulator and stops there. Point at it with --device, which accepts
anything that identifies the device:
adb-agent device list
# emulator-5554 device Pixel_7 [emulator]
# R58M12ABCDE device SM_A525M
adb-agent --device pixel screen shot # by model
adb-agent --device R58M app launch com.example.app # by serial prefix
adb-agent --device emulator-5554 ui tap "Wi-Fi" # by full serialADB_SERIAL (or ANDROID_SERIAL) sets the default for a whole session, and
device list marks the device the other commands will use with a *. The list
is cached for a few seconds, so the extra lookup costs nothing in a batch —
--refresh forces a new one.
Screenshots
screen shot writes the untouched PNG to disk and reports a compressed copy:
adb-agent screen shot --test login --step 001_home
# /work/login/001_home_step.png (1487233 bytes, 1080x2400)
# returned 41902 bytes image/jpeg 720x1600 — 97% smaller than the 1487233 byte PNG (sharp)--max-width, --quality and --format auto|jpeg|webp|png|none override the
defaults per call, --no-compress returns the original bytes, and
--save-compressed also writes the small copy next to the PNG.
Marking where a tap landed
Android draws its touch indicator only while the finger is down, so a
screenshot taken after the action never contains it. --mark-tap draws the
marker instead:
adb-agent input tap 0.5 0.35
adb-agent screen shot --out step.png --mark-tap --save-marked
# step.png (342217 bytes, 1080x2400)
# step.marked.png
# marked (540, 840)--mark-last <n> circles the last N gestures, numbered in order, and
--mark <x,y> (repeatable) circles arbitrary points; swipes and scrolls get an
arrow along the gesture. The gesture history is shared between commands, so the
tap and the screenshot do not have to run in the same process.
--mark-tap draws the newest gesture in the history, with no notion of whether
the screen moved on since: on a capture taken after a click that navigated, the
ring lands on the destination screen at a point nobody touched. Mark the screen
that received the touch and leave the destination capture clean.
The PNG on disk stays untouched — only the returned image carries the marker,
plus a <name>.marked.png sibling when --save-marked is passed.
For a recording, turn on the device's live indicator instead:
adb-agent input touches on # --pointer also enables the crosshair overlay
adb-agent screen record 10 --out flow.mp4
adb-agent input touches offEmulator console
adb-agent emu finger touch 1 # answer a fingerprint prompt
adb-agent emu finger remove
adb-agent emu send geo fix -46.63 -23.55 # any other console commandThe finger id must already be enrolled on the AVD (Settings → Security), and the whole group refuses to run against a physical device, which has no console.
Chaining
Every command exits non-zero on failure, so shell chaining just works:
adb-agent app restart com.example.app \
&& adb-agent ui wait "Email" --timeout 15000 \
&& adb-agent ui tap "Email" \
&& adb-agent input text "user@example.com"batch does the same in one process, with one report and a wait <ms> step for pauses:
adb-agent batch \
"app restart com.example.app" \
"ui wait Email --timeout 15000" \
"ui tap Email" \
"input text user@example.com" \
"wait 500" \
"ui tap Continue" \
"screen shot --test login --step 002_submitted" \
--jsonSteps stop at the first failure unless you pass --continue-on-error, and can come from a file (--file steps.txt) or stdin (batch -).
JSON contract
{"ok":true,"command":"ui.tap","summary":"tapped \"Sign in\" at (540, 1284)","data":{…}}
{"ok":false,"command":"ui.tap","error":{"message":"no element matches \"Sign in\"","name":"Error"}}One line, always the same shape — pipe it straight into jq:
adb-agent ui dump --json | jq -r '.data.elements[] | select(.clickable) | .label'MCP usage
Claude Code
claude mcp add --scope project android-debug-bridge -- npx android-debug-bridge-mcpOr in ~/.claude/mcp.json:
{
"mcpServers": {
"android-debug-bridge": {
"command": "npx",
"args": ["android-debug-bridge-mcp"]
}
}
}Claude Desktop
Windows: %APPDATA%\Claude\claude_desktop_config.json
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Linux: ~/.config/Claude/claude_desktop_config.json
{
"mcpServers": {
"android-debug-bridge": {
"command": "npx",
"args": ["android-debug-bridge-mcp"]
}
}
}Cursor
Settings → Extensions → MCP → add a server with command npx and args ["android-debug-bridge-mcp"].
Tools
62 tools grouped by area — devices, UI, input, apps, screen, system, emulator console, artifacts. Every device-facing tool takes an optional device (serial, prefix, transport id or model); list_devices shows what is connected and which one is the default target. Input tools append a fresh UI snapshot to their result so the agent sees the new screen without a second call (disable with ADB_AUTO_UI=false).
capture_screenshot returns the compressed image and accepts max_width, quality, format and save_compressed when a call needs more (or less) detail than the defaults. It also draws markers: mark_last_touch circles the gesture just sent, mark_last_count the last N, and markers any point you name.
emu_finger_touch, emu_finger_remove and emu_console drive the emulator console; set_touch_feedback toggles the device's own touch indicator for recordings.
See skills/adb-mcp/SKILL.md for the full list and the recommended flow.
Agent skills
Two SKILL.md guides ship with the package:
cp -r node_modules/android-debug-bridge-mcp/skills/adb-cli .claude/skills/
cp -r node_modules/android-debug-bridge-mcp/skills/adb-mcp .claude/skills/The CLI also prints them, so an agent that has the CLI but not the skill installed can read them without hunting for the path:
adb-agent skills list
adb-agent skills get adb-cliSee skills/README.md for details.
Environment
Variable | Effect |
| Path to the adb binary (default: |
| Default device — serial, prefix or model (also honours |
| How long the device list is cached, in ms (default 3000, |
| Delay after UI-mutating actions in ms (default 300) |
| Pause after each batch action in ms (default 300, |
| Where screenshots and recordings are written (default cwd) |
| Directory to move to when the working directory is unusable |
| Width of the returned screenshot (default 720, |
| Lossy quality 1..100 for jpeg/webp (default 60) |
|
|
| Colour of the screenshot markers as hex (default |
| Set to |
| Where the gesture history is stored (default: temp folder) |
| Set to |
| Override the folder holding the |
Troubleshooting
more than one device/emulator — two or more devices are connected and the
command did not say which one. Run adb-agent device list (or the
list_devices tool) and pass --device / the device parameter, or export
ADB_SERIAL. The error message already lists the candidates.
ENOENT: no such file or directory, uv_cwd — the directory the process was
started in no longer resolves. It happens under WSL when a Windows path drops
out of /mnt, and whenever a client spawns the server from a folder that is
later deleted. Both entry points detect it at startup and move to
ADB_ARTIFACT_DIR, ADB_FALLBACK_CWD, $HOME or the temp directory, warning
on stderr and carrying on. Set ADB_ARTIFACT_DIR to an absolute path to decide
where artifacts land instead of leaving it to the fallback.
Screenshots come back as PNG instead of JPEG — sharp is not installed
(check adb-agent doctor). Install it with npm install sharp, or keep the
built-in resizer and lower ADB_SCREENSHOT_MAX_WIDTH if the payload is still
too big.
adb executable not found — set ADB_PATH to the binary, which is the
usual fix under WSL when platform-tools live on the Windows side
(ADB_PATH=/mnt/c/Android/platform-tools/adb.exe).
Development
yarn install
yarn build # compile to dist/
yarn dev # watch mode
yarn start # run the MCP server
yarn cli -- doctorLicense
MIT
Available Tools
9 toolscapture_screenshotC
Capture a screenshot and save it to the test folder
| Name | Required | Description | Default |
|---|---|---|---|
| test_name | Yes | Name of the test folder where to save the screenshot | |
| step_name | Yes | Name of the step for the screenshot file (e.g., "001_login") |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the tool captures and saves a screenshot, implying a read-only operation that creates a file, but it doesn't disclose critical details such as file format, permissions needed, whether it overwrites existing files, error conditions, or any side effects. This leaves significant gaps for an agent to understand the tool's behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that directly states the tool's purpose without any wasted words. It is appropriately sized and front-loaded, making it easy to understand at a glance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of a screenshot tool with no annotations and no output schema, the description is incomplete. It lacks details on behavioral aspects (e.g., file handling, errors), usage context, and output information, which are essential for an agent to use the tool effectively in a testing environment with multiple sibling tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with clear descriptions for both parameters in the input schema. The description adds no additional meaning beyond what the schema provides, as it doesn't explain parameter relationships or usage examples. However, with high schema coverage, a baseline score of 3 is appropriate since the schema adequately documents the parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('capture a screenshot') and the outcome ('save it to the test folder'), providing a specific verb+resource combination. However, it doesn't explicitly distinguish this tool from sibling tools like 'capture_ui_dump' or 'create_test_folder', which might have overlapping purposes in a testing context.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., needing an active app or test folder), exclusions, or how it relates to siblings like 'capture_ui_dump' for different types of captures or 'create_test_folder' for folder setup.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
capture_ui_dumpB
Capture UI hierarchy dump from the device
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states what the tool does but doesn't describe behavioral traits such as whether it requires device connectivity, if it's read-only or has side effects, latency expectations, or output format. For a tool with zero annotation coverage, this is a significant gap in transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, clear sentence with no wasted words. It's front-loaded with the core purpose and efficiently communicates the essential action without unnecessary elaboration, making it highly concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of annotations and output schema, the description is incomplete for a tool that likely interacts with device UI. It doesn't explain what a 'UI hierarchy dump' entails, how the output is structured, or any behavioral context (e.g., device requirements). For a tool with no structured data support, the description should provide more completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0 parameters with 100% coverage, so no parameter documentation is needed. The description appropriately doesn't add parameter details beyond what the schema provides, earning a baseline score of 4 for tools with zero parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('capture') and resource ('UI hierarchy dump from the device'), providing a specific verb+resource combination. However, it doesn't explicitly differentiate from sibling tools like 'capture_screenshot' (which likely captures visual output rather than hierarchy data), leaving room for improvement in sibling distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites, context (e.g., device state), or comparisons to siblings like 'capture_screenshot' or 'list_apps', leaving the agent to infer usage scenarios without explicit direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_test_folderC
Create a test folder with the specified name
| Name | Required | Description | Default |
|---|---|---|---|
| test_name | Yes | Name of the test folder to create |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It states the tool creates a folder, implying a write/mutation operation, but doesn't disclose behavioral traits like permissions needed, whether it overwrites existing folders, error handling, or what happens upon success. This is a significant gap for a mutation tool with zero annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with zero waste. It's front-loaded with the core action and resource, making it easy to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given this is a mutation tool with no annotations, no output schema, and incomplete behavioral disclosure, the description is inadequate. It lacks details on what the tool returns, error conditions, or how it integrates with sibling tools (e.g., for testing workflows), leaving the agent with insufficient context for reliable use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with the parameter 'test_name' fully documented in the schema. The description adds minimal value beyond the schema by implying the name is used for folder creation, but doesn't provide additional context like naming constraints or examples. Baseline 3 is appropriate when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Create') and resource ('test folder'), specifying it creates a folder with a given name. It distinguishes from siblings like capture_screenshot or input_text by focusing on folder creation, though it doesn't explicitly differentiate from other potential folder-related tools (none listed).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. The description doesn't mention prerequisites, context (e.g., for testing purposes), or exclusions, leaving the agent to infer usage from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
input_keyeventB
Send key events (BACK, HOME, ENTER, DELETE)
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | Key event to send |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It states the action ('Send key events') but doesn't disclose behavioral traits like whether this requires device permissions, if it's synchronous/asynchronous, what happens on failure, or if it affects app state. For a mutation tool with zero annotation coverage, this is a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Extremely concise and front-loaded with a single, clear sentence. Every word earns its place by specifying the action and key examples without redundancy. No structural issues.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given one parameter with full schema coverage and no output schema, the description is minimally adequate. It states the purpose but lacks context on usage guidelines, behavioral transparency, or integration with siblings. For a simple tool, it's functional but could be more helpful.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with the schema fully documenting the single 'key' parameter (type, enum, description). The description lists the enum values but adds no meaning beyond what the schema provides, such as context for when to use each key. Baseline 3 is appropriate when schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Send') and resource ('key events') with specific examples (BACK, HOME, ENTER, DELETE). It distinguishes from siblings like input_tap or input_text by focusing on discrete key events rather than taps or text input. However, it doesn't explicitly differentiate from all siblings (e.g., input_scroll might also involve navigation).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives. The description implies usage for sending specific key events, but doesn't mention when to choose this over input_tap for navigation or input_text for text entry. No prerequisites or exclusions are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
input_scrollC
Perform scroll action
| Name | Required | Description | Default |
|---|---|---|---|
| direction | Yes | Direction to scroll |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. 'Perform scroll action' implies a mutation (scrolling changes viewport position), but it doesn't specify if this requires permissions, has side effects (e.g., triggering UI updates), or details on execution (e.g., smooth vs. instant scroll). The description is too minimal to convey behavioral traits beyond the basic action.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise with a single sentence 'Perform scroll action', which is front-loaded and wastes no words. It efficiently states the core action without redundancy, making it easy to parse quickly. This minimalism is appropriate for a simple tool, though it may sacrifice clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (1 parameter, no output schema, no annotations), the description is incomplete. It doesn't cover what the tool scrolls (e.g., a screen or element), behavioral aspects like side effects, or usage context relative to siblings. For a mutation tool with no annotations, more detail is needed to ensure the agent can use it correctly without guesswork.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage, with the parameter 'direction' fully documented via enum values ('up', 'down', 'left', 'right'). The description adds no meaning beyond the schema, as it doesn't explain parameter usage (e.g., how direction relates to UI orientation) or constraints. With high schema coverage, the baseline score of 3 is appropriate, as the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Perform scroll action' states a verb ('Perform') and resource/action ('scroll action'), making the purpose identifiable but vague. It doesn't specify what is being scrolled (e.g., a UI, webpage, or viewport) or distinguish it from sibling tools like 'input_tap' or 'input_keyevent', which are also input actions. The purpose is clear at a high level but lacks specificity for precise tool selection.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention context (e.g., scrolling in an app vs. a webpage), prerequisites, or exclusions. With siblings like 'input_tap' and 'input_keyevent' for other input types, the agent must infer usage based on the tool name alone, which is insufficient for informed decisions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
input_tapC
Tap at specific coordinates
| Name | Required | Description | Default |
|---|---|---|---|
| x | Yes | X coordinate for tap | |
| y | Yes | Y coordinate for tap |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden but only states the basic action. It doesn't disclose behavioral traits such as whether the tap is immediate, if it requires specific permissions, what happens if coordinates are invalid, or if there are rate limits. This leaves significant gaps for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise with a single, front-loaded sentence that directly states the tool's function. There is zero wasted language, making it efficient and easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (a mutation with no annotations or output schema) and the description's minimalism, it's incomplete. It lacks details on behavior, error handling, or integration with sibling tools, leaving the agent with insufficient context for reliable use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 100%, with both parameters (x and y) documented in the schema. The description adds no additional meaning beyond implying coordinate-based input, so it meets the baseline of 3 where the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Tap at specific coordinates' clearly states the action (tap) and target (specific coordinates), making the purpose immediately understandable. However, it doesn't differentiate from sibling tools like input_keyevent or input_scroll, which are also input actions but with different modalities.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like input_keyevent or input_text. There's no mention of context (e.g., for UI interaction vs. text entry) or prerequisites (e.g., needing an app open).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
input_textC
Input text into the current field
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Text to input |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden but offers minimal behavioral insight. It states the action ('input text') but doesn't disclose whether this requires specific conditions (e.g., an active field), how it handles errors, or what the expected outcome is. This is inadequate for a mutation tool with zero annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with zero waste—'Input text into the current field' is front-loaded and appropriately sized for a simple tool. Every word earns its place, making it easy to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (1 parameter, 100% schema coverage) but lack of annotations and output schema, the description is incomplete. It doesn't address behavioral aspects like what 'current field' means, potential side effects, or error handling, which are crucial for an input mutation tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with the single parameter 'text' well-documented in the schema as 'Text to input'. The description adds no additional meaning beyond this, such as format constraints or examples, so it meets the baseline of 3 where the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Input text into the current field' clearly states the action (input) and target (current field), making the purpose immediately understandable. However, it doesn't differentiate from sibling tools like 'input_keyevent' or 'input_tap' that also perform input operations but with different methods.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like 'input_keyevent' for keyboard events or 'input_tap' for touch inputs. It lacks any context about prerequisites (e.g., needing a field to be focused) or exclusions, leaving usage entirely implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_appsC
List installed apps matching a name pattern
| Name | Required | Description | Default |
|---|---|---|---|
| app_name | Yes | Name pattern to search for in app packages |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. While 'List' implies a read-only operation, it doesn't specify what 'matching' entails (exact match, substring, regex), whether results are filtered/limited, what format the output takes, or any performance/rate considerations. The description provides minimal behavioral context beyond the basic operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that communicates the core functionality without any wasted words. It's appropriately sized for a simple tool with one parameter and gets straight to the point with clear front-loaded information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no annotations and no output schema, the description is insufficiently complete. It doesn't describe what the output looks like (list format, fields included), any limitations on results, error conditions, or how the pattern matching works. The agent would need to guess about important behavioral aspects of this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with the parameter 'app_name' fully documented in the schema. The description adds the context that this is a 'name pattern to search for in app packages,' which slightly elaborates on the schema's description. However, it doesn't provide additional syntax examples, format details, or constraints beyond what the schema already states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('List') and resource ('installed apps') with the specific action of matching a name pattern. It distinguishes from obvious siblings like 'open_app' by focusing on listing/searching rather than launching apps. However, it doesn't explicitly differentiate from other potential list/search tools that might exist.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites, limitations, or compare with other search/list tools. The agent must infer usage from the name and description alone without explicit context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
open_appC
Open an app using its package name and activity
| Name | Required | Description | Default |
|---|---|---|---|
| package_name | Yes | Full package name of the app (e.g., com.example.app) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden but lacks behavioral details. It doesn't disclose if this requires specific permissions (e.g., accessibility services), whether it launches in foreground/background, error handling (e.g., if app isn't installed), or side effects (e.g., interrupting current tasks). 'Open' implies a mutation, but safety and operational context are missing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with zero waste. It's front-loaded with the core action and uses clear terminology. Every word earns its place, making it easy to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations and no output schema, the description is incomplete. It lacks details on behavior, error cases, or return values (e.g., success/failure indicators). Given the complexity of opening apps (which can fail or have side effects), more context is needed for safe and effective use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with the parameter 'package_name' fully documented in the schema. The description adds minimal value by mentioning 'package name and activity' (though 'activity' isn't a parameter), but doesn't clarify semantics beyond the schema. Baseline 3 is appropriate as the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Open') and target resource ('an app') with the mechanism ('using its package name and activity'). It distinguishes from siblings like 'list_apps' (which enumerates) and input tools (which interact with already-open apps). However, it doesn't explicitly contrast with all siblings, missing a perfect score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives is provided. It doesn't mention prerequisites (e.g., app must be installed), when not to use it (e.g., for web apps), or alternatives like using 'input_tap' on an app icon. The description only states what it does, not when to apply it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
9 tool updates
- First observed
capture_screenshot - First observed
capture_ui_dump - First observed
create_test_folder - First observed
input_keyevent - First observed
input_scroll - First observed
input_tap - First observed
input_text - First observed
list_apps - First observed
open_app
TDQS
Scored across 9 tools
Each tool has a clearly distinct purpose with no overlap: screenshot capture, UI dump, folder creation, key events, scrolling, tapping, text input, app listing, and app opening. The descriptions reinforce these distinctions, making it easy for an agent to select the right tool for each specific action.
All tools follow a consistent verb_noun pattern using snake_case, such as capture_screenshot, input_tap, and list_apps. This uniformity makes the toolset predictable and easy to navigate, with no deviations in naming conventions.
With 9 tools, the count is well-scoped for Android debugging tasks, covering essential operations like input simulation, app management, and data capture. Each tool serves a clear purpose without redundancy, fitting the domain appropriately.
The toolset provides strong coverage for core Android debugging workflows, including input actions, app interaction, and data capture. A minor gap exists in lifecycle management tools, such as stopping apps or clearing data, but agents can work around this with the available tools.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Control real Android and iOS devices with LLM agents — tap, swipe, type, automate flows.
Drive real Android & iOS devices and web browsers from natural language for mobile + web QA. 290+ tools across device control, app management, automation sessions, browser automation, and flow recording / replay. Bearer-auth — get a token at robotactions.com → Profile → API Tokens.
Control Android TV from any AI. 38 MCP tools: playback, recap, recommend, smart-home, schedules.
remote debug iOS/Android/Unity/Godot/Flutter/RN/Web on real-device.ui-tree/screenshots/taps,tests.
Related MCP Servers
- FlicenseAqualityCmaintenanceEnables AI agents to interact with Android devices through UI manipulation, screen capture, touch gestures, text input, and app management via ADB. Provides comprehensive mobile automation capabilities including element detection, navigation, and application control for Android device testing and interaction.94-
- AlicenseBqualityDmaintenanceEnables control of Android devices via ADB, allowing screenshot capture, touch simulation, and swipe gestures through natural language commands.221306MIT
- AlicenseNot gradedqualityDmaintenanceEnables interaction with Android devices and emulators through ADB, allowing control actions like tapping, text input, screenshots, UI inspection, and app launching through natural language.88ISC
- FlicenseNot gradedqualityDmaintenanceEnables control of Android devices through ADB using natural language commands. Supports browser automation, SMS sending, device information retrieval, settings control, and common device actions like screenshots and button presses.3-