Skip to main content
Glama

Android tasks, inside Dim Agent

Android Use brings your own Android phone or emulator into Dim Agent, with standard MCP support for other compatible clients. Read the screen, find a control, tap, type, scroll, and check the result. Follow the process in a live phone view.

For workflows that need repeated UI decisions, enable Jev. Your Agent keeps planning and final verification; Jev selects the next candidate; Android Use validates and executes it.

“Open Settings, find Battery, and read the current usage.”

“Fill in the profile with the text I provide, verify it, and save a local draft.”

No root, Appium, signing setup, or keyboard APK. The compiled UI is included. Use USB or already-authorized wireless ADB.

Related MCP server: phone-use

Choose an installation path

The standalone runtime is optional. The Agent inspects the environment and chooses the appropriate route; a working installation is reused.

Environment

Installation choice

Existing healthy Android Use / MCP

Reuse it and verify the connection.

Python/uv, ADB and ffmpeg already available

Use the source installation and existing tools.

Dependencies missing, matching verified native assets available

Use the optional standalone runtime to avoid installing dependencies individually.

Offline, unsupported native target, or no native release assets yet

Use a suitable local archive or source setup; report any missing prerequisites.

Optional standalone runtime · v0.7.0

Python, ADB, ffmpeg, the screen UI and the control service in one native package. The lightweight Dim plugin installs it automatically on first use. Later MCP connections start the installed version immediately and check for updates in the background; verified updates take effect on the next connection. Failed updates retain the previous version; rollback rechecks it before switching.

macOS OCR is an optional add-on, omitted from the default package. Tree interaction, Agent screenshot inspection and Jev can be used without it. Users choosing this package do not need Python, uv, Git, Node.js, a JDK or Xcode tools; public-release bootstrap uses standard OS utilities. Private-release bootstrap additionally supports GitHub CLI with a private token; offline native installation avoids that requirement.

Available in v0.7.0 as separate source-plugin, lightweight Dim-plugin and native-runtime downloads. Choose the route for your environment; older v0.6.2 source ZIPs do not include the native runtime. Install, automatic updates, optional OCR and rollback →

Quick start

Use in Dim Agent

Start in Dim Agent Desktop on the computer connected to your Android phone. Install Android Use once, then describe tasks in the chat and follow the live phone view in the right panel. Jev is optional; your existing Agent can make decisions without an extra model key.

Install from the plugin marketplace. In Dim Agent, open Plugins (插件) → Plugin Marketplace (插件市场), search for AndroidUse, and click + to install. A checkmark means the plugin is already installed.

AndroidUse in the Dim Agent plugin marketplace

1. Connect your phone. Enable Developer options and USB debugging, connect a data cable, accept the debugging prompt, and keep the phone unlocked. ADB must be available on the computer where Dim executes commands. For a remote Dim session, connect the phone to that execution host.

2. Let Dim Agent finish setup. If installed from the marketplace, ask the Agent to reuse the installed AndroidUse plugin, check dependencies and the device connection, verify READY, and open the live screen. Keep the existing MCP registration.

For installation from GitHub, paste this into a chat with local terminal access:

Install Android Use for Dim Agent on this computer:
https://github.com/arcships/android-use

Read README.md, docs/guide.md and skills/android-use/SKILL.md.
Reuse existing installations and preserve other MCP servers and uncommitted work.
Inspect Python/uv, ADB, ffmpeg, platform, network and available release assets.
Choose source installation or the optional standalone package for this environment;
do not migrate a healthy installation just to use a runtime. Read docs/standalone.md.
For source setup use scripts/install.py install --source .; for native setup verify
the matching archive SHA256. Both routes must return a stable MCP launch command.
Register its returned mcp_config as Dim's local stdio server named android_use;
use Dim's MCP management or dim mcp add. Check for duplicate registrations first.
Discover devices, select my intended phone, call aua_setup(action="status"),
start the service only if absent, then verify aua_ready reports ready=true.
Call aua_screen to open the live phone view in Dim's right panel and check for
fresh video. If tools are not loaded, reload MCP or start a new chat and recheck.
Please perform the setup and report the results. I will handle phone authorization
and unlocking. Leave Jev disabled for now.

Choose the source route when its dependencies are available, or the optional standalone package when it better fits the environment. Both return a stable mcp_config. For source setup, prepare dependencies and clone the repository, then run from its root:

uv run --no-project --python 3.13 python scripts/install.py install --source .

The JSON result contains mcp_config.command and mcp_config.args. In Dim's MCP management, add a local stdio server named android_use, using that command and the arguments in their original order. The installer creates an independent runtime and verifies its MCP handshake before switching versions.

With the Dim CLI, register the returned command and all arguments in order. This example is the standalone macOS/Linux entry; replace the launcher path with your actual install result:

dim mcp add --scope user android_use -- /bin/sh "/absolute/path/runtime/launcher.sh" auto-serve
dim mcp test android_use --json

For Windows or the source installer, use their returned mcp_config instead of copying these arguments. See native package installation.

Check that the MCP test returns a non-empty tool list. Some Dim CLI versions can return success=true with tools=[]; that alone does not confirm tools are loaded. In a new Dim chat, actually call aua_setup and aua_ready. If Android Use is already registered, inspect that entry before adding another. Upgrade and rollback →

3. Give it a first task. Once the tools are loaded, send:

Use Android Use to check my phone is READY, open the live screen, then open Settings and report the battery level. Do not change any settings.

Dim Agent calls the Android tools and opens the screen through aua_screen. In Desktop, the view appears in the right panel; you can watch, tap or swipe, use Back/Home and copy a frame. If the host cannot embed the view, ask it to open the returned local preview URL in a browser on the same computer.

Try in Dim Agent

Example request

Read and navigate

“Open Settings, find Battery, and read the current usage.”

Fill a draft

“Enter the text I provide, read it back, and save a local draft.”

Compare prices

“Compare the same drink in Meituan and Taobao for delivery, including delivery and packaging fees. Report the totals without ordering.”

Use Agent + Jev

“Use Jev for short UI subgoals, keep planning and recovery with the Agent, and verify the final result yourself.”

Optional: enable Jev. Click Jev in the phone view, enter a TypeSafe API Key, then click 验证并启用 (Verify & enable). New tasks use the setting immediately; no TEXT_MODEL_* configuration is needed. Dim Agent keeps planning, text composition and final verification. Jev settings and data sent →

A phone screen you can follow

Dim Agent using Android Use with a live phone view

Android Use in Dim Agent: describe a task in the chat and follow the live phone view beside it. Tap or swipe inside the screen, use Back/Home, or copy a PNG frame. Live-screen guide →

Agent plans. Jev decides. Android Use acts.

Owner

Responsibility

Your Agent

Understand the request, plan subgoals, compose text, recover and verify outcomes.

Jev · optional

Choose a code-owned candidate from the current UI.

Android Use

Observe, check scope and freshness, execute native actions, enforce bounds and pause.

Known paths use batch, action-plus-wait or scroll_until. Delegate short workflows whose next action depends on new UI to aua_execute_goal. Without a TypeSafe key it runs in host-decider mode: your Agent picks each code-owned candidate with aua_goal_decide, and Android Use applies the same freshness, effect and no-replay checks. On uncertainty, control returns to the Agent with a step ledger and safe context. Architecture and examples →

Enable Jev from the screen

  1. Open the phone preview and click the Jev button.

  2. Paste your TypeSafe API Key.

  3. Click 验证并启用 (Verify & enable).

The server checks the connection and saves the key on this computer. New tasks pick up the setting immediately. You can test the connection, disable Jev, or remove the saved key from the same panel. Jev is off by default. Setup and advanced environment configuration →

Enabling Jev sends the subgoal, visible UI text and supplied input values to TypeSafe for decisions. The server never returns the saved key to the UI. Screenshots are sent only for visual location (aua_locate), after you separately turn on 「允许发送截图(视觉定位)」.

Built for real interaction

Capability

What you get

Understand the screen

Accessibility trees, screenshots, selectors and bounded waits.

Act precisely

Tap, long press, double tap, swipe, drag, launch apps and use system buttons.

See what the tree misses

Opt-in Jev Box locates canvas, image and unlabeled targets; a visual tap rechecks pixels and taps once.

Reduce round trips

Combine action, wait and observation. Search lists with bounded auto-scroll.

Input with verification

Unicode/emoji, replace/append and native text readback. A stable field can offer one focus → input → readback decision.

Keep control clear

User takeover for authentication, partial/uncertain action ledgers and no automatic replay.

Other clients and manual setup

Let your agent install it

Paste this into an agent that can use your local terminal:

Install and configure Android Use on this computer:
https://github.com/arcships/android-use

