Skip to main content
Glama
TiagoDanin

Android Debug Bridge MCP

by TiagoDanin

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

android-debug-bridge-mcp

Screenshots rendered inline in the conversation, step-by-step reasoning

CLI

adb-agent

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 tap finds an uncovered point inside the target and refuses (instead of silently hitting the overlay) when there is none

  • Normalized coordinates0.5 0.7 means the same point on any screen size; raw pixels still work

  • Input — 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 consoleemu finger touch answers a fingerprint prompt on an AVD, and emu send reaches the rest of the virtual hardware

  • System — 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.md guides for both surfaces, also served by the CLI itself

Related MCP server: Android MCP Server

Installation

npm install -g android-debug-bridge-mcp

Prerequisites: 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 doctor
ok   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 screen

CLI 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 50

Groups: 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 serial

ADB_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 off

Emulator 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 command

The 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" \
  --json

Steps 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-mcp

Or 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-cli

See skills/README.md for details.

Environment

Variable

Effect

ADB_PATH

Path to the adb binary (default: adb from PATH)

ADB_SERIAL

Default device — serial, prefix or model (also honours ANDROID_SERIAL)

ADB_DEVICE_CACHE_MS

How long the device list is cached, in ms (default 3000, 0 disables)

ADB_SETTLE_MS

Delay after UI-mutating actions in ms (default 300)

ADB_BATCH_DELAY_MS

Pause after each batch action in ms (default 300, --delay overrides)

ADB_ARTIFACT_DIR

Where screenshots and recordings are written (default cwd)

ADB_FALLBACK_CWD

Directory to move to when the working directory is unusable

ADB_SCREENSHOT_MAX_WIDTH

Width of the returned screenshot (default 720, 0 keeps the original)

ADB_SCREENSHOT_QUALITY

Lossy quality 1..100 for jpeg/webp (default 60)

ADB_SCREENSHOT_FORMAT

auto, jpeg, webp, png or none (default auto)

ADB_MARKER_COLOR

Colour of the screenshot markers as hex (default #ff2d55)

ADB_TOUCH_HISTORY

Set to off to keep the gesture history in memory only

ADB_TOUCH_HISTORY_FILE

Where the gesture history is stored (default: temp folder)

ADB_AUTO_UI

Set to false to stop MCP input tools appending a UI snapshot

ADB_SKILLS_DIR

Override the folder holding the SKILL.md files

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 JPEGsharp 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 -- doctor

License

MIT

Available Tools

9 tools
capture_screenshotC

Capture a screenshot and save it to the test folder

ParametersJSON Schema
NameRequiredDescriptionDefault
test_nameYesName of the test folder where to save the screenshot
step_nameYesName of the step for the screenshot file (e.g., "001_login")

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.1/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
test_nameYesName of the test folder to create

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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)

ParametersJSON Schema
NameRequiredDescriptionDefault
keyYesKey event to send

TDQS

B3.1/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
directionYesDirection to scroll

TDQS

C2.7/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose3/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
xYesX coordinate for tap
yYesY coordinate for tap

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
textYesText to input

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
app_nameYesName pattern to search for in app packages

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
package_nameYesFull package name of the app (e.g., com.example.app)

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

  1. 9 tool updates
    • First observedcapture_screenshot
    • First observedcapture_ui_dump
    • First observedcreate_test_folder
    • First observedinput_keyevent
    • First observedinput_scroll
    • First observedinput_tap
    • First observedinput_text
    • First observedlist_apps
    • First observedopen_app

TDQS

B3.4/5.0

Scored across 9 tools

Disambiguation5/5

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.

Naming Consistency5/5

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.

Tool Count5/5

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.

Completeness4/5

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

ActivityMaintained
ResponsivenessUnresponsive

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

Related MCP Servers

  • F
    license
    A
    quality
    C
    maintenance
    Enables 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.
    9
    4
    -
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables interaction with Android devices and emulators through ADB, allowing control actions like tapping, text input, screenshots, UI inspection, and app launching through natural language.
    8
    8
    ISC
  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables 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
    -