Skip to main content
Glama

android-mcp

License: MIT Node.js 18+ MCP

An MCP (Model Context Protocol) server that gives AI agents full control of Android devices and emulators through plain ADB — no companion APK, no extra daemon, no telemetry.

With this server, agents like Claude Code, Claude Desktop, or Cursor can see the screen (screenshots + UI hierarchy) and act on it (tap, swipe, type, launch apps, read logs, record video) on any device that adb can reach.

You: "Open Settings, turn on dark mode, and show me a screenshot"
Agent: launches the app, navigates by reading the UI hierarchy,
       taps the right elements, and returns a screenshot — hands-free.

Why another Android MCP?

This project merges the best ideas of two excellent servers into one dependency-light TypeScript implementation:

Inspiration

What was adopted

mobile-mcp

App management, uiautomator-based element listing, screenshots, screen recording, orientation control

Android-MCP

WiFi ADB + mDNS auto-discovery, selector-based taps, wait-for-element, smart default-device selection

Differences by design:

  • ADB only. No uiautomator2 server APK on the device, no mobilecli binary on the host.

  • Zero telemetry. Nothing is phoned home, ever.

  • Android-first. No iOS code paths to carry around.

  • Agent-friendly errors. Failures return actionable messages that tell the agent what to try next.

Related MCP server: Mobile Device MCP

Requirements

  • Node.js 18+

  • Android platform-tools (adb) — auto-detected from ANDROID_HOME, ~/Library/Android/sdk (macOS), or %LOCALAPPDATA%\Android\Sdk (Windows), with PATH as fallback

  • An Android device with USB debugging or wireless debugging enabled, or a running emulator

Installation

git clone https://github.com/qalvinahmad/android-mcp.git
cd android-mcp
npm install
npm run build

Claude Code

claude mcp add android -- node /path/to/android-mcp/dist/index.js

Claude Desktop

Add to claude_desktop_config.json:

{
  "mcpServers": {
    "android": {
      "command": "node",
      "args": ["/path/to/android-mcp/dist/index.js"]
    }
  }
}

Cursor / other MCP clients

Any client that speaks MCP over stdio works the same way: run node /path/to/android-mcp/dist/index.js as the server command.

Environment variables (all optional)

Variable

Purpose

ANDROID_MCP_DEVICE

Default device id used when a tool call omits device

ANDROID_MCP_ALLOW_UNSAFE_URLS

Set to 1 to allow non-http(s) URLs (e.g. deep links) in android_open_url

ANDROID_HOME

Android SDK location, used to locate adb

Device selection

Every tool accepts an optional device parameter. When omitted, the server resolves the target in this order:

  1. ANDROID_MCP_DEVICE environment variable

  2. The only online device, if exactly one is connected

  3. The first physical device (USB or WiFi preferred over emulators)

android_list_devices also auto-connects wireless-debugging peers advertised via mDNS (adb mdns services) when the device list is empty — devices on the same network appear without any manual adb connect.

Capabilities — 26 tools

Device management

Tool

Description

Key parameters

android_list_devices

List connected devices with name, Android version, connection type (usb/wifi/emulator), and state. Auto-discovers mDNS wireless peers.

android_connect_wifi

Connect over WiFi ADB. Port defaults to 5555.

host

android_device_info

Model, Android version, SDK level, screen size, orientation, battery level, foreground app.

device?

App management

Tool

Description

Key parameters

android_list_apps

List installed apps that have a launcher activity.

device?

android_launch_app

Launch an app by package name.

packageName

android_terminate_app

Force-stop a running app.

packageName

android_install_app

Install an APK, optionally granting all runtime permissions.

apkPath, grantPermissions?

android_uninstall_app

Uninstall an app.

packageName

Screen observation

Tool

Description

Key parameters

android_take_screenshot

Screenshot returned inline as an image the agent can see.

device?

android_save_screenshot

Screenshot saved to a local .png file.

saveTo

android_list_elements

UI hierarchy: element type, text, accessibility label, resource id, focus/clickable state, and center tap coordinates.

device?

android_wait_for_element

Poll until an element appears — use instead of fixed sleeps for dynamic content.

selector, timeout?

Interaction

Tool

Description

Key parameters

android_tap

Tap at pixel coordinates.

x, y

android_tap_element

Find an element by selector and tap its center. Waits up to timeout (default 5 s) for it to appear.

selector, index?, timeout?

android_double_tap

Double-tap at coordinates.

x, y

android_long_press

Long-press at coordinates.

x, y, duration?

android_swipe

Directional swipe from screen center or from given coordinates.

direction, x?, y?, distance?, duration?

android_drag

Drag and drop between two points.

fromX, fromY, toX, toY, duration?

android_type_text

Type into the focused field (ASCII), optionally clearing it first and/or submitting with ENTER.

text, submit?, clear?

android_press_key

Press a key: BACK, HOME, ENTER, APP_SWITCH, VOLUME_UP, any KEYCODE_* name, or a numeric keycode.

key

android_open_url

Open an http(s) URL in the default browser.

url

android_open_notifications

Expand the notification shade.

device?

System

Tool

Description

Key parameters

android_set_orientation

Force portrait/landscape (disables auto-rotate).

orientation

android_start_recording

Start background screen recording (max 180 s, Android limit).

timeLimit?

android_stop_recording

Stop recording, pull the .mp4 to this computer.

saveTo?

android_logcat

Read recent logs with buffer selection (main/system/crash/events/all) and substring filter. Great for debugging Flutter/React Native crashes.

lines?, buffer?, filter?