Read README.md, docs/guide.md, and skills/android-use/SKILL.md first.
Reuse existing installs and preserve uncommitted changes and other MCP servers.
Check dependencies, install missing ones from official sources, and set up the
current client's local stdio MCP connection. For Codex, use scripts/install.py to install a stable managed plugin; diagnose conflicts before migration.
Discover devices, select the intended one, reuse a healthy service or start it once,
and actually verify ready=true. Open the live screen and check whether video works.
If new MCP tools are not loaded yet, use the CLI for setup and explain how to reload.
Perform the installation; do not only return instructions for me to follow.
Ask me to handle USB authorization, unlocking, and required system permissions.
Report what was installed, which checks passed, and any remaining steps.

For a client without terminal access, use the manual path below. Stable upgrades and configuration migration → Detailed agent setup →

Or install manually

1. Prepare the tools and clone. Install uv, ADB, and ffmpeg. You also need Git; uv can provision Python 3.13.

git clone https://github.com/arcships/android-use.git
cd android-use
uv sync --frozen --python 3.13

2. Connect your client. Choose one route:

For a prebuilt plugin ZIP, follow the release installation steps. To install from a source checkout, run from the repository root with the Codex CLI installed:

uv run --no-project --python 3.13 python scripts/install.py doctor
uv run --no-project --python 3.13 python scripts/install.py install --source . --codex

Included in v0.6.2: installs an independent runtime and a stable launcher, verifies a real MCP handshake before switching, and checks conflicting registrations. Existing installs need the explicit --migrate-codex flag. Keep keys/settings while removing versioned-cache dependencies. Reload tools afterward. Upgrade, migration and rollback →

No Codex CLI or plugin build is needed. For clients using mcpServers, merge this entry into the existing config and replace the repository path:

{
  "mcpServers": {
    "android_use": {
      "command": "uv",
      "args": ["run", "--frozen", "--directory", "/absolute/path/android-use", "android-use-mcp"]
    }
  }
}

Cursor also uses "type": "stdio". VS Code's .vscode/mcp.json uses a top-level servers object instead. See client-specific paths and complete examples →.

3. Connect your phone. Enable USB debugging, connect a data cable, approve the prompt on the phone, and keep it unlocked:

adb devices -l
uv run android-use setup '{"action":"status"}'
# Only if the control service is not running:
uv run android-use setup '{"action":"start"}'
uv run android-use ready

Look for ready=true. With multiple devices, select the target explicitly. Then ask your agent:

“Connect to my Android, verify READY, and open the live screen.”

Full installation and troubleshooting →

MCP client support

This is a standard local stdio MCP server, built with the official Python MCP SDK. The Codex plugin is an optional installation bundle.

Connection

What to expect

Dim Agent Desktop

Local stdio tools, an embedded phone view in the right panel, and optional Agent + Jev workflows. Get started.

Local stdio MCP

Phone-control tools and standard text/image responses. Claude Desktop, Cursor, VS Code / Copilot, and other clients can use their local-command configuration.

MCP Apps

An embedded live-screen view when the host supports the extension. Layout and clipboard permissions depend on the host.

Local browser

Run uv run android-use screen and open the returned URL when an embedded view is unavailable.

The preview URL is a private local video endpoint, not a remote MCP endpoint. Remote-only MCP clients cannot connect to this stdio service. Client configuration examples are documented; full end-to-end acceptance has not been completed for every client/version.

In v0.5.1, supported devices record continuously; legacy segments reuse one connection and decoder. Brief known-health recovery keeps the picture visible. Recovery behavior and troubleshooting →.

Optional interaction variation · v0.7.0

Add variation to a gesture or local goal to sample bounded delays, selector touch points and swipe timing/endpoints. Fixed seeds reproduce samples; explicit coordinates and text stay exact. Added waits revalidate the page and share existing budgets. Default behavior is unchanged. This is interaction testing, with no anti-detection guarantee. Parameters, audit and boundaries →

Source and v0.7.0 releases are hosted at arcships/android-use.

A smaller loop, with explicit outcomes

# One call: tap → wait for a visible condition → return the tree.
# Replace these labels with ones from the current screen.
uv run android-use tap '{"selector":{"text":"Display"},"wait_for":{"selector":{"text_contains":"Brightness"},"timeout_seconds":5},"observe":"tree"}'

# Search a list with a swipe count and time budget; do not click the result.
uv run android-use scroll_until '{"selector":{"text":"Display"},"direction":"up","max_swipes":8,"timeout_seconds":20}'

Actions support optional postconditions. A timeout reports what happened and stops the batch; it does not repeat the action. Auto-scroll stops on a match, its limits, or repeated lack of progress. Gestures, waits, batches, and the original tools → · Optional Jev setup and benchmarks →

New in v0.6.0: no-key decisions and visual location

aua_execute_goal works without a TypeSafe key: your Agent picks each code-owned candidate through aua_goal_decide, with the same freshness, effect and no-replay checks. With Jev, verified emoji input is no longer retyped, each step makes fewer phone reads, and a goal head can stop once the goal is visibly achieved. New opt-in Jev Box (aua_locate, visual taps) finds canvas, image and unlabeled targets, and sends screenshots only after you turn on 「允许发送截图(视觉定位)」. Devices without screenrecord now say so instead of retrying the preview. v0.6.1: a Box that spans several labels in the tree is returned as ambiguous with tree_candidates instead of a tap point; use Box for icons, images and canvas, and selectors for text. Host decider and Box →

New in v0.5.2: reliable reconnection

The preview entry point stays available when idle, MCP frame reads recover a stopped service, and Refresh waits for fresh video before reporting success. Jev settings now have a clearly labeled sparkle button. Recovery behavior, validation and limits →

New in v0.5.1: continuous live preview

Supported devices no longer restart recording every 170 seconds. Older devices reuse one ADB pipe and decoder across bounded segments. Brief known-health recovery retains the picture; display-metadata failures pause controls without dropping healthy video. Authentication and real disconnection still clear the image.

Android 16 physical capture passed a 190-second native run with one encoder/connection/decoder and a 1.422-second maximum sampled gap. The earlier emulator motion stall remains unresolved; compatibility records retain a harness-seeded recovery error. Results, retained failures and limits →

New in v0.5.0: safer actions and automatic OCR

Included in the v0.5.0 plugin ZIP. Android Use retains every MCP tool and adds page-based AX / local OCR routing to read-only aua_read_fields. Healthy text stays on the tree path; missing text or requested labels triggers a device ROI capture and local recognition, then one Jev request judges multiple fields. Acknowledged actions wait for an effect without repeating writes. Money keeps printed signs, grouping and currency.

During development acceptance, Meituan AX and OCR both produced 19 + 1.5 + 2.4 = ¥22.9; Taobao automatically routed its empty semantic tree to OCR and produced 24 + 1.5 + 2.3 − 6 = ¥21.8. The Agent independently inspected checkout and emptied temporary carts; no order or payment was made. Failed ROI, animation and missing-field attempts are retained. This is neither a whole-task speed benchmark nor an exhaustive cheapest-price result. Subsequent guard refinements were tested offline; phone testing stopped at the user's request.

v0.5.0 passes 277 Python tests and 17 UI tests. Built-in OCR currently requires macOS and Xcode Command Line Tools. Automatic visual grounding/clicking remains future work. Reload your MCP connection after updating.

Field tool and parameters · Live acceptance and retained failures · Implementation boundaries and roadmap — 中文

Measured, with clear limits

Development comparisons include 18 source-level trials and 12 live Agent / Agent + Jev trials. Both live arms completed 6/6 tasks. Dynamic workflows needed fewer host replies with Jev; familiar batch paths did not improve. Sampling reduced repeated state queries, while input macros reduced decisions without an additional timing win in that sample. Methodology, raw records and retained failures →

Project status

v0.7.0 · MIT · 481 Python tests · 24 browser tests. Native install/upgrade/rollback acceptance passed on macOS ARM64/Intel (15 scenarios each), Linux x86_64 and Windows x86_64 (13 each). These package checks use no phone or model; earlier Android 16 physical-device and emulator acceptance remain separate. Validation evidence →

Multi-touch, arbitrary gesture paths, fine-grained text selection and custom-editor input fallbacks are not implemented. A matched UI condition proves that condition; the Agent must verify business outcomes. Control and preview run locally, and tool results are handled by your chosen client/model.

Android Use is maintained by Archship and its source is MIT; bundled runtime dependencies retain their own licenses. License audit and package notices →

Acknowledgements

Thank you to iPhone Use, its author and contributors for inspiring Android Use's phone-agent workflow, guided setup and live-screen experience.

Explore and contribute

Bug reports and contributions are welcome. Include your host OS, Android version, client, and a minimal reproduction; remove device identifiers, access tokens, and private screen content.

Available Tools

26 tools
aua_appsA
Read-onlyIdempotent

List installed third-party package IDs; query matches package ID, not human app name.

NameRequiredDescriptionDefault
limitNo
queryNo

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint and openWorldHint, so the safety profile is covered. The description adds one useful behavioral fact beyond that: results are limited to third-party packages, so system apps will be absent. It says nothing about ordering, pagination behavior, or what happens when no apps match.

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?

A single sentence with the primary purpose front-loaded and the critical caveat attached via a semicolon. Every clause earns its place; nothing is padded or repeated from the schema.

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 read tool with annotations covering safety and no output schema, the definition conveys what is returned (installed third-party package IDs) and the key matching caveat. The remaining gap is behavioral detail on limit/pagination and match semantics, which is minor but real given the 0% schema coverage.

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 0%, so the description carries the full burden. It does explain the most error-prone parameter (query targets package IDs, not display names), but leaves `limit` completely unexplained and does not clarify whether query is exact-match, prefix, or substring, nor that limit defaults to 100 and caps at 500.

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?

"List installed third-party package IDs" gives a specific verb (list) and a precisely scoped resource (third-party package IDs), which distinguishes it from the action-oriented siblings like aua_launch_app or aua_tap. It stops short of naming an explicit sibling to route to, but the scope is unambiguous.

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 note that the query matches package ID rather than human app name is a genuine usage constraint that prevents a common misuse, implying this tool is a discovery step before launching apps. However, there is no explicit "use this when..." guidance, no mention of pairing with aua_launch_app, and no note that system apps are excluded.

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

aua_batchA

Execute up to 20 known steps, using each operation's normal args. Entire plan is validated before actions. Stops on error, unmet condition, scroll miss, Enter submission or 25s budget (in-flight RPCs may overrun). Resume from stopped_at; never replay completed/uncertain steps.

NameRequiredDescriptionDefault
stepsYes

TDQS

A4/5.0
Behavior5/5

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

Annotations only declare readOnlyHint=false, openWorldHint=true and idempotentHint=false, so the description carries real additional weight: full-plan validation before any action, the exact stop conditions (error, unmet condition, scroll miss, Enter submission, 25s budget), that in-flight RPCs may overrun the budget, and the resume/replay rule. That is exactly the operational context an agent needs before firing a mutation batch.

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?

Four dense sentences, front-loaded with scope and validation, followed by stop conditions and the resume rule. Almost no waste; the parenthetical about in-flight RPCs is the only borderline detail, and it is genuinely useful for timeout reasoning.

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?

No output schema exists, and the description only indirectly reveals a return field via 'Resume from stopped_at'; it does not describe per-step results or error payload shape. Given the tool's mutation stakes and 20-step plan complexity, that is a small but real gap; everything else an agent needs to call it safely is present.

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?

With schema description coverage at 0% and a nested args object that is schema-free (additionalProperties: true), the description compensates by explaining that args are 'each operation's normal args' - i.e., reuse the argument shape of the corresponding single-op tool. That resolves the biggest ambiguity, though it does not enumerate per-op required args.

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?

States a specific verb and resource, 'Execute up to 20 known steps', plus the key scope constraint that each operation uses its normal args. This clearly separates it from the single-operation siblings (aua_tap, aua_swipe, ...) as a batched executor, but it never names the planning alternative aua_execute_goal, so the differentiation is inferential rather than explicit.

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 gives operational guidance for one scenario - resuming from stopped_at and never replaying completed or uncertain steps - which implies it is meant for known, pre-determined plans. It does not state when to prefer this over aua_execute_goal or the individual action tools, so usage is only partially implied.

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

aua_doctorA
Read-onlyIdempotent

Read local ADB device inventory and configuration. Does not start a phone service.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, and openWorldHint, so the safety profile is covered. The description adds one genuinely new behavioral fact — that it does not start a phone service — but says nothing about failure modes (no device attached, ADB not authorized) or what the inventory contains.

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 sentences, front-loaded with the positive capability and followed by the single most useful negative constraint. No filler, no restating of the title.

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 zero-parameter, read-only diagnostic with full annotation coverage, this is nearly sufficient — an agent knows it is a safe local inspection call. The remaining gap is that no output schema exists and the description does not hint at what 'inventory and configuration' returns or how it behaves when no device is connected.

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

Parameters4/5

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

The tool takes zero parameters, so there is nothing for the description to disambiguate; the baseline for a parameterless tool applies. No syntax or scoping detail is needed or missing.

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?

States a specific verb and resource: 'Read local ADB device inventory and configuration.' That distinguishes it from the action-oriented siblings (aua_tap, aua_launch_app, aua_screen_action) as a diagnostic/read tool, though it never names a sibling explicitly and 'aua_doctor' alone would be opaque without the sentence.

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?

Usage is implied (run it to inspect device state/health) and one useful exclusion is given: 'Does not start a phone service,' which separates it from setup/ready/launch flows. However, there is no explicit statement of when to prefer it over aua_ready, aua_setup, or aua_observe, which are the closest alternatives.

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

aua_double_tapA

Perform one intentional pair at selector OR x/y display pixels. interval is seconds between clicks, excluding RPC latency. Supports wait_for and observe. A failed pair may have executed its first click; never replay automatically.

NameRequiredDescriptionDefault
xNo
yNo
visualNo
observeNonone
intervalNo
selectorNo
wait_forNo
variationNo
observation_idNo

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false and idempotentHint=false, and the description adds genuinely new behavior: partial execution on failure (the first click may already have landed) plus the rule not to replay. It also clarifies that interval excludes RPC latency, which matters for timing-sensitive UI. It stops short of describing the return payload or what happens if both selector and x/y are supplied.

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?

Four short sentences, front-loaded with the action and its targeting modes, with the safety warning placed last. No filler, though the telegraphic phrasing leaves a few terms undefined.

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 9-parameter, non-read-only interaction tool with no output schema, the description covers the risky timing and failure semantics well but leaves most optional parameter groups (visual, variation, observation_id) unexplained. Adequate but not complete.

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 0% across 9 parameters, so the description carries real weight, and it does define interval units/semantics and confirms wait_for and observe are supported. It says nothing about variation, visual, observation_id, or the precedence rule when selector and x/y are both given, so most parameters remain undocumented.

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?

Names a specific action (one intentional pair) with its two mutually exclusive targeting modes, selector or x/y display pixels, which is a real distinction agents need. It does not name aua_tap as the sibling it differs from, so the differentiation from a plain tap or long-press must be inferred.

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?

"One intentional pair" implies this is the semantic double-tap gesture rather than two separate taps, and "never replay automatically" gives failure-handling guidance. However, there is no explicit statement of when to prefer aua_double_tap over two aua_tap calls or over aua_long_press, and no prerequisites.

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

aua_dragB

Drag once from start {x,y} to end {x,y}, in Android display pixels. Supports duration, observation_id, wait_for and observe. No automatic replay.

NameRequiredDescriptionDefault
endYes
startYes
observeNonone
durationNo
wait_forNo
variationNo
observation_idNo

TDQS

B3.1/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, openWorldHint=true and idempotentHint=false, so the mutating, non-repeatable nature is partly covered. The description adds genuinely useful behavior beyond that: a single drag execution and 'No automatic replay', which tells the agent it must re-issue calls itself. It says nothing about timing side effects, failure modes, or what the returned observation contains.

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?

Two short sentences, front-loaded with the action and coordinate system before the modifier list. The trailing parameter enumeration is low-value filler but not verbose enough to hurt.

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?

Seven parameters with zero schema descriptions, no output schema, and an open-world mutating annotation set is a heavy burden the description does not carry. Four parameters are named without semantics and `variation` (with its bounded-randomization semantics) is never mentioned, so an agent cannot confidently compose a call with waiting or observation.

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?

Schema description coverage is 0% — the schema only supplies titles, ranges and defaults. The description merely lists four parameter names (duration, observation_id, wait_for, observe) without explaining what any of them do, what observe modes return, or what wait_for waits on, and it omits `variation` entirely. Only the start/end pixel units are meaningfully clarified.

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?

Names a concrete verb and gesture ('Drag once from start {x,y} to end {x,y}') and pins the coordinate system to Android display pixels, which is a real ambiguity resolved. It does not, however, distinguish itself from the close sibling aua_swipe or from aua_scroll_until, so an agent must infer the difference from 'Drag once' and 'No automatic replay'.

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?

'Drag once' plus 'No automatic replay' implies this is a single-shot gesture rather than a repeated or scroll-like motion, which weakly separates it from aua_swipe. There is no explicit when-to-use statement, no named alternative, and no precondition (e.g., element already located via aua_locate) before calling.

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

aua_execute_goalA

Agent plans, a decision policy selects candidate IDs, Android Use executes. decider=auto uses Jev when enabled (TypeSafe key in screen settings, or ANDROID_USE_JEV_ENABLED=1 / TYPESAFE_API_KEY; sends visible app UI text to TypeSafe), otherwise host: no key, nothing sent externally. Host mode returns status=decision_required with compact state, option IDs and a one-time token; choose with aua_goal_decide. Caller supplies goal, foreground package, exact input texts and optional completion selector. Compact semantic state and parallel operation/target questions share one Jev request per step. Each Jev request also judges goal completion; without a completion selector a confident ACHIEVED stops before another action (stop_reason=model_goal_achieved, unverified: check it). input_macros=true can combine stable-field focus and exact input with native readback; max_steps counts candidate selections, with at most two native writes per input macro. Bounded candidate-only actions; no automatic replay. status=handoff is not success. effect_timeout_seconds bounds observation after acknowledged mutations; unresolved effects hand off without another mutation. Geometry-only changes do not prove an effect. Keep existing tools for planning, unsupported controls and recovery. Password screens hand off.