Element selectors

android_tap_element and android_wait_for_element accept any combination of:

Selector

Matching

text

Exact visible text

textContains

Substring of visible text, case-insensitive

resourceId

Full id (com.app:id/btn_login) or short id (btn_login, auto-expanded using the foreground app package)

contentDesc

Substring of accessibility label, case-insensitive

className

Full class (android.widget.Button) or suffix (Button)

Usage examples

Prompts you can give an agent once the server is connected:

  • "List my devices and take a screenshot of the current screen."

  • "Open the Settings app and toggle dark mode."

  • "Install ~/Downloads/app-release.apk with all permissions granted, launch it, and check logcat for errors."

  • "Fill in the login form: tap the field with resource id email, type user@example.com, then tap the Login button."

  • "Record the screen while you walk through the onboarding flow, then save the video to my desktop."

  • "My Flutter app crashed — read the crash buffer and tell me why."

How it works (spec)

┌──────────────┐   stdio (JSON-RPC / MCP)   ┌─────────────┐   adb CLI   ┌─────────────┐
│  MCP client   │ ◄────────────────────────► │ android-mcp │ ◄─────────► │   device /  │
│ (Claude, ...) │                            │  (Node.js)  │             │   emulator  │
└──────────────┘                            └─────────────┘             └─────────────┘
  • Transport: stdio, stateless — one server process per client session.

  • Screenshots: adb exec-out screencap -p, returned as PNG (inline base64 image or file).

  • UI hierarchy: adb exec-out uiautomator dump /dev/tty, parsed with fast-xml-parser, retried up to 10× when the bridge returns a null root. Elements with no size or no useful text/id are filtered out.

  • Input: adb shell input (tap/swipe/text/keyevent/draganddrop). Text is shell-escaped; only ASCII is supported by input text, and non-ASCII input returns an actionable error instead of typing garbage.

  • Recording: adb shell screenrecord spawned in the background; stop sends SIGINT to the on-device process (killall -2 screenrecord), waits for the file to finalize, then adb pulls it.

  • Foreground app detection: dumpsys activity activities (ResumedActivity, covering both pre- and post-Android-13 formats) with dumpsys window (mFocusedApp) as fallback.

  • Safety rails: package names validated against [a-zA-Z0-9_.], output paths must be absolute with allowed extensions, URLs restricted to http(s) unless explicitly overridden.

Project layout

src/
├── index.ts    entry point — stdio transport
├── server.ts   MCP server + 26 tool registrations
├── adb.ts      adb discovery/execution, device resolution, WiFi + mDNS connect
└── ui.ts       uiautomator dump parsing, selector matching, wait-for-element

Development

npm run watch      # rebuild on change
npm run inspector  # test tools interactively with MCP Inspector

Troubleshooting

Symptom

Fix

adb not found

Install Android platform-tools and/or set ANDROID_HOME.

No Android devices connected

Enable USB debugging (or wireless debugging), accept the RSA prompt on the device, check adb devices.

Screenshot is black

The screen is off — send android_press_key with WAKEUP first.

Failed to dump UI hierarchy

The foreground screen is secure (password field, DRM). Use android_take_screenshot instead.

Non-ASCII text fails

adb shell input text is ASCII-only. Type the ASCII portion or use the device keyboard.

WiFi connect fails

Ensure wireless debugging or adb tcpip 5555 is active and the host is reachable.

Contributing

Issues and pull requests are welcome. Keep changes small and focused:

  1. Fork and create a feature branch.

  2. npm run build must pass with no TypeScript errors.

  3. Verify against a real device or emulator where possible (MCP Inspector makes this easy).

  4. Describe the behavior change in the PR.

License

MIT © Alvin Ahmad (@qalvinahmad)

Available Tools

26 tools
android_connect_wifiConnect WiFi DeviceA

Connect to an Android device over WiFi ADB. Accepts HOST or HOST:PORT (port defaults to 5555). The device must have wireless debugging or 'adb tcpip 5555' enabled.

ParametersJSON Schema
NameRequiredDescriptionDefault
hostYesDevice host, e.g. '192.168.1.3' or '192.168.1.3:5555'

TDQS

A3.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must fully disclose behavior. It specifies the port default and input format but omits details on connection timeout, error handling, or whether the tool blocks until success. This is insufficient for a connection command.

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?

Two sentences, no redundant words. Every sentence provides essential information: the purpose, acceptable input formats, and a prerequisite condition. Highly concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (single parameter, no output schema), the description covers the core requirements. It could briefly mention typical usage as a prerequisite for other Android commands, but overall it is sufficiently complete.

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?

Schema coverage is 100%, so baseline is 3. The description adds value by explicitly noting the default port (5555) when not provided, which the schema only implies via examples. This clarifies input semantics beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Connect') and the target ('Android device over WiFi ADB'). It distinguishes itself from sibling tools like 'android_list_devices' or 'android_take_screenshot' by specifying the precise network connection task.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description mentions prerequisites (wireless debugging or 'adb tcpip 5555' enabled) but does not explicitly guide when to use this tool over alternatives (e.g., USB connection). It lacks exclusions or context on when it is inappropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

android_device_infoDevice InfoA
Read-only