NameRequiredDescriptionDefault
goalYes
textsNo
actionsNo
deciderNoauto
observeNotree
packageYes
max_stepsNo
variationNo
completionNo
min_marginNo
input_macrosNo
max_model_callsNo
min_probabilityNo
timeout_secondsNo
completion_stateNovisible
effect_timeout_secondsNo

TDQS

A3.9/5.0
Behavior5/5

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

Beyond the annotations (readOnlyHint=false, openWorldHint=true, idempotentHint=false), it discloses what data leaves the device (visible app UI text sent to TypeSafe in Jev mode, nothing sent in host mode), what happens after mutations (effect_timeout_seconds bounds observation; unresolved effects hand off without another mutation), and warns that status=handoff is not success and geometry-only changes do not prove an effect. That is unusually rich disclosure about side effects, data egress, and result interpretation.

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

Conciseness3/5

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

The first sentence is well front-loaded and the description is dense with useful substance rather than filler, but it reads as a run-on paragraph of terse fragments ('Compact semantic state and parallel operation/target questions share one Jev request per step') with no grouping by concern. Several sentences require re-reading to parse, which hurts scanability for a long definition.

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 16-parameter, non-idempotent, open-world tool with no output schema, the description does cover return statuses (decision_required, handoff, stop_reason=model_goal_achieved with an 'unverified: check it' caveat) and safety behavior well. However, the majority of tuning parameters are unexplained, and the one-time token workflow is described only in passing, so an agent still lacks enough information to set non-default parameters confidently.

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 0% across 16 parameters, so the description carries the full burden. It does explain goal, package, texts, completion/completion selector, decider, input_macros, max_steps ('counts candidate selections, with at most two native writes per input macro'), and effect_timeout_seconds, but leaves actions, observe, variation, min_margin, min_probability, max_model_calls, timeout_seconds, and completion_state entirely undocumented.

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 opening sentence states the mechanism clearly: an agent plans, a decision policy selects candidate IDs, and Android Use executes them, so the tool reads as a bounded goal-execution orchestrator rather than a primitive action. It also signals the boundary with primitive siblings via 'Keep existing tools for planning, unsupported controls and recovery,' though it never names a specific sibling tool.

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?

It gives concrete routing conditions: decider=auto prefers Jev when enabled, falls back to host, and host mode returns status=decision_required that must be resolved with aua_goal_decide. It also states exclusions (password screens hand off, keep existing tools for planning/unsupported controls), but does not say when to prefer this over aua_screen_action or aua_batch for a given task.

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

aua_findC
Read-onlyIdempotent

Find exact text/description/resource_id/class_name/package or substring text/description. Multiple targets require an explicit 0-based index; bounds don't prove unobstructed access.

NameRequiredDescriptionDefault
limitNo
selectorYes

TDQS

C2.8/5.0
Behavior3/5

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

Annotations already declare readOnly, idempotent, and openWorld, so safety is covered. The description adds the important behavioral detail that ambiguous matches need an index and that 'bounds don't prove unobstructed access' - a hint that found elements may be occluded - but that phrase is cryptic and the description never says whether results come back as a list, how truncation interacts with limit, or what the returned payload looks like.

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

Conciseness3/5

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

Two sentences, front-loaded and free of padding, which is good. But the second sentence is compressed to the point of ambiguity - 'bounds don't prove unobstructed access' reads like an internal note rather than actionable guidance - so brevity comes at the cost of clarity.

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

Completeness2/5

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

With no output schema and only read-only/idempotent annotations, the description is the sole source for return shape, result ordering, and limit semantics, and it supplies none of these. For a query tool with a 10-field nested selector and a capped limit, an agent cannot predict what a call will yield.

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?

Schema description coverage is 0%, so the description carries the full load, yet it only covers the string-matching subset of the Selector fields. It never explains limit (default 20, max 50) or truncation behavior, and omits the boolean filters (enabled, focused, clickable), the meaning of index inside the selector, and how exact versus *_contains fields differ.

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

Purpose3/5

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

The description names the lookup fields (text, description, resource_id, class_name, package) and mentions substring matching, so the general idea of a query-by-selector tool comes through. But it never says what is being found (UI elements/widgets) or what the tool returns, so the agent must infer the resource from sibling names like aua_tap and aua_observe.

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 clause 'Multiple targets require an explicit 0-based index' gives conditional guidance for the multi-match case, which is genuinely useful. However, no alternative is named: it never says whether to use this versus aua_observe for inspection or whether aua_tap can take a selector directly, so the routing decision against siblings is left to inference.

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

aua_goal_decideA

Host-decider step of aua_execute_goal: send one option ID from the latest decision_required result with its one-time token. Android Use reads the UI again; if it changed, the choice is discarded and a fresh decision is returned (previous_choice_stale=true). Otherwise it executes that candidate once, checks its effect and returns the next decision, completion or handoff. An unknown option ID keeps the token; any other outcome consumes it. Tokens expire after 5 idle minutes and need the same MCP server process. timeout_seconds counts device time only, not host thinking time.

NameRequiredDescriptionDefault
tokenYes
choiceYes

TDQS

A4.6/5.0
Behavior5/5

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

The annotations only flag that this mutates state, acts in an open world, and is not idempotent. The description adds far more: the tool re-reads the UI, discards the choice and returns previous_choice_stale=true if the screen changed, executes the candidate only once, then checks the effect and returns the next decision, completion or handoff. It also documents token lifetime rules and the fact that an unknown option ID keeps the token while any other outcome consumes it.

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?

It is dense and front-loaded: the first clause identifies the step and the required input, and the remaining sentences add failure modes, the return or handoff behavior, and timing constraints. Nothing is filler, but several sentences are run-on, and the jump from stale-choice handling to token lifetime forces careful reading.

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 two-parameter tool with no output schema, the description covers everything needed to call it safely: input provenance, staleness handling, the possible outcomes (next decision, completion, handoff), and the fact that timeout_seconds counts device time only rather than host thinking time.

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?

Because the schema has no descriptions at all, the description carries the full burden. It maps token to the one-time token from the latest decision_required result and choice to an option ID from that result, and it explains how an invalid choice affects the token. It does not explain the 32-hex-character token format or the 40-character limit, which the schema already enforces.

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?

States a specific verb and resource: 'send one option ID from the latest decision_required result with its one-time token', and frames the tool as the 'Host-decider step of aua_execute_goal'. That framing directly distinguishes it from the sibling aua_execute_goal, which is the tool that produces the decision in the first place.

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 precondition is explicit: it must be called with a choice taken from the latest decision_required result, and the token must come from the same MCP server process and be used within 5 idle minutes. It also implicitly routes the agent to aua_execute_goal to obtain the initial decision. The only gap is that it never names an alternative explicitly (for example resuming via aua_resume when the token has expired); the guidance is descriptive rather than prescriptive about which path to choose.

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

aua_launch_appB

Launch an installed package's launcher activity once; no force-stop or data reset.

NameRequiredDescriptionDefault
observeNonone
packageYes
wait_forNo

TDQS

B3.1/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, idempotentHint=false and openWorldHint=true; the description usefully reinforces the non-idempotent, non-destructive nature by stating it launches once and performs no force-stop or data reset. It does not disclose what happens on failure (package not installed, no launcher activity) or that the app is brought to the foreground, leaving real behavioral gaps.

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?

A single compact sentence with the core action front-loaded and no filler. The brevity is efficient, though it comes at the cost of the missing parameter and post-launch behavior detail rather than through disciplined editing.

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

Completeness2/5

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

For a tool with three parameters, a nested wait condition, and no output schema, the description should explain that `observe` controls whether a tree/screenshot is returned and that `wait_for` blocks until a selector appears or disappears. None of that is present, so an agent cannot predict the response shape or the blocking behavior.

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?

Schema description coverage is 0%, so the description must compensate, and it only touches the required `package` parameter obliquely. The `observe` enum (none/tree/screenshot/both) and the nested `wait_for` condition with timeout are entirely unexplained, despite materially changing what the call returns and how long it blocks.

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?

"Launch an installed package's launcher activity" names a specific verb and resource, and "once" scopes the action. It does not name or differentiate from siblings such as aua_apps (package discovery) or aua_screen_action (post-launch interaction), so an agent must infer routing.

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?

"no force-stop or data reset" implies a boundary condition (this is a plain start, not a restart/clear) and "once" warns against repeated calls, which gives implicit usage guidance. However, it never states when to prefer this over aua_apps or how it relates to aua_observe/aua_wait for post-launch inspection.

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

aua_locateA
Read-onlyIdempotent

Read-only Jev Box location for elements the accessibility tree lacks (canvas, games, WebView images, icons without labels); small text such as prices or tags is unreliable, so select text with selectors. Sends one masked screenshot of region (default full display) to TypeSafe, so it needs Jev plus the separate images opt-in (允许发送截图(视觉定位) in screen settings, or ANDROID_USE_JEV_IMAGES=1); otherwise jev_images_disabled. Refuses password/OTP screens and paused devices. One request asks presence, match count and a box; status is located, not_found, ambiguous, low_confidence or masked; a box spanning several tree labels is ambiguous with reason and tree_candidates. box=[x,y,width,height] and tap=[x,y] are display pixels; tap is set only when located. masks blank sensitive areas before upload. Prefer trees/selectors when they work; a located box is a model judgment, not verification.

NameRequiredDescriptionDefault
masksNo
regionNo
packageYes
descriptionYes
min_presenceNo
min_confidenceNo
timeout_secondsNo

TDQS

A4.3/5.0
Behavior4/5

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

Goes well past the readOnly/openWorld/idempotent annotations: it discloses that a masked screenshot leaves the device to a third party (TypeSafe), the exact opt-in toggle and env var, the jev_images_disabled failure, refusal of password/OTP screens and paused devices, and the five possible statuses. The remaining gap is that it does not say how long a request may take or what a masked upload costs in latency, though timeout_seconds hints at it.

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?

Front-loaded with the purpose and the strongest routing rule in the first clause, then prerequisite, then refusals, then output shape. The sentences are dense to the point of being comma-chained and some parenthetical detail (the Chinese toggle label) could be trimmed, but almost every clause carries usable information.

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 an open-world vision tool with no output schema, the description covers return shape (box, tap, status enum, ambiguous reason with tree_candidates), pixels vs. logical coordinates, and the honesty caveat that a located box is a model judgment rather than verification. Only the unlabeled numeric thresholds keep it short of complete.

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 0% across 7 parameters, so the description has to carry semantics and only partly does: it explains region's default ('default full display'), masks ('masks blank sensitive areas before upload'), and the output box/tap pixel convention. It says nothing about min_presence, min_confidence, timeout_seconds, or the package pattern, which are the tuning knobs an agent would most likely set wrong.

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?

States a specific verb and resource — read-only visual location of elements — and scopes it precisely to what the accessibility tree lacks (canvas, games, WebView images, unlabeled icons). That scope statement alone separates it from tree-based siblings like aua_find and from aua_screen_action.

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

Usage Guidelines5/5

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

Explicitly says when not to use it ('small text such as prices or tags is unreliable, so select text with selectors') and closes with 'Prefer trees/selectors when they work'. It also names the prerequisite condition for use (Jev plus the images opt-in) and the fallback failure code when unmet.

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

aua_long_pressB

Long press once by selector OR x/y display pixels for duration seconds (0.5..3). Supports wait_for and observe. Inspect uncertain results; no replay.

NameRequiredDescriptionDefault
xNo
yNo
visualNo
observeNonone
durationNo
selectorNo
wait_forNo
variationNo
observation_idNo

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, openWorldHint=true and idempotentHint=false, so mutability and non-idempotency are covered. 'No replay' and 'inspect uncertain results' add a modest verification warning, but nothing about failure behavior, blocking, or what an uncertain outcome looks like.

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?

Three short clauses, front-loaded with the verb and targeting modes, then capability flags, then a caution. 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?

For a 9-parameter tool with zero schema description coverage, no output schema, and opaque nested objects (visual/LocateArgs, variation, observation_id), the description explains only the targeting modes and duration. An agent cannot infer what visual matching, variation, or observation_id do from this text.

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?

With 0% schema description coverage the description must carry the load, and it does cover the key semantic decision (selector versus x/y coordinates, mutually exclusive via 'OR') plus the duration range. It leaves visual, variation, observation_id, the observe enum values and all Selector fields entirely unexplained.

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?

States a specific verb and resource: 'Long press once by selector OR x/y display pixels', with a duration parameter. The 'once' phrasing implicitly separates it from aua_tap and aua_double_tap, though no sibling is named explicitly.

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?

'Inspect uncertain results; no replay' gives post-call guidance, but the description never says when to choose a long press over aua_tap, aua_drag or aua_swipe, nor when selector-based targeting should be preferred over raw coordinates.

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

aua_observeC
Read-onlyIdempotent

Read a current accessibility tree and/or screenshot. Coordinates are Android display pixels; image pixels multiplied by pixel_to_device give action coordinates.

NameRequiredDescriptionDefault
modeNotree
max_nodesNo

TDQS

C2.9/5.0
Behavior3/5

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

Annotations already declare readOnly=true, idempotent=true, openWorld=true, so safety intent is covered. The description adds a genuinely useful behavioral note that action coordinates must be derived from image pixels via pixel_to_device, but it does not say where that value comes from or explain the max_nodes truncation behavior implied by the 500 cap.

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?

Two short sentences with the core action front-loaded and no filler. The coordinate sentence is dense but earns its place, though 'pixel_to_device' is used without saying where it is obtained.

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 no output schema and 0% parameter documentation, the definition should describe what comes back (tree node fields, screenshot payload, how pixel_to_device is delivered). Instead it leaves the return shape and the parameter choices unexplained, which is a substantial gap for the observation primitive of an automation toolkit.

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?

Schema description coverage is 0%, so the description carries the full burden and largely fails: neither the mode enum values (tree/screenshot/both) nor max_nodes are explained. Only the coordinate convention is clarified, and that is about interpreting output rather than configuring these two parameters.

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

Purpose4/5

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

States a specific verb (Read) and resource (current accessibility tree and/or screenshot), and the 'and/or' matches the mode enum. It does not differentiate itself from siblings like aua_screen, aua_screen_frame, or aua_find, so an agent must infer which read path to pick.

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 when-to-use or when-not-to-use guidance and no named alternatives among the many siblings. In particular, the description never says when to prefer mode=tree vs screenshot vs both, which is the main decision the caller must make.

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

aua_pauseA
Idempotent

Pause Android Use reads/actions for user authentication takeover across CLI/MCP processes.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare this is a non-read-only, idempotent, non-destructive operation. The description adds genuinely useful scope information that annotations cannot convey — that the pause spans CLI/MCP processes and blocks reads as well as actions — but it omits how the pause is lifted, whether it expires, and whether it survives process restarts.

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?

A single front-loaded sentence with no filler. The phrasing 'Android Use reads/actions' is slightly compressed and would read more clearly as plain language, but nothing is wasted.

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 no parameters and no output schema, the description covers what the agent must supply, but for a global state-changing toggle it should say how the paused state is released and what the agent should expect on subsequent calls — the most consequential behavior is left implicit.

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

Parameters4/5

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

The tool takes zero parameters, so there is nothing for the description to disambiguate; the baseline 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?

States a specific verb (pause) and object (Android Use reads/actions), plus the motivating scenario (user authentication takeover). It is distinguishable from the sibling set of action tools because it halts rather than performs device actions, though it never names aua_resume as its inverse.

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 phrase 'for user authentication takeover' implies the triggering condition, but there is no explicit when-to-use or when-not-to-use rule, no mention of pairing it with aua_resume, and no statement about whether other agents/sessions are affected.

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

aua_press_buttonC

Press home/back/recent/enter/volume once. Enter may submit; user must authorize it.

NameRequiredDescriptionDefault
nameYes
observeNonone
wait_forNo

TDQS

C2.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, idempotentHint=false and openWorldHint=true, so the mutating, non-repeatable nature is covered structurally. The description adds real value by warning that Enter may submit something and requires user authorization, which is not in the annotations. It says nothing about the observation or wait side effects the tool can trigger.

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?

Two short sentences with the core action front-loaded and no filler. The second sentence is well placed as a safety caveat, though the phrasing is terse to the point of being cryptic about what 'authorize' requires.

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

Completeness2/5

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

For a 3-parameter tool with a nested WaitCondition and no output schema, the description leaves two of three parameters undocumented and never explains what the call returns or how waiting/observation interact with the press. It covers the action and its risk but not the tool's full surface.

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?

Schema description coverage is 0%, so the description carries the full burden, yet it only partially enumerates the 'name' enum and never explains the 'observe' (none/tree/screenshot/both) or 'wait_for' (selector + state + timeout) parameters. An agent cannot learn from the text that a press can also return a UI tree or screenshot or block until a condition holds.

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?

States a specific verb ('Press') and names the concrete buttons: home/back/recent/enter/volume. It is distinguishable from siblings like aua_tap or aua_long_press, which act on screen elements rather than hardware/navigation keys. It slightly underspecifies by lumping volume_up/volume_down under 'volume'.

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 choose this over aua_tap, aua_screen_action, or aua_type_text, and no prerequisites beyond a passing note that Enter requires user authorization. The agent must infer that this is the tool for hardware/nav keys rather than screen coordinates.

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

aua_read_fieldsA
Read-onlyIdempotent