Get details of a device: model, Android version, SDK level, screen size, orientation, battery level, and the current foreground app.

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceNoDevice id (serial or host:port). Optional -- when omitted, uses ANDROID_MCP_DEVICE env or auto-selects the connected device (physical devices preferred over emulators).

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, so the description's 'Get' action aligns. The description lists output fields but does not add behavioral context beyond reading. No contradiction detected.

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 concise sentence that front-loads the purpose ('Get details of a device') and efficiently enumerates the data fields. No redundant or unclear wording.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the single parameter with full schema coverage, readOnlyHint annotation, and no output schema, the description sufficiently lists all return values. It could mention that it captures a snapshot of current device state, but current completeness is high.

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% coverage with a detailed description for the 'device' parameter (including fallback logic). The tool description does not add extra parameter semantics beyond what the schema provides, meeting the baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Get details') and specific resource ('device'), listing exactly which details are returned: model, version, SDK, screen, orientation, battery, foreground app. This distinguishes it from sibling tools like android_list_devices (lists devices) or android_take_screenshot (captures image).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for retrieving device information but does not explicitly state when to use it versus alternatives (e.g., android_list_devices for device IDs, android_logcat for logs). No 'when-not' or prerequisite guidance is provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

android_double_tapDouble TapB

Double-tap the screen at x,y pixel coordinates.

ParametersJSON Schema
NameRequiredDescriptionDefault
xYesX coordinate in pixels
yYesY coordinate in pixels
deviceNoDevice id (serial or host:port). Optional -- when omitted, uses ANDROID_MCP_DEVICE env or auto-selects the connected device (physical devices preferred over emulators).

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must disclose behavioral traits but only states the basic action. It does not mention whether there is any delay between taps, whether the gesture triggers app-specific behavior, or any side effects.

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, concise sentence with no unnecessary words. It is immediately understandable.

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?

For a simple tool with good schema coverage, the description is adequate but lacks context about coordinate system origin (default top-left) and device selection fallback. It does not cover all aspects an agent might need.

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 coverage is 100% with descriptions for x, y, and device. The description adds no additional semantic value beyond what the schema provides, so baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('double-tap') and the target ('screen at x,y pixel coordinates'). It distinctly differentiates from sibling tools like android_tap (single tap), android_long_press, and android_drag.

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. For example, there is no mention that this should be used for double-tap gestures instead of single taps or long presses.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

android_dragDrag And DropA

Drag from one point and drop at another (uses a slow swipe that triggers drag behavior).

ParametersJSON Schema
NameRequiredDescriptionDefault
toXYesEnd X coordinate
toYYesEnd Y coordinate
fromXYesStart X coordinate
fromYYesStart Y coordinate
deviceNoDevice id (serial or host:port). Optional -- when omitted, uses ANDROID_MCP_DEVICE env or auto-selects the connected device (physical devices preferred over emulators).
durationNoDrag duration in milliseconds. Defaults to 1500.

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations are empty, so the description carries the burden. It adds context that the tool performs a slow swipe to trigger drag behavior and mentions a default duration. However, it does not disclose safety, side effects, or whether it is destructive.

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 redundant or unnecessary words. It is front-loaded with the essential action and can be quickly understood.

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?

For a tool with 6 parameters (4 required) and no output schema, the description is adequate but minimal. It explains the core gesture but does not cover potential side effects, return values, or prerequisites.

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 coverage is 100% with all parameters described in the input schema. The description does not add additional parameter information beyond what the schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description explicitly states the verb 'drag' and the resource 'from one point and drop at another', clearly indicating the specific UI gesture. It distinguishes from sibling tools like 'android_swipe' by noting it uses a slow swipe that triggers drag behavior.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for drag-and-drop actions but does not explicitly state when to use this tool versus alternatives like android_swipe or android_long_press. No specific contextual guidance or prerequisites are provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

android_install_appInstall AppC

Install an APK file on the device.

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceNoDevice id (serial or host:port). Optional -- when omitted, uses ANDROID_MCP_DEVICE env or auto-selects the connected device (physical devices preferred over emulators).
apkPathYesAbsolute path to the .apk file on this computer
grantPermissionsNoGrant all runtime permissions at install time (useful for testing)

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description only states 'Install an APK file' without disclosing behavioral traits. It does not mention whether the app is launched after installation, whether existing versions are overwritten, or what happens on failure. Since annotations are empty, the description must carry the full burden, and it fails to do so.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence, which is concise but at the expense of important details. It is underspecified rather than efficiently dense. Every sentence should earn its place, and this one only states the obvious.

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 no output schema and no annotations, the description should provide more context about what happens after install (e.g., return value, error codes). It also lacks any mention of device selection behavior or permission handling, leaving an agent with insufficient information.

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 coverage is 100%, so the input schema already describes all parameters (device, apkPath, grantPermissions). The description adds no extra meaning beyond the schema. Baseline of 3 is appropriate because the schema does the heavy lifting, leaving little room for the description to add value.

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 tool installs an APK file on a device. It uses a specific verb ('Install') and specifies the resource ('APK file'). While it could be more precise (e.g., 'on the connected Android device'), it is unambiguous and distinguishes from sibling tools like 'android_launch_app' or 'android_uninstall_app'.

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. For example, it does not mention that the device must be connected, that the APK must exist at the specified path, or that permissions might be needed. There is no mention of prerequisites or typical use cases.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

android_launch_appLaunch AppA

Launch an app by package name. Use android_list_apps to find package names.

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceNoDevice id (serial or host:port). Optional -- when omitted, uses ANDROID_MCP_DEVICE env or auto-selects the connected device (physical devices preferred over emulators).
packageNameYesPackage name, e.g. 'com.android.settings'

TDQS

A3.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided. Description does not disclose effects (e.g., whether app is brought to foreground, what happens if not found, or any prerequisites).

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?

Two sentences, no fluff. Efficiently conveys purpose and a key usage tip.

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?

Adequate for a simple launch action but lacks return value or error behavior. Since no output schema exists, description could provide more context (e.g., success confirmation).

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 covers both parameters (100% coverage). Description adds no additional meaning beyond the schema's own descriptions, meeting baseline but not exceeding.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Launch an app by package name' with a specific verb and resource, and distinguishes from siblings by referencing android_list_apps.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly recommends using android_list_apps to find package names, providing clear context. Lacks explicit when-not-to-use guidance, but implied by simplicity.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

android_list_appsList AppsA
Read-only

List installed apps that have a launcher activity (package names).

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceNoDevice id (serial or host:port). Optional -- when omitted, uses ANDROID_MCP_DEVICE env or auto-selects the connected device (physical devices preferred over emulators).

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint=true. The description adds that it filters to apps with a launcher activity, providing useful context. No contradictions with annotations.

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 concise sentence that immediately conveys the tool's purpose with no unnecessary words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple listing tool with no output schema, the description covers the key aspect (what apps are listed) and mentions output is package names. It could mention edge cases like empty lists but is largely complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description does not mention the 'device' parameter or provide any meaning beyond the input schema. Schema coverage is 100%, but the description adds no param info.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool lists installed apps that have a launcher activity, specifying it returns package names. This distinguishes it from siblings like android_launch_app or android_terminate_app.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage by stating what it does, but does not explicitly mention when to use it versus alternatives or provide any prerequisites or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

android_list_devicesList DevicesA
Read-only

List connected Android devices and emulators with name, Android version, and connection type. Auto-discovers wireless-debugging devices via mDNS when the list is empty.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, indicating no side effects. The description adds transparency by disclosing auto-discovery behavior via mDNS and what information is returned, which goes beyond the annotations.

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?

Two sentences, front-loaded with the main purpose, no filler. Every word is relevant and concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description adequately explains the output (name, Android version, connection type) and the auto-discovery behavior. For a simple list tool, this is complete.

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?

There are zero parameters, so the description does not need to add parameter semantics. Baseline 4 applies as the schema coverage is 100% and no params exist.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/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 the resource 'connected Android devices and emulators', and specifies the returned fields (name, Android version, connection type). It also mentions auto-discovery, distinguishing it from sibling tools that perform actions or fetch other info.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides context on auto-discovery when list is empty, implying when the tool is useful. However, it lacks explicit when-not-to-use or alternative tools, though siblings are distinct so alternatives are clear enough.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

android_list_elementsList Screen ElementsA
Read-only

List UI elements on the current screen with text, accessibility labels, resource ids, and pixel coordinates. Use this to find where to tap. Do not cache this result.

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceNoDevice id (serial or host:port). Optional -- when omitted, uses ANDROID_MCP_DEVICE env or auto-selects the connected device (physical devices preferred over emulators).

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, and the description adds behavioral details: it returns coordinates and UI attributes, and warns against caching. This complements the annotations well, though it could mention that the list is of visible elements only.

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?

Two sentences, no filler. The first sentence conveys the core capability, and the second adds usage guidance and a critical warning. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple list tool with one optional parameter and no output schema, the description fully covers what the tool returns and how to use it. The warning about caching adds important context.

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?

Since schema description coverage is 100% (the only parameter 'device' is fully described in the schema), the baseline is 3. The tool description adds no further parameter meaning beyond what the schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool lists UI elements on the current screen with specific attributes like text, accessibility labels, resource ids, and pixel coordinates. This verb+resource combination distinguishes it from sibling tools that perform actions (tap, type, etc.) or query device info.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says 'Use this to find where to tap,' providing clear usage context. It also warns 'Do not cache this result,' which is important for dynamic screens. While it doesn't explicitly exclude scenarios, the guidance is direct and practical.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

android_logcatRead LogcatA
Read-only

Read recent device logs. Useful for debugging apps (Flutter, React Native, native). The 'crash' buffer contains crash reports.

ParametersJSON Schema
NameRequiredDescriptionDefault
linesNoNumber of recent lines to fetch. Defaults to 200.
bufferNoLog buffer to read. Defaults to 'main'. Use 'crash' for crash reports.
deviceNoDevice id (serial or host:port). Optional -- when omitted, uses ANDROID_MCP_DEVICE env or auto-selects the connected device (physical devices preferred over emulators).
filterNoOnly return lines containing this text (case-insensitive), e.g. a package name or 'flutter'

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, indicating a safe read operation. The description adds valuable context about the crash buffer and debugging purpose, complementing the annotations without contradicting them.

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?

Two short, focused sentences. First sentence states purpose, second adds key detail on crash buffer. No unnecessary words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the core purpose and important parameter usage (crash buffer). It lacks details on output format, but with no output schema and simple log-line output, this is acceptable. Slightly less than ideal for a debugging 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 each parameter well-documented. The description does not add significant additional meaning beyond the schema, only emphasizing the crash buffer. Baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Title 'Read Logcat' and description explicitly state the action (read) and resource (device logs). Mentions specific use cases (debugging Flutter, React Native, native) and distinguishes from sibling tools, none of which read logs.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Description provides clear context: useful for debugging apps and mentions the crash buffer for crash reports. However, it does not explicitly state when not to use it or list alternatives among siblings, though no direct alternatives exist.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

android_long_pressLong PressC

Long-press the screen at x,y pixel coordinates.