Read-only Jev field judgments on current app text. source=auto uses the tree when text/expected_labels and money candidates suffice; otherwise captures a device ROI and runs local macOS Vision OCR (requires Xcode Command Line Tools). source=tree disables OCR; screen_ocr forces it. OCR pixels are checked again after inference. No visual clicks. Extract code-owned money/text spans or classify supplied options, all fields in one request. Requires Jev enabled. evidence_text optionally supplies Agent OCR text, explicitly marked caller_provided_text, not verified as a phone read. Missing/ambiguous values return NONE. Decimal parsing is local. region limits evidence in display pixels; ocr_masks exclude non-evidence from OCR and hashing. min_ocr_confidence is optional uncalibrated provider telemetry, not accuracy. Declare currency for ambiguous symbols. Optional sum_check validates same-currency Decimal sums in code; no device actions. verified=false always requires Agent business verification.

NameRequiredDescriptionDefault
fieldsYes
regionNo
sourceNoauto
packageYes
currencyNo
ocr_masksNo
sum_checkNo
min_marginNo
evidence_textNo
expected_labelsNo
min_probabilityNo
timeout_secondsNo
min_ocr_confidenceNo

TDQS

A4.1/5.0
Behavior5/5

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

Adds substantial behavior beyond the readOnly/openWorld/idempotent annotations: OCR pixels are re-checked post-inference, missing or ambiguous values return NONE, decimal parsing is local, min_ocr_confidence is uncalibrated provider telemetry rather than accuracy, evidence_text is marked caller_provided_text and not verified as a phone read, and verified=false always requires Agent business verification. These are non-obvious trust and verification semantics an agent could not infer from the schema or annotations alone.

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

Conciseness3/5

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

Highly information-dense with essentially no wasted claims, but it is delivered as a semicolon-chained wall of text with no grouping by parameter or mode, and jargon-heavy phrasing ('code-owned', 'tree', 'hashing'). The most decision-critical rule (auto vs tree vs screen_ocr) is front-loaded, but the rest requires re-reading to map to individual parameters.

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 13-parameter, no-output-schema tool with zero schema description coverage, the description supplies return semantics (NONE on ambiguity), verification obligations, environment prerequisites, and the OCR cost model. The remaining gaps are the undocumented tuning parameters (min_probability, min_margin, timeout_seconds) and the meaning of 'package', which an agent must guess or trial.

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?

With 0% schema description coverage, the description carries the parameter burden and does well for most: source modes, region limits in display pixels, ocr_masks excluding non-evidence from OCR and hashing, currency required for ambiguous symbols, sum_check validating same-currency Decimal sums, evidence_text provenance, and field kinds money/text/choice. However min_margin, min_probability, timeout_seconds, and package semantics are never explained anywhere, leaving four of thirteen parameters opaque.

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?

States a specific verb+resource ('Read-only Jev field judgments on current app text') and clarifies concretely with 'Extract code-owned money/text spans or classify supplied options, all fields in one request.' The term 'Jev' and 'code-owned' are unexplained jargon, but the second sentence makes the actual function intelligible and 'No visual clicks'/'no device actions' implicitly separates it from the aua_screen_action/tap family.

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?

Gives explicit mode-selection rules: source=auto uses the tree when text/expected_labels and money candidates suffice, otherwise captures a ROI and runs macOS Vision OCR; source=tree disables OCR, screen_ocr forces it, and OCR requires Xcode Command Line Tools. It also states a prerequisite ('Requires Jev enabled'). It never compares against sibling tools like aua_find or aua_observe, so there is no true alternatives guidance.

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

aua_readyB
Read-onlyIdempotent

Verify unlocked screen, UiAutomator, foreground, display and a nonempty tree. Does not start/restart services. Reuse the returned observation.

NameRequiredDescriptionDefault
screenshotNo

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint and openWorldHint, so safety and repeatability are covered by structured data. The description adds genuine value beyond them by disclosing that it will not start or restart services and that the returned observation should be reused, but it is silent on what happens when verification fails (exception vs. negative result) and on cost/latency.

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?

Three short sentences, no filler, with the verification scope front-loaded and the constraints following. Slightly telegraphic phrasing ("Verify unlocked screen, UiAutomator, foreground, display" reads as a compressed list) but nothing is wasted.

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?

There is no output schema, and the description only says to reuse "the returned observation" without indicating what that observation contains (device state, UI tree, screenshot when requested) or its shape. For a readiness gate whose output feeds subsequent calls, this leaves a meaningful gap, though the precondition list covers the core semantics.

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 single parameter 'screenshot' has 0% schema description coverage and its default of false is the only structured hint available. The description never mentions screenshots, so it does nothing to explain what enabling it captures or how it affects the returned observation; with low coverage the description was expected to compensate and does not.

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?

"Verify unlocked screen, UiAutomator, foreground, display and a nonempty tree" gives a specific verb plus an explicit checklist of preconditions, which is far more informative than the opaque name aua_ready. It does not, however, name or contrast itself with any sibling such as aua_doctor or aua_observe, so an agent must infer the boundary.

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 clause "Does not start/restart services" establishes one clear exclusion, and "Reuse the returned observation" implies the result should be carried forward rather than re-checked. There is no explicit statement of when to call this versus aua_doctor (diagnostics) or aua_observe (state capture), leaving the primary routing decision to inference.

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

aua_resumeA
Idempotent

Resume only after user confirms authentication is finished; then get a fresh observation.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare that this is a non-read-only, idempotent, non-destructive operation. The description adds useful behavioral context—auth confirmation is required and a fresh observation is returned—but does not explain what 'resume' actually changes (e.g., unpausing an action queue) or what state is resumed.

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, front-loaded sentence with no wasted words. It puts the critical precondition first and the resulting action second, making it easy to scan.

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 zero-parameter tool with annotations covering safety, the description covers the essential gating condition and outcome. It is still somewhat incomplete because it never clarifies what 'resume' means operationally or how it differs from aua_observe, which may leave an agent guessing in ambiguous pause/resume scenarios.

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

Parameters4/5

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

The tool has zero parameters, so there is no parameter semantics to clarify. The baseline for zero-param tools is 4, and the description appropriately avoids empty parameter discussion.

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 states a clear action ('Resume') with a specific precondition ('only after user confirms authentication is finished') and a follow-up effect ('get a fresh observation'). It does not explicitly distinguish itself from siblings like aua_observe or aua_pause, but the verb and condition are specific enough for an agent to understand the tool's core role.

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?

It provides one clear when-to-use condition: after the user confirms authentication is finished. However, it offers no guidance on when not to use it, what to do if authentication is not finished, or how it relates to alternatives such as aua_pause or aua_observe.

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

aua_screenA
Idempotent

Open/reuse the Android live screen sidebar. Uses an independent H.264 video stream, not screenshot/tree polling. Requires ffmpeg. READY also links the same panel.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare idempotentHint=true and readOnlyHint=false; the description adds meaningful context beyond them by disclosing the transport (H.264 stream), the external ffmpeg dependency, and that calling it reuses an existing panel rather than spawning a new one. It stops short of describing failure behavior if ffmpeg is absent.

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?

Three short sentences with the core action front-loaded and the differentiator and dependency following in priority order. The telegraphic, uppercase 'READY' reference is slightly cryptic but costs no extra length.

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 no-parameter, no-output-schema tool whose main risks are environment prerequisites, the description covers the dependency and the reuse semantics well. It leaves open what the caller receives back (a panel handle or stream reference) and what happens when ffmpeg is missing, which matters for an agent deciding whether it can rely on this tool.

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

Parameters4/5

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

The tool takes zero parameters, so there is nothing for the description to disambiguate; baseline 4 applies. The schema coverage is 100% with an empty object, consistent with the description.

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?

States a concrete verb and resource: 'Open/reuse the Android live screen sidebar.' It implicitly differentiates itself from polling-based siblings by noting it uses 'an independent H.264 video stream, not screenshot/tree polling', but never names aua_screen_frame or aua_observe 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?

Usage is implied by the contrast with screenshot/tree polling, and the 'READY also links the same panel' note hints at a relationship with aua_ready. However, there is no explicit when-to-use statement, no exclusion naming a sibling, and no guidance on when to prefer this over aua_screen_frame.

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

aua_screen_actionC

App-only preview controls and local Jev settings. Phone actions are blocked during authentication takeover. Settings never return credentials; save tests a fixed synthetic Choice before enabling. Users enter their own key in the screen UI.

NameRequiredDescriptionDefault
xNo
yNo
actionYes
api_keyNoWrite-only key, validated privately by the server
directionNo

TDQS

C2.5/5.0
Behavior4/5

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

Beyond the annotations (readOnlyHint=false, openWorldHint=true, idempotentHint=false), the description discloses real behavioral traits: phone actions are suppressed during auth takeover, settings responses never expose credentials, and save runs a fixed synthetic Choice test before enabling. That is meaningful side-effect and safety context an agent could not infer from structured fields, though it stops short of saying what each action returns or which actions mutate local state.

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

Conciseness3/5

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