ParametersJSON Schema
NameRequiredDescriptionDefault
xYesX coordinate in pixels
yYesY coordinate in pixels
deviceNoDevice id (serial or host:port). Optional -- when omitted, uses ANDROID_MCP_DEVICE env or auto-selects the connected device (physical devices preferred over emulators).
durationNoPress duration in milliseconds. Defaults to 500.

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 must fully disclose behavior but only says 'long-press'. It omits critical details: that it is a touch gesture, that duration is configurable, how it differs from tapping, and side effects (e.g., triggering context menus). This is insufficient behavioral coverage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise—one sentence with no extraneous text. However, the extreme brevity sacrifices necessary information, making it more under-specified than effectively concise.

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 output schema and annotations, the description is incomplete for a tool with 4 parameters. It does not address return values, error conditions, or prerequisites such as device connectivity, making it insufficient for reliable agentic 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%, so baseline is 3. The tool description adds no additional meaning beyond what's in the schema. It does not explain parameter defaults, constraints, or interactions (e.g., what constitutes a valid coordinate).

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 (long-press) and the resource (screen at coordinates). However, it does not differentiate from sibling tools like android_tap or android_double_tap, which have similar but distinct behaviors.

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 over alternatives, no prerequisites, and no indications of appropriate contexts. The single sentence lacks any usage direction.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

android_open_notificationsOpen NotificationsA

Expand the notification shade to inspect notifications. Use android_list_elements or android_take_screenshot afterwards to read them, and BACK key to close.

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceNoDevice id (serial or host:port). Optional -- when omitted, uses ANDROID_MCP_DEVICE env or auto-selects the connected device (physical devices preferred over emulators).

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses that it opens the shade and that BACK closes it. With no annotations, the description partially covers behavioral traits but lacks details on preconditions (e.g., lock screen behavior) or side effects.

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?

Two efficient sentences, front-loaded with the main action, followed by actionable workflow guidance. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple tool with one optional parameter and no output schema, the description fully covers what the tool does, how to use it in a sequence, and how to close it. No gaps.

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 coverage is 100% with a well-described device parameter. The description does not add any parameter-level meaning beyond what the schema provides, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states the tool expands notification shade for inspection. Distinguishes from siblings like android_list_elements and android_take_screenshot by specifying the workflow order.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides clear follow-up steps: use other tools to read notifications and BACK key to close. Implicitly suggests when to use this tool (before reading, after opening) but does not explicitly exclude alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

android_open_urlOpen URLB

Open a URL in the default browser on the device.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesThe http(s) URL to open
deviceNoDevice id (serial or host:port). Optional -- when omitted, uses ANDROID_MCP_DEVICE env or auto-selects the connected device (physical devices preferred over emulators).

TDQS

B3.3/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. It only states what the tool does, not behavioral traits such as whether it waits for the page to load, handles errors, or leaves the browser open. This lack of detail could lead to misassumptions.

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 sentence with no unnecessary words. It is front-loaded and efficient, perfect for a simple action.

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 the simplicity of the tool and full schema coverage, the description is adequate but lacks contextual details like error handling or typical use cases. It meets the minimum bar for a straightforward operation.

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 coverage is 100%, so the baseline is 3. The description adds no extra meaning beyond what the schema already provides for the 'url' and 'device' parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action (Open), the resource (a URL), and the context (in the default browser on the device). It is specific and distinguishes itself from sibling tools, none of which involve opening URLs.

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 or when not to use it. It does not mention prerequisites (e.g., a browser must be installed), alternatives, or context-specific recommendations.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

android_press_keyPress KeyA

Press a hardware or navigation key. Common keys: BACK, HOME, ENTER, MENU, APP_SWITCH, POWER, VOLUME_UP, VOLUME_DOWN, DELETE, TAB, DPAD_UP/DOWN/LEFT/RIGHT/CENTER. Any Android KEYCODE_* name or numeric keycode also works.

ParametersJSON Schema
NameRequiredDescriptionDefault
keyYesKey name (e.g. 'BACK', 'KEYCODE_CAMERA') or numeric keycode
deviceNoDevice id (serial or host:port). Optional -- when omitted, uses ANDROID_MCP_DEVICE env or auto-selects the connected device (physical devices preferred over emulators).

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden. It describes the action as 'press' but does not detail behavior for invalid keys, device selection fallback (beyond schema), or any side effects. This is adequate for a simple action but lacks depth.

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?

Two sentences: first states purpose, second provides examples. Extremely concise with no wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple press tool with no output schema, the description covers the key purpose and valid inputs. It is mostly complete, but could mention device selection behavior (though schema covers it) and error handling.

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?

Schema coverage is 100%, so baseline is 3. The description adds value by listing common key names and explaining that KEYCODE_* or numeric keycodes work, enhancing understanding beyond the schema's generic 'Key name' description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool presses hardware or navigation keys, and provides a list of common keys. This distinguishes it from sibling tools that interact with UI elements (tap, long_press, etc.).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for hardware keys but does not explicitly state when to use this tool versus alternatives like tapping or long-pressing UI elements. No exclusions or alternative tool references are provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

android_save_screenshotSave ScreenshotB