Four short telegraphic sentences with no filler, but the phrasing is jargon-heavy ('fixed synthetic Choice', 'local Jev settings') and the most decision-relevant information, the action list and parameter mapping, is absent. Compact, yet under-specified rather than tight.

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?

This is a 13-action multi-purpose tool with 5 parameters, 20% schema coverage, and no output schema, so the description carries a heavy burden it does not meet. It omits action-by-action behavior and the x/y/direction/api_key applicability, leaving an agent unable to invoke most actions correctly without guessing.

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?

Schema description coverage is only 20% – just api_key has a note – and the description adds only that users supply their own key in the screen UI. It never maps x/y to tap/swipe, direction to swipe, or api_key to jev_save/jev_test, leaving 13 actions' parameter requirements undocumented. With this low coverage the description should compensate and does not.

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

Purpose2/5

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

The description only characterizes the tool as 'App-only preview controls and local Jev settings' without a specific verb or enumeration of what the 13 actions do. It never distinguishes itself from siblings such as aua_tap, aua_swipe, or aua_screen, even though its action enum overlaps with those tools' purposes. An agent cannot predict what calling it will accomplish.

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 only guidance is a constraint ('Phone actions are blocked during authentication takeover'), which implies a when-not condition but no when-to-use rule. Nothing tells the agent which of the 13 actions to pick, or when to prefer this tool over aua_tap/aua_swipe for the same tap/swipe operations.

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

aua_screen_frameB
Read-onlyIdempotent

App-only cached video frame. Does not query UI trees or capture screenshots.

NameRequiredDescriptionDefault
after_seqNo

TDQS

B3.1/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnlyHint, idempotentHint, openWorldHint=false), so credit here goes to added behavioral detail: 'cached' signals the frame is not freshly captured (and may be stale), and 'app-only' scopes it to the app rather than the full screen. That is meaningful disclosure beyond the annotations, though staleness/freshness semantics could be spelled out more explicitly.

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?

Two short fragments, zero padding, with the resource and the exclusion front-loaded. It is efficient, though the extreme terseness borders on under-specification rather than disciplined brevity.

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?

There is no output schema, so the description should explain the return value (image payload, format, resource reference) but does not, and the one parameter is left undefined in both schema and description. For a simple read-only tool this is a notable gap, not a fatal one.

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 sole parameter 'after_seq' has 0% schema description coverage and the description does not mention it at all. With low coverage the description must compensate for the gap, but it supplies no meaning for the parameter (sequence semantics, cursor behavior, or what happens when omitted).

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

Purpose3/5

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

The fragment 'App-only cached video frame' identifies the resource (a video frame) and its scope (app-only), but omits a verb and never says it returns/retrieves image data. The second sentence distinguishes it from screenshot and UI-tree tools, which helps, but the core action remains implied rather than stated.

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?

Negative guidance ('Does not query UI trees or capture screenshots') implicitly steers an agent away from this tool when it needs a UI tree or a fresh screenshot, which is real value. However, it never names an alternative sibling (e.g., aua_screen, aua_observe) or states positively when this tool is the right choice over them, leaving usage for inference.

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

aua_scroll_untilA

Find a visible selector, swiping only if absent. Bounded by max_swipes and timeout_seconds; stops after two unchanged regional snapshots, or app/display change. Does not click the result. no_progress does not prove list end. Use region for nested lists.

NameRequiredDescriptionDefault
regionNo
observeNotree
durationNo
selectorYes
directionNoup
variationNo
max_swipesNo
settle_secondsNo
timeout_secondsNo

TDQS

A3.6/5.0
Behavior4/5

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

Beyond the annotations, the description discloses concrete termination semantics: bounded by max_swipes and timeout_seconds, halting after two unchanged regional snapshots or an app/display change. It also warns that no_progress does not prove list end, a non-obvious caveat. The swiping behavior is consistent with readOnlyHint=false and openWorldHint=true, but the return status/failure shape is never described and no output schema exists.

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?

Short telegraphic sentences, front-loaded with the primary action and termination rules, with zero filler. The 'no_progress' sentence is slightly opaque since no output schema documents that field, so the reference is under-anchored rather than wasteful.

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 9-parameter, state-mutating, open-world tool with no output schema, the description covers stopping conditions and one key modifier (region) but leaves the observation modes, direction semantics, and result payload unexplained. It is adequate to call correctly in the common case but incomplete for the full parameter surface.

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 0% across 9 parameters, so the description carries the full burden and only partially meets it: it explains max_swipes and timeout_seconds as bounds, and region as the nested-list scoping mechanism. It says nothing about observe, direction (defaulting to 'up', which is surprising for scroll-to-find), duration, settle_seconds, or variation.

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 states a specific verb and resource ('Find a visible selector') plus the mechanism ('swiping only if absent'), which distinguishes it functionally from a bare find or raw swipe. It never names a sibling tool, so an agent must infer which of aua_find/aua_swipe/aua_scroll_until to pick from behavior alone.

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?

It gives a conditional scoping hint ('Use region for nested lists') and a post-condition constraint ('Does not click the result'), which implies the tool is for locating, not activating. However, it never states when to prefer this over aua_find or a manual aua_swipe sequence, and gives no exclusion for cases where the target is already known to be on screen.

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

aua_setupA

First use: status/discover, start once if needed, then ready. configure selects a serial. start pushes a pinned JAR and reuses/starts UiAutomator without root or keyboard APK.

NameRequiredDescriptionDefault
actionNostatus
serialNo

TDQS

A3.5/5.0
Behavior3/5

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

Beyond the annotations it adds real context: start pushes a pinned JAR and reuses or starts UiAutomator, and it notes no root or keyboard APK is required. However, for a mutating tool (readOnlyHint=false, idempotentHint=false) it does not describe what state is changed on the device, whether the push is repeatable, or what happens on failure.

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?

Two dense sentences, front-loaded with the first-use sequence, with no padding. The telegraphic style ('configure selects a serial') borders on cryptic but every clause carries information.

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 no output schema and no annotation detail, the description would need to explain return states and failure modes. It covers sequencing and per-action meaning, which is the core need, but leaves error handling, side effects, and what 'ready' actually guarantees unstated.

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 description coverage is 0%, so the description must carry the load and it largely does: status/discover are tied to first use, configure is tied to selecting a serial, and start is tied to the JAR/UiAutomator behavior. discover and status are still not individually explained, so the mapping is slightly incomplete.

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

Purpose3/5

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

The description never plainly states 'prepares the device for automation'; the purpose must be inferred from the action list and the note about pushing a JAR and starting UiAutomator. Individual actions (configure selects a serial, start pushes a pinned JAR) are concrete, but the overall verb+resource framing is missing.

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?

It explicitly prescribes a first-use sequence: run status/discover, start once if needed, then proceed to ready. That is strong ordering guidance an agent would otherwise have to guess. It stops short of specifying when not to call it or naming aua_ready/aua_doctor as the explicit alternatives.

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

aua_swipeC

Perform one swipe. Direction is finger motion: up usually reveals later rows. Use display-pixel region if needed, observe for next-step context. No automatic retries.

NameRequiredDescriptionDefault
regionNo
observeNonone
durationNo
wait_forNo
directionNoup
variationNo
observation_idNo

TDQS

C2.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, openWorldHint=true and idempotentHint=false, so the mutation/non-repeatable nature is covered. The description adds genuinely new behavior: "No automatic retries" warns the agent it must re-issue failed swipes, and the direction note disambiguates finger-motion vs content-motion. It still omits what a swipe can destroy or what happens on a partial/no-op gesture.

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?

Four short sentences, front-loaded with the action, no redundant wording. Slightly telegraphic phrasing ("observe for next-step context") costs a little clarity but nothing is wasted.

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

Completeness2/5

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

For a 7-parameter, mutation-capable, non-idempotent gesture tool with an optional observation/observation_id loop and a wait condition, the description is too thin. The relationship between observe and observation_id, and the role of wait_for after a swipe, are never explained, and there is no output schema to compensate.

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?

Schema description coverage is 0% across 7 parameters, so the description carries the full burden and only covers two: direction (finger motion, up reveals later rows) and region (display-pixel units). It says nothing about observe, observation_id, wait_for, duration or variation, leaving the most consequential parameters undocumented.

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?

States a concrete verb and gesture ("Perform one swipe") and clarifies what direction means in terms of finger motion. It distinguishes a swipe from a tap or drag implicitly through the gesture name, but never contrasts it with siblings like aua_drag or aua_scroll_until.

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?

"Use display-pixel region if needed" and "observe for next-step context" give fragments of conditional guidance, but there is no statement of when this tool should be chosen over aua_scroll_until, aua_drag, or repeated aua_tap. The agent must infer the choice with no exclusions.

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

aua_tapA

Tap once by selector OR x/y display pixels OR visual (aua_locate args: Jev Box with the images opt-in). visual taps the box center only when located, after rechecking the pixels around the box, never in batch. Ambiguity returns candidates and a screenshot. Optional wait_for waits for visible/gone selector after action; timeout never replays it. Optional observation_id checks same runtime/app/display context. No automatic replay.

NameRequiredDescriptionDefault
xNo
yNo
visualNo
observeNonone
selectorNo
wait_forNo
variationNo
observation_idNo

TDQS

A3.7/5.0
Behavior4/5

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

Annotations only declare non-read-only, open-world, non-idempotent; the description adds substantive behavior beyond that: visual taps only the box center when located, rechecks surrounding pixels first, is disallowed in batch, ambiguity returns candidates plus a screenshot, and failed wait_for timeouts are never replayed. Those are the safety-relevant facts an agent needs for a mutating tool. It stops short of describing the response of a successful tap or what permissions/context are required.

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

Conciseness3/5

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

Information is front-loaded and each clause carries content, but the prose is compressed to the point of unreadability in places ("aua_locate args: Jev Box with the images opt-in", "never replays it") and mixes modes, error behavior, and context checks without structure. Restructuring into per-parameter sentences would lose nothing and gain clarity.

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 mutating, open-world tool with 8 optional parameters and no output schema, the description covers the essential gaps: how targeting resolves, the ambiguity fallback (candidates + screenshot), post-action waiting, context validation, and the no-replay guarantee. The undeclared observe/variation parameters are a gap, but the agent can still call the tool correctly from what is written.

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 0% across 8 parameters, so the description must carry the load and it only partly does: it explains selector, x/y, visual (by reference to aua_locate args), wait_for, and observation_id, but never mentions the observe enum or the variation object. The wait_for semantics (visible/gone, timeout-not-replayed) and observation_id's runtime/app/display check are genuinely useful additions the schema does not convey.

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 opens with a specific verb and scope ("Tap once by selector OR x/y display pixels OR visual") and names the three targeting modes, which separates it from siblings like aua_double_tap and aua_long_press. The clarity is dented by garbled phrasing ("Jev Box with the images opt-in"), which reads like an unresolved template variable and forces the agent to guess what visual targeting actually requires.

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?

It gives mode-selection guidance (selector vs pixel vs visual) and a negative constraint ("never in batch"), which is real usage information. However, it never states when to prefer this over aua_double_tap, aua_long_press, or aua_locate directly, and no prerequisites or preconditions are spelled out.

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

aua_type_textA

Set Unicode text on a focused, editable, non-password field. Focus it with tap first. Default replace=true, no submit. verify checks exact readback. App must support setText. Newlines need allow_newlines=true. Never blindly retry uncertain input.

NameRequiredDescriptionDefault
textYes
verifyNo
observeNonone
replaceNo
selectorNo
wait_forNo
allow_newlinesNo

TDQS

A4.1/5.0
Behavior4/5

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

Annotations only declare readOnlyHint=false, idempotentHint=false, openWorldHint=true. The description adds real behavioral context: replace defaults to true (existing text is overwritten), no submit/Enter is pressed, verify performs an exact readback, the target app must support setText, and retries on uncertain input are discouraged. It doesn't say what happens on failure or how the field is chosen when selector is omitted.

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?

Five short sentences, front-loaded with the action and target, then prerequisites, defaults, and cautions. Every sentence conveys a distinct constraint; no filler.

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 7-parameter mutation tool with nested Selector/WaitCondition objects and no output schema, the description leaves the selector and wait_for mechanics fully unexplained and gives no return-value expectations. The key safety and default behaviors are covered, but the parameter surface is only partially addressed.

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 0%, so the description must carry parameter meaning. It covers text (Unicode, newlines require allow_newlines=true), replace (default true), and verify (exact readback), but says nothing about observe (none/tree/screenshot/both), selector, or wait_for, leaving three of seven parameters undocumented.

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?

States a specific verb and target: 'Set Unicode text on a focused, editable, non-password field.' The constraints (focused, editable, non-password) define exactly the class of element it targets and implicitly separate it from aua_tap, which is named as the focusing step.

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?

'Focus it with tap first' gives an explicit prerequisite and routes the agent to the sibling aua_tap, and 'Never blindly retry uncertain input' tells the agent what not to do. It stops short of naming alternatives for the input case (e.g., when to prefer press_button or batch), so not a full when/when-not/alternatives statement.

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

aua_waitA
Read-onlyIdempotent

Wait at most 20 seconds for a selector to be visible or gone. condition_met reports the requested condition; found reports current visible matches.

NameRequiredDescriptionDefault
stateNovisible
selectorYes
timeout_secondsNo

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already cover read-only, idempotent, and open-world traits, and the description adds genuinely new context: the 20-second ceiling and the meaning of the two return fields condition_met and found. It does not say what happens when the timeout expires without the condition holding, which is the one behavior a waiting tool most needs to disclose.

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 compact sentences with the condition and time bound front-loaded and the return fields second. No filler 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?

With no output schema, the description usefully names condition_met and found, but it omits timeout failure behavior and any guidance on selector matching. For a three-parameter tool with a 0% described schema and a nested selector object, those omissions leave real 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 description coverage is 0%, so the description must carry the load. It explains the state enum values (visible or gone) and the timeout cap, but says nothing about the nested Selector's twelve matching fields, leaving the most complex parameter undocumented in both schema and description.

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 names a specific verb (wait) and resource (a selector reaching a visible/gone state) plus the hard time cap, which clearly separates it from aua_find or aua_locate. It stops short of naming any sibling explicitly, so the differentiation is implied rather than stated.

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 wait-on-a-condition framing implies the polling use case, but there is no statement of when to prefer this over aua_find, aua_scroll_until, or repeated aua_screen calls. An agent has to infer the alternative-selection rule.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 26 tool updatesv0.7.0
    • First observedaua_apps
    • First observedaua_batch
    • First observedaua_doctor
    • First observedaua_double_tap
    • First observedaua_drag
    • First observedaua_execute_goal
    • First observedaua_find
    • First observedaua_goal_decide
    • First observedaua_launch_app
    • First observedaua_locate
    • First observedaua_long_press
    • First observedaua_observe
    • First observedaua_pause
    • First observedaua_press_button
    • First observedaua_read_fields
    • First observedaua_ready
    • First observedaua_resume
    • First observedaua_screen
    • First observedaua_screen_action
    • First observedaua_screen_frame
    • First observedaua_scroll_until
    • First observedaua_setup
    • First observedaua_swipe
    • First observedaua_tap
    • First observedaua_type_text
    • First observedaua_wait

TDQS

B3.3/5.0

Scored across 26 tools

Disambiguation4/5

Most tools are cleanly separated by gesture or resource (tap vs long_press vs double_tap vs drag vs swipe), and the observe/find/wait trio has clear boundaries (read tree, locate selector, block for condition). The fuzziest pairs are aua_swipe vs aua_scroll_until (both motion-based, though one targets a selector) and aua_screen/aua_screen_frame/aua_screen_action, which require reading descriptions carefully. aua_execute_goal vs aua_goal_decide is well explained as an auto/host decider pair.

Naming Consistency4/5

All 26 tools share the aua_ snake_case prefix with mostly verb-based names (aua_tap, aua_launch_app, aua_read_fields, aua_execute_goal). A few outliers are nouns/adjectives rather than verbs (aua_screen, aua_apps, aua_doctor, aua_ready), a minor deviation. The convention remains predictable despite the large set.

Tool Count3/5

26 tools is at the heavy end — the rubric's 'borderline/heavy' band. Android UI automation is genuinely broad (gestures, observation, vision, goal-driving, setup, diagnostics), so most tools map to real capabilities, but a few niche ones (aua_screen_frame, aua_screen_action, aua_pause/aua_resume) inflate the surface and add selection cost.

Completeness4/5

Coverage is strong for device automation: gesture input, observation, find/wait, app launching, batching, setup/diagnostics, and a goal-driven loop. Gaps are smaller: no app install/uninstall or force-stop, no file/ADB shell passthrough, and key input limited to home/back/recent/enter/volume. These are workable around but leave a few dead ends.

Maintenance

ActivityMaintained
ResponsivenessNo recent community issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables controlling an Android device from an MCP client via ADB, including wireless debugging discovery, UI-tree inspection, and performing taps, swipes, typing, app actions, and shell commands without relying on screen coordinates.
    12 npm
    MIT
  • A
    license
    B
    quality
    B
    maintenance
    Enables coding agents to observe and control an authorized Android phone over ADB through MCP tools and a JSON CLI. It supports UI inspection, screenshots, taps, swipes, typing, key presses, app listing, and launching.
    13
    6
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables AI agents to control a physical Android device or Docker-hosted emulator over ADB by taking screenshots and performing taps, swipes, key presses, text input, shell commands, app launches, and device info queries. It runs as a local MCP stdio server alongside a web UI and REST API for remote access.
    1
    MIT
  • A
    license
    B
    quality
    C
    maintenance
    Enables any MCP assistant to see and operate an Android phone or emulator over plain adb, reading the accessibility tree to tap elements by name and also supporting screenshots, typing, swiping, app launching and installation, and logcat — with nothing installed on the device and no root required.
    13
    MIT