Take a screenshot and save it to a PNG file on this computer.

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceNoDevice id (serial or host:port). Optional -- when omitted, uses ANDROID_MCP_DEVICE env or auto-selects the connected device (physical devices preferred over emulators).
saveToYesAbsolute path to save the screenshot to, ending with .png

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations are empty, so the description must carry the full load of behavioral disclosure. It only states the basic action, omitting details about side effects (e.g., overwriting existing files), permission requirements, or whether the tool modifies device state. This is insufficient for a write 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 sentence that is neither verbose nor incomplete. Every word is necessary, and it is front-loaded with the main action. Zero wasted text.

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 the tool's simplicity (1 required parameter, no output schema), the description is adequate but minimal. It does not explain the return value or what happens if the file already exists. More detail could improve completeness without redundancy.

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% coverage and already describes both parameters adequately. The description adds no additional meaning beyond what the schema provides, so it meets the baseline but does not enhance understanding.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's action ('Take a screenshot') and the outcome ('save it to a PNG file on this computer'). The verb 'Take' and resource 'screenshot' are specific, and the mention of saving to a file distinguishes it from the sibling tool 'android_take_screenshot', which likely captures without saving.

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 android_take_screenshot. It does not specify prerequisites, context, or exclusion criteria, leaving the agent to infer usage from the name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

android_set_orientationSet OrientationA

Set the screen orientation (disables auto-rotate).

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceNoDevice id (serial or host:port). Optional -- when omitted, uses ANDROID_MCP_DEVICE env or auto-selects the connected device (physical devices preferred over emulators).
orientationYesDesired orientation

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations are empty, so description carries burden. It mentions disabling auto-rotate, a key side effect, but does not disclose persistence, scope, or error states.

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?

Single sentence with no redundancy, efficiently conveys the core action and a key behavioral note.

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?

Adequate for a simple setter with full schema coverage, but lacks explanation of success/failure, device connection requirement, or return value expectation.

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 coverage is 100% with clear descriptions for both parameters. Description adds no extra meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clear verb 'Set' and specific resource 'screen orientation' with added behavioral detail 'disables auto-rotate'. Unique among sibling tools.

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 vs alternatives, no mention of prerequisites or when not to use. Only states what it does.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

android_start_recordingStart Screen RecordingA

Start recording the device screen in the background. Stop it with android_stop_recording. Max duration is 180 seconds (Android limit).

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceNoDevice id (serial or host:port). Optional -- when omitted, uses ANDROID_MCP_DEVICE env or auto-selects the connected device (physical devices preferred over emulators).
timeLimitNoAuto-stop after this many seconds. Defaults to 180 (maximum).

TDQS

A3.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description bears full burden. Mentions background recording and 180s limit but does not disclose behavior on reaching timeLimit, ability to start multiple recordings, or side effects like resource consumption.

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?

Two sentences, front-loaded with main action, no wasted words.

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?

No output schema; tool starts a background process but does not explain what happens to the recording (e.g., saved automatically? retrieval method?). Missing details on completion signals and side effects.

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 coverage is 100%, so baseline is 3. Description adds 'Max duration is 180 seconds' which reinforces schema's maximum constraint but offers no new meaning beyond schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Start recording the device screen in the background' and differentiates from siblings by mentioning 'Stop it with android_stop_recording'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly tells when to use this tool (to start recording) and how to stop it using android_stop_recording. Does not provide explicit when-not-to-use scenarios but context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

android_stop_recordingStop Screen RecordingA

Stop the active screen recording, pull the video from the device, and save it as an .mp4 file on this computer.

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceNoDevice id (serial or host:port). Optional -- when omitted, uses ANDROID_MCP_DEVICE env or auto-selects the connected device (physical devices preferred over emulators).
saveToNoAbsolute path to save the .mp4 to. Defaults to a temporary file.

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses the main actions (stop recording, pull video, save as .mp4), but with no annotations provided, it lacks additional behavioral context such as file size limits, timeouts, or side effects.

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, concise sentence with no extraneous information, front-loading the key verb and resource.

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?

The description does not mention any return value or output format, which is a gap since there is no output schema. However, the tool is simple and the schema covers parameters well.

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%, so the schema already documents both parameters. The description adds no extra meaning beyond what is in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly specifies the action (stop, pull, save) and the resource (active screen recording). It distinguishes the tool from its sibling android_start_recording.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage when there is an active screen recording to stop and retrieve, but does not explicitly state when not to use it or mention alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

android_swipeSwipe ScreenC

Swipe in a direction. Starts from screen center by default, or from given x,y coordinates.

ParametersJSON Schema
NameRequiredDescriptionDefault
xNoStart X coordinate. Defaults to screen center.
yNoStart Y coordinate. Defaults to screen center.
deviceNoDevice id (serial or host:port). Optional -- when omitted, uses ANDROID_MCP_DEVICE env or auto-selects the connected device (physical devices preferred over emulators).
distanceNoSwipe distance in pixels. Defaults to ~55% of screen for center swipes, 30% for coordinate swipes.
durationNoSwipe duration in milliseconds. Defaults to 500.
directionYesSwipe direction

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations are empty, so description must disclose all behavioral traits. It mentions start location defaults but omits effects of duration, distance, or that it is a touch gesture with release. Incomplete for safe agent use.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence, direct and to the point. No wasted words, but could be expanded without losing conciseness.

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?

With 6 parameters and no output schema, the description is too sparse. It doesn't explain how parameters interact (e.g., distance vs duration) or what the swipe looks like, leaving gaps for 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%, so baseline is 3. The description adds minimal new meaning (start location defaults already in schema). No improvement over schema.

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 tool swipes on a screen, starting from center or given coordinates. It distinguishes from siblings like tap or long press by focusing on directional motion, but doesn't explicitly contrast with drag.

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 swipe versus other gesture tools (drag, tap, etc.). The description lacks context for preferred scenarios or prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

android_take_screenshotTake ScreenshotA
Read-only

Take a screenshot of the device screen and return it as an image. Use android_list_elements first when you need coordinates of UI elements. Do not cache this result.

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceNoDevice id (serial or host:port). Optional -- when omitted, uses ANDROID_MCP_DEVICE env or auto-selects the connected device (physical devices preferred over emulators).

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, so the description's 'take a screenshot' aligns. It adds behavioral details: 'return as an image' and 'do not cache', which are not covered by annotations. No contradiction.

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?

Two concise sentences, front-loaded with the action. Every sentence adds value with no fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description clarifies the return type (image) and provides a usage hint. It does not mention image format or error handling, but is sufficient for a simple 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 covers 100% of parameters with a comprehensive description of the 'device' parameter. The description does not add further meaning beyond the schema, so baseline 3 applies.

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 it takes a screenshot and returns it as an image. However, it does not explicitly differentiate from the sibling tool 'android_save_screenshot', which likely saves to a file rather than returning the image directly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides some guidance: 'Use android_list_elements first when you need coordinates' and 'Do not cache this result'. But lacks explicit when-to-use vs alternatives (e.g., android_save_screenshot) and no exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

android_tapTap ScreenA

Tap the screen at x,y pixel coordinates. Use android_list_elements to find element coordinates.

ParametersJSON Schema
NameRequiredDescriptionDefault
xYesX coordinate in pixels
yYesY coordinate in pixels
deviceNoDevice id (serial or host:port). Optional -- when omitted, uses ANDROID_MCP_DEVICE env or auto-selects the connected device (physical devices preferred over emulators).

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must convey all behavioral traits. It states the basic action but omits details such as bounds checking, device connectivity requirements, or what happens on invalid coordinates. The schema partially covers the device parameter, but the description adds no extra 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 extremely concise: two sentences that immediately convey the tool's purpose and a critical usage hint. No wasted words or irrelevant details.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple tap tool with many sibling tools, the description covers the core functionality and cross-references a related tool. It is adequate but could improve by noting coordinate system origin or potential failure modes, though the schema already details device selection.

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% coverage with descriptions for all three parameters (x, y, device). The description does not add any additional semantic meaning beyond what the schema provides, so the baseline score applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's action: tapping the screen at specific pixel coordinates. It distinguishes from sibling tools like 'android_double_tap' and 'android_long_press' by specifying a single tap, and 'android_tap_element' by operating on raw coordinates.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description advises using 'android_list_elements' to obtain coordinates, providing a clear workflow for correct usage. It does not explicitly state when not to use the tool, but the advice implies this is for direct coordinate-based tapping rather than element selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

android_tap_elementTap ElementA

Find a UI element by selector and tap its center. More reliable than coordinate taps for dynamic layouts. Waits for the element to appear (default 5s).

ParametersJSON Schema
NameRequiredDescriptionDefault
textNoMatch by exact visible text
indexNoWhich match to tap when multiple elements match (0-based). Defaults to 0.
deviceNoDevice id (serial or host:port). Optional -- when omitted, uses ANDROID_MCP_DEVICE env or auto-selects the connected device (physical devices preferred over emulators).
timeoutNoMax seconds to wait for the element. Defaults to 5.
classNameNoMatch by class name, e.g. 'android.widget.Button' or just 'Button'
resourceIdNoMatch by resource id. Short ids like 'btn_login' are auto-expanded using the foreground app package
contentDescNoMatch by accessibility label / content description (substring, case-insensitive)
textContainsNoMatch by substring of visible text (case-insensitive)

TDQS

A3.9/5.0
Behavior3/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. It discloses waiting behavior (default 5s timeout) but does not explain failure behavior (e.g., exception on timeout, whether it scrolls, or if any side effects occur). For a tap action, this is adequate but could be more transparent.

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 two sentences long, front-loaded with the core action, and every sentence adds value. No unnecessary words or redundancy.

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?

The tool has 8 parameters but all are well-documented in the schema. The description does not explain selector priority (e.g., text vs resourceId) or return value. For a simple tap action, it is mostly complete but missing some context on selector combination logic.

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% and each parameter has a clear description. The description adds value by mentioning the default timeout, but otherwise does not provide additional parameter semantics beyond the schema. Baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool finds a UI element by selector and taps its center. It distinguishes from coordinate taps, which is a sibling tool (android_tap). The verb 'tap' and resource 'UI element' are specific.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description notes it is more reliable than coordinate taps for dynamic layouts and mentions waiting behavior (default 5s). It implies when to use, but does not explicitly state when not to use or name alternatives directly. Sibling android_tap exists but is not cross-referenced.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

android_terminate_appTerminate AppB
Destructive

Force-stop a running app by package name.

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceNoDevice id (serial or host:port). Optional -- when omitted, uses ANDROID_MCP_DEVICE env or auto-selects the connected device (physical devices preferred over emulators).
packageNameYesPackage name of the app to stop

TDQS

B3.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate destructiveHint=true; description adds 'Force-stop' which aligns. However, it does not disclose additional behaviors (e.g., immediate process kill, no graceful shutdown, impact on app state). Minimal extra value beyond annotations.

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?

Single sentence, front-loaded with key action, no redundant words. Highly concise and well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter tool with destructive annotation and no output schema, the description covers the essential purpose. Minor gap: missing mention that force-stopping is immediate and may lose unsaved data, but overall adequate.

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%; both parameters have descriptions. The tool description does not add any new meaning or context beyond the schema. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description uses a specific verb ('Force-stop') and resource ('a running app') with the method ('by package name'). Clearly distinguishes from sibling tools like android_launch_app and android_list_apps.

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 vs alternatives (e.g., android_uninstall_app). No when-not or prerequisite conditions. Implied usage only.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

android_type_textType TextA

Type text into the currently focused input field. Tap the field first. ASCII only (adb limitation).

ParametersJSON Schema
NameRequiredDescriptionDefault
textYesThe text to type (ASCII only)
clearNoClear the field before typing (select-all + delete)
deviceNoDevice id (serial or host:port). Optional -- when omitted, uses ANDROID_MCP_DEVICE env or auto-selects the connected device (physical devices preferred over emulators).
submitNoPress ENTER after typing

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description discloses the ASCII limitation and prerequisite, but does not mention potential failures or ADB mechanism.

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?

Two sentences with no wasted words, front-loaded with the core action and key details.

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?

For a simple tool with four parameters and no output schema, it covers the basics but lacks details on edge cases like unfocused fields.

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 coverage is 100%, so the description adds no extra meaning beyond what the schema provides; baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool types text into a focused input field, distinguishes from sibling tap/press tools, and specifies the prerequisite to tap first.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides a prerequisite (tap first) but does not explicitly state when to use versus alternatives or when not to use.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

android_uninstall_appUninstall AppA
Destructive

Uninstall an app from the device by package name.

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceNoDevice id (serial or host:port). Optional -- when omitted, uses ANDROID_MCP_DEVICE env or auto-selects the connected device (physical devices preferred over emulators).
packageNameYesPackage name of the app to uninstall

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

DestructiveHint annotation already indicates destructive behavior. Description adds no additional behavioral details beyond stating the action. No mention of side effects or data removal.

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?

Single, clear sentence with no unnecessary words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple destructive tool with no output schema, the description is sufficient to understand the core action. Could mention return value or confirmation, but not essential.

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%; description adds no extra meaning beyond what is in the schema. The schema already describes device and packageName well.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Uninstall', the resource 'app', and the method 'by package name'. It is distinct from sibling tools like android_install_app or android_terminate_app.

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 vs alternatives, such as android_terminate_app for stopping without removing, or prerequisites like requiring the app to be installed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

android_wait_for_elementWait For ElementA
Read-only

Wait until a UI element appears on screen. Use this instead of a fixed sleep when content loads dynamically. Returns element info and center coordinates when found.

ParametersJSON Schema
NameRequiredDescriptionDefault
textNoMatch by exact visible text
deviceNoDevice id (serial or host:port). Optional -- when omitted, uses ANDROID_MCP_DEVICE env or auto-selects the connected device (physical devices preferred over emulators).
timeoutNoMax seconds to wait. Defaults to 10.
classNameNoMatch by class name, e.g. 'android.widget.Button' or just 'Button'
resourceIdNoMatch by resource id. Short ids like 'btn_login' are auto-expanded using the foreground app package
contentDescNoMatch by accessibility label / content description (substring, case-insensitive)
textContainsNoMatch by substring of visible text (case-insensitive)

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, so the description's statement about waiting and returning coordinates adds some behavioral context. But it lacks details on timeout behavior or what happens if the element never appears. Given annotations, a 3 is appropriate.

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?

Two short, front-loaded sentences with no wasted words. The first sentence defines the purpose; the second provides usage guidance and outcome.

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?

With 7 parameters and no output schema, the description briefly mentions return types ('element info and center coordinates') but is vague about what 'element info' includes. It also doesn't address edge cases like timeout. Adequate but not thorough.

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 coverage is 100%, so the description does not need to explain parameters in detail. It adds no extra meaning beyond the schema, earning the baseline of 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool waits for a UI element to appear, using specific verbs 'Wait' and 'appears'. It distinguishes from sibling tools like android_tap_element or android_list_elements by focusing on the waiting/observation aspect.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly advises using this instead of a fixed sleep for dynamic content, providing clear context. However, it does not specify when not to use or list alternatives beyond the implied 'fixed sleep'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

TDQS

A3.7/5.0
Disambiguation5/5

Each tool targets a distinct action or resource. While tap and tap_element overlap, their descriptions clarify different use cases for coordinate vs. element-based tapping. Other tools like drag and swipe are clearly differentiated.

Naming Consistency5/5

All tools follow a strict 'android_' prefix with snake_case action-oriented names. There is no mixing of conventions, and the verb-noun structure is consistent throughout.

Tool Count4/5

With 26 tools, the server is comprehensive but not excessively large. Every tool seems justified for Android device automation, though some could be merged (e.g., tap and tap_element). The count is high but still reasonable.

Completeness4/5

The tool set covers device connection, UI interaction, app management, screenshots, recording, and logs. Missing operations like file transfer or clipboard access are minor gaps, but core workflows for UI automation are supported.

Maintenance

ActivityStale
ResponsivenessSyncing

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

  • A
    license
    A
    quality
    A
    maintenance
    MCP server that gives AI agents full vision and control over Android devices via ADB and scrcpy. Supports screenshots, input, apps, UI automation, shell, files, and clipboard.
    38
    391
    87
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    An MCP server that lets AI agents control iOS and Android devices (tap, scroll, type, take screenshots, read UI trees, and run code). Works with multiple devices at the same time.
    123
    44
    MIT
  • A
    license
    B
    quality
    B
    maintenance
    An MCP server that allows AI agents to drive real Android devices via adb, capturing screenshots, reading the live UI tree, and performing actions like tap, swipe, and type.
    13
    15
    1
    Apache 2.0

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/qalvinahmad/android-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server