Skip to main content
Glama

adb-mcp

An MCP server that drives Android emulators and devices over adb

Website Release CI Go MCP


Boot an AVD, screenshot, read the UI hierarchy, tap/swipe/type, set a device lock, read logcat, run Gradle builds and tests. 79 tools, from Claude Code, Cursor, VS Code, or any MCP client over stdio.

It is the Android counterpart to XcodeBuildMCP, built on the official Go MCP SDK.

describe_uitap_on_textscreenshot, driven live against a real emulator (emulator-5556), showing the actual tool calls and their actual output.

Android is a trademark of Google LLC. adb-mcp is an independent, unofficial tool built for Android and is not affiliated with, sponsored, or endorsed by Google. The Android robot above is reproduced/modified from work created and shared by Google and used according to terms described in the Creative Commons 3.0 Attribution License.

Why

Driving Android by hand means a long runbook of raw adb commands, and it is easy to get wrong (stale tap coordinates, CRLF-corrupted screenshots, forgetting exec-out, guessing coordinates off a downscaled image). This server bakes that knowledge into its tools, so the agent doesn't have to relearn it:

  • Screenshots use exec-out screencap (no CRLF corruption) and are auto-downscaled so the image reader accepts them.

  • describe_ui returns each element's center in true device pixels (so taps land where you mean them to, no guessing off the image) and retries the transient "could not get idle state" failure on its own.

The workflow itself ships as readable resources the agent can pull up mid-task (the observe→act loop, native PIN/lock handling, crash triage, see below) instead of relearning them each session.

Related MCP server: Android Mobile MCP

Getting started

1. Prerequisites

  • Android SDK with platform-tools (adb) and emulator. The server finds it via $ANDROID_HOME / $ANDROID_SDK_ROOT, else the platform default (~/Library/Android/sdk on macOS). If your MCP client launches the server without those set, pass --sdk /path/to/sdk in the client config's args (the server then exports it, so Gradle finds the SDK too). doctor prints the location it resolved.

  • At least one AVD (create one in Android Studio's Device Manager).

Go is not required: releases ship prebuilt binaries, and it's only needed to build from source.

2. Install

On macOS/Linux:

curl -fsSL https://raw.githubusercontent.com/iksnerd/adb-mcp/main/install.sh | sh

The script (install.sh) picks the right archive for your OS/architecture, verifies its SHA-256 against the release's checksums.txt, and installs to ~/.local/bin (override with BIN_DIR=...; pin a version with VERSION=v0.17.0).

Prefer to grab the binary yourself? Every platform's archive (macOS, Linux, and Windows, amd64 and arm64) is on the Releases page, each with a checksum in checksums.txt. On Windows, download the windows_amd64 or windows_arm64 zip and put adb-mcp.exe somewhere on your PATH.

Once installed, stay current with the built-in updater. It fetches the latest release, verifies its checksum, and swaps the binary in place:

adb-mcp update

The registration below launches the server by the bare name adb-mcp, so it must be on your $PATH (which adb-mcp should resolve; the installer warns if ~/.local/bin isn't on it). Otherwise point the client at the absolute path to the binary instead.

3. Register with your MCP client

Claude Code:

claude mcp add adb -- adb-mcp

(When working inside this repo itself, the bundled .mcp.json is picked up automatically, no registration needed.)

Or install as a plugin, which registers the server and adds a skill per driving guide:

claude plugin marketplace add iksnerd/adb-mcp
claude plugin install adb-mcp@adb-mcp

For Codex, the same plugin ships in Codex's manifest shape:

codex plugin marketplace add iksnerd/adb-mcp
codex plugin add adb-mcp@adb-mcp-plugins

Either way adb-mcp still has to be on your PATH from step 2 - the plugin registers the server, it does not install the binary.

Cursor / VS Code: one-click install (assumes adb-mcp is on your PATH from step 2):

Any other client (Windsurf, Codex, …): run adb-mcp over stdio. The usual config shape:

{
  "mcpServers": {
    "adb": { "command": "adb-mcp" }
  }
}

To confirm it's wired up, ask your agent to "boot an emulator and take a screenshot".

From source (Go 1.26+)

make install                 # builds ./bin/adb-mcp and copies it to ~/.local/bin
# or:
go build -o bin/adb-mcp ./cmd/adb-mcp
# or straight from the module (note the /cmd/adb-mcp suffix):
go install github.com/iksnerd/adb-mcp/cmd/adb-mcp@latest

Tools

79 tools across ten areas. Every device-facing tool takes an optional serial (adb -s). Omit it with one device attached, or pass one from list_devices with several. Full reference: docs/TOOLS.md.

  • Emulator / device: boot, list, wait-for-boot, shut down, connect over Wi-Fi, adb_reverse port forwarding (Metro!)

  • Observe: screenshot to see (works on multi-display foldables, pick a panel with display), describe_ui for true-pixel element centers, with the focused top window (spot a biometric prompt, or the wrong app entirely, occluding your target via optional package), filter/query/compact modes, and a hidden-node count so absence is trustworthy

  • Interact: tap, tap_on_text/tap_element (id-addressed), swipe, drag, long-press, type, key combos, PIN pads, wait, run_sequence (batch steps + guards in one call, which keeps native-timer flows from being perturbed by per-step round-trips); opt-in verify_change tells you whether a tap/key actually changed the UI; opt-in via_accessibility on tap_on_text/tap_element (EXPERIMENTAL) dispatches a real accessibility click for native views a coordinate tap can't reach, see bridge/README.md

  • Lock / Keystore / Biometrics: set/clear a secure lock screen, check lock state, has_biometric_enrolled + fingerprint_touch/finger_remove to satisfy a BiometricPrompt on the emulator

  • Extended Controls (emulator): send_sms (OTP/2FA), phone_call, set_battery (also works on real devices via dumpsys), cellular (roaming/weak-signal/throttled), set_sensor (accelerometer/light/…), rotate_screen, avd_snapshot, driving the emulator's console-only panel that describe_ui can't see

  • App lifecycle: install/uninstall, launch/stop, app_state (running pid(s) + Metro-vs-embedded bundle), launch_dev_client (Expo dev build → Metro, skipping the Dev Launcher), reload_app/open_dev_menu, clear data, permissions, deep links, push/pull files, last_crash

  • Logs & capture: one-shot or streaming logcat (substring/priority/tag filters, since time window, opt-in redact to mask tokens/passwords/API keys before output), clear_logcat, last_crash, screen recording

  • Environment & diagnostics: dark mode, mock location, clean status bar, stay_awake (stop a doze-happy screen blanking your screenshots), doctor

  • Gradle build & test: assembleDebug, unit tests, instrumented tests, JVM unit-test coverage via JaCoCo (get_coverage_report/get_file_coverage), task + variant + module discovery (list_gradle_variants/list_gradle_projects), one-shot build_and_run

  • Session defaults: pin project_dir/serial once (session_set_defaults) so a multi-module/multi-flavor project or multi-device session doesn't need them repeated on every call

The driving know-how itself ships as six MCP resources (android://guide/*) the client can list and read. See docs/TOOLS.md for the URIs, or jump straight to android://guide/driving for the core loop below.

The core loop

observe → locate → act → re-observe. screenshot to see, describe_ui to get true-pixel centers, tap/tap_on_text/swipe/input_text to act, then screenshot again to confirm. Read android://guide/driving for the full loop and the gotchas that waste turns.

Development

make check     # go vet + go test (unit tests need no emulator)
make run       # run over stdio for manual JSON-RPC poking

Layout:

cmd/adb-mcp/main.go        entry: subcommands (update/version) or serve MCP over stdio
internal/tools/            thin MCP tool bindings
internal/adb/              the device layer: an adb.Client whose methods are the commands
internal/gradle/           host-side Gradle: build, find APKs, parse test reports
internal/uiauto/           pure uiautomator-hierarchy model + parsing (unit-tested)
internal/sdk/              resolves the Android SDK (adb/emulator paths, PATH env)
internal/concurrent/       RunAll/RunIndexed: fan out independent I/O calls, join, done
internal/guides/           the skill guides, embedded and served as MCP resources
internal/selfupdate/       the `adb-mcp update` release fetch/verify/swap
internal/bridgeupdate/     the `adb-mcp bridge install` release fetch/verify/install

Dependencies point inward only (tools → adb, gradle, uiauto → sdk), and each internal/tools/<domain>.go adapter mirrors an execution file of the same name (device commands are adb.Client methods). Full map, the package graph, and the rules for adding a tool: ARCHITECTURE.md.

Documentation

Contributing

See CONTRIBUTING.md for setup and conventions. Found a security issue? See SECURITY.md instead of opening a public issue. Licensed under MIT.

Available Tools

79 tools
adb_reverseA

Forward a DEVICE TCP port to a HOST port (adb reverse) so the emulator/device can reach a server on this machine — the canonical use is tcp:8081 for Metro. CRITICAL for RN/Expo dev clients: if the app can't reach its dev server it may SILENTLY fall back to the embedded bundle and ignore every code edit you make — set this up before a dev-client session, and suspect it whenever edits seem to have no effect (app_state confirms whether the running process is on Metro or the embedded bundle). remove=true undoes the forward.

ParametersJSON Schema
NameRequiredDescriptionDefault
removeNoRemove the forward for device_port instead of creating it.
serialNoTarget device serial (adb -s). Optional when exactly one device is attached.
host_portNoTCP port on the HOST to forward to. Defaults to device_port.
device_portYesTCP port on the DEVICE to forward, e.g. 8081 for Metro.

TDQS

A3.9/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It explains the core behavior (forwarding a port) and warns about silent fallback in React Native development. However, it does not disclose what happens if the forward already exists, error handling, or required permissions. This is adequate but not complete.

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

Conciseness4/5

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

The description is two sentences plus a final clause, all contributing useful information. It is slightly verbose but not overly long. The key points are front-loaded (purpose, canonical use) and then warning and parameter note follow.

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

Completeness4/5

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

Given no output schema and no annotations, the description is fairly complete. It covers the purpose, usage context, key parameter (remove), and even references a related tool (app_state). It does not describe return values, but that is acceptable without an output schema.

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

Parameters3/5

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

Schema coverage is 100%, so the baseline is 3. The description adds context: 'canonical use is tcp:8081 for Metro' for device_port and mentions remove=true behavior. However, it does not add significant meaning beyond the schema descriptions, which already cover all parameters.

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

Purpose5/5

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

The description clearly states the tool forwards a DEVICE TCP port to a HOST port (adb reverse). It specifies the canonical use case (tcp:8081 for Metro), distinguishing it from other adb tools like list_devices or logcat. The verb 'forward' and resource 'TCP port' are explicit.

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

Usage Guidelines4/5

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

The description explicitly says this is 'CRITICAL for RN/Expo dev clients' and explains when to use it (before a dev-client session) and what to suspect if edits have no effect. It also mentions the remove parameter to undo the forward. It does not explicitly state when not to use it, but the context is clear.

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

app_stateA

Report an app's RUNTIME state: installed?, running?, foreground?, top activity, pid(s), main-process uptime, install/update times, and — for React Native/Expo — whether it is serving a live METRO bundle or its baked-in EMBEDDED one. When it is on Metro it also identifies WHICH dev server: port, pid, and the project root that server is running in. That matters because "metro" does not mean the RIGHT metro — a dev server left running from another checkout still holds port 8081, so the app connects happily and runs that branch's code while this call looks healthy. Pass source_path to get an explicit stale_verdict (stale | current | undetermined) with its reason, never silence. Run this FIRST when JS edits seem to have no effect.

ParametersJSON Schema
NameRequiredDescriptionDefault
serialNoTarget device serial (adb -s). Optional when exactly one device is attached.
packageYesApplication package name.
source_pathNoOptional host file or directory containing the app's source. When supplied, app_state ALWAYS returns a stale_verdict (stale | current | undetermined) with the reason — it compares the newest source mtime against the latest Metro/HMR marker, and checks that the dev server the app is connected to is rooted in this same checkout.

TDQS

A4.6/5.0
Behavior5/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It thoroughly explains what is reported, what happens with Metro vs embedded bundles, the concrete pitfall of a wrong dev server on port 8081, and the guarantee that source_path always yields a stale_verdict with a reason and 'never silence.'

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

Conciseness4/5

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

The description is longer than average, but every section earns its place: the report contents, the Metro/embedded distinction, the stale-server failure mode, the source_path contract, and the recommended first-use scenario. It is slightly dense and stylistically emphatic, which prevents a 5, but it remains front-loaded with the core purpose.

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?

There is no output schema, so the description must explain return value semantics itself. It does so in detail: runtime states, process details, Metro server identification, and the exact stale_verdict enum with its guarantee of a reason. Given the tool's complexity and lack of annotations, this is a complete and self-sufficient definition.

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 100%, so the baseline is 3. The description adds meaningful semantics for source_path by explaining the mtime comparison and Metro-root check, and clarifies the stale_verdict values. It does not add much beyond the schema for serial and package, but those are already adequately documented and simple.

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

Purpose5/5

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

The description names a specific verb and resource: 'Report an app's RUNTIME state' and then enumerates exactly what that includes (installed, running, foreground, pid, Metro vs embedded, etc.). This clearly separates it from sibling tools like get_app_details or launch_app by focusing on runtime diagnostics rather than metadata or actions.

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

Usage Guidelines4/5

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

The description gives explicit actionable guidance: 'Run this FIRST when JS edits seem to have no effect' and tells the caller to pass source_path to obtain a stale_verdict. It does not name specific sibling tools or state when not to use it, but the use case is clearly scoped.

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

avd_snapshotA

Manage emulator AVD snapshots (adb emu avd snapshot): action=save|load|delete a named snapshot, or list them. Save a known-good state, then load it to reset the device deterministically between runs — faster than a wipe_data cold boot. Emulator-only.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoSnapshot name. Required for save/load/delete; ignored for list.
actionYesOne of: "save", "load", "delete", or "list".
serialNoTarget device serial (adb -s). Optional when exactly one device is attached.

TDQS

A4.5/5.0
Behavior4/5

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

No annotations are provided, so the description carries the full burden. It reveals that operations are run via 'adb emu avd snapshot', which implies device-specific behavior. It explains the purpose of snapshots ('deterministically reset the device') and notes the emulator-only constraint. A minor gap: it doesn't mention potential side effects (e.g., data loss on delete) or permission requirements.

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

Conciseness5/5

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

The description is extremely concise: two sentences with zero waste. The first sentence defines the tool and its actions, the second provides usage guidance. Every word earns its place.

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

Completeness4/5

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

Given the tool's moderate complexity (3 params, 4 actions), the description is nearly complete. It covers purpose, usage scenarios, and device constraints. Lacking: mention of return values (e.g., list returns a list of snapshots) or error cases (e.g., what happens if name doesn't exist on load). The absence of an output schema makes this a small gap.

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

Parameters5/5

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

Schema description coverage is 100%, meaning the schema already documents all parameters. However, the description adds substantial value by clarifying the action list, explaining that 'name is required for save/load/delete; ignored for list', and noting the serial is optional when only one device is attached. This enhances understanding beyond the raw schema.

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

Purpose5/5

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

The description clearly states the verb 'Manage' and the resource 'emulator AVD snapshots', and specifies the exact actions (save, load, delete, list) with concrete examples like saving a known-good state and resetting the device. It distinguishes itself from siblings like boot_emulator and shutdown_emulator by focusing on snapshot operations rather than device lifecycle.

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

Usage Guidelines4/5

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

The description provides clear usage context: 'Save a known-good state, then load it to reset the device deterministically between runs' and highlights when this is better than alternatives ('faster than a wipe_data cold boot'). It also notes 'Emulator-only', implying it's not for physical devices. However, it does not explicitly state when not to use it or name alternative tools for related tasks.

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

boot_emulatorA

Boot an AVD by name and return its device serial (e.g. emulator-5554). Launches the emulator detached so it outlives this call, and waits for full boot (sys.boot_completed) by default. Use the returned serial for later tools if you boot more than one device. Booting can take 30-120s on a cold start.

ParametersJSON Schema
NameRequiredDescriptionDefault
avdYesAVD name to boot (see list_avds).
timeout_sNoBoot timeout in seconds. Default 180.
wipe_dataNoFactory-reset the AVD on this boot (-wipe-data). Default false. Use to start from a pristine device.
no_snapshotNoCold boot without loading a saved snapshot. Default true.
wait_for_bootNoWait until fully booted before returning. Default true.

TDQS

A4/5.0
Behavior3/5

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

With no annotations provided, the description must disclose behavioral traits. It does well by noting that the emulator launches detached and waits for full boot by default. However, it omits details about error handling, what happens if the AVD does not exist, or the potential destructiveness of the 'wipe_data' parameter (though that is in the schema).

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 three sentences, front-loaded with the core purpose, followed by behavioral details and a usage hint. Every sentence adds value and there is no redundancy.

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

Completeness4/5

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

Given the tool has 5 parameters and no output schema, the description covers the main aspects: what it does, what it returns, how it behaves (detached, waits), and a usage hint. It does not cover edge cases like multiple boots or error states, but it is sufficient for typical use.

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

Parameters3/5

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

Schema coverage is 100%, so the base score is 3. The description does not add significant new information about parameters beyond what the schema already provides. It mentions the return value (serial) but that is not a parameter detail.

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

Purpose5/5

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

The description clearly states the action ('Boot an AVD by name'), the resource ('AVD'), and the output ('return its device serial'). It distinguishes from siblings like 'list_avds' (which lists but does not boot) and 'shutdown_emulator' by specifying the boot and launch behavior.

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

Usage Guidelines4/5

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

The description provides context on when to use the tool (e.g., 'Use the returned serial for later tools if you boot more than one device') and sets expectations about boot duration. However, it does not explicitly state when not to use it or mention alternatives like 'list_avds' to check existing devices.

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

build_and_runA

One-shot build → install → launch: runs Gradle (default task assembleDebug) in project_dir, installs the resulting APK on the device, and launches package. Equivalent to gradle_build + install_app + launch_app but in a single call. If several APKs exist under build/outputs (multi-flavor projects, leftover androidTest APKs), the newest non-test one is installed — the artifact the build just produced.

ParametersJSON Schema
NameRequiredDescriptionDefault
argsNoExtra arguments passed to Gradle (e.g. --stacktrace, -Pflavor=free).
taskNoGradle task to run. Defaults to assembleDebug.
serialNoTarget device serial (adb -s). Optional when exactly one device is attached.
packageYesApplication package name to install and launch, e.g. com.example.app.
project_dirNoPath to the Android project root containing the Gradle wrapper (gradlew). Optional if session_set_defaults has pinned a project_dir for this session.

TDQS

A3.9/5.0
Behavior3/5

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

No annotations are provided, so the description carries full burden. It discloses the default Gradle task (assembleDebug), the APK selection heuristic (newest non-test APK), and the overall pipeline. However, it omits details like error handling, blocking behavior, or prerequisite checks, which are important for a composite tool.

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

Conciseness5/5

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

Three sentences: first states the core action, second provides sibling equivalence, third adds a critical nuance about multi-APK handling. Every sentence adds value; no wordiness 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?

Given the tool's complexity (three-step process) and absence of an output schema, the description covers the main flow but lacks information on return values, success/failure indicators, or error behavior. More detail on what the agent can expect after execution would improve completeness.

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

Parameters3/5

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

Schema description coverage is 100%, so baseline is 3. The description does not add meaningful new semantics beyond what the schema already provides (e.g., default task, optional project_dir). It mentions the default task again but no extra depth or context for parameter usage.

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

Purpose5/5

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

The description clearly states the tool does a one-shot build, install, and launch sequence. It uses specific verbs and resources ('runs Gradle', 'installs resulting APK', 'launches package') and explicitly distinguishes itself from sibling tools gradle_build, install_app, and launch_app by noting equivalence but single-call convenience.

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

Usage Guidelines4/5

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

The description explains that the tool is equivalent to three separate steps performed together, which implicitly guides agents to use it when a combined operation is desired. However, it does not explicitly state when not to use it (e.g., needing custom build flags or selective steps), leaving some ambiguity.

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

cellularA

Shape the emulated cellular radio (adb emu gsm / network): data and voice registration state (unregistered/home/roaming/searching/denied/off/on), signal strength (0-4), and mobile-data throughput/latency (network_speed like "lte"/"edge" or ":" kbps; network_delay like "umts" or ":" ms). Test offline/roaming/weak-signal and slow-network behaviour deterministically. Every field optional; set at least one. Emulator-only.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataNoMobile-data registration state: one of unregistered, home, roaming, searching, denied, off, on. Omit to leave unchanged.
voiceNoVoice registration state: one of unregistered, home, roaming, searching, denied, off, on. Omit to leave unchanged.
serialNoTarget device serial (adb -s). Optional when exactly one device is attached.
signalNoSignal strength 0-4 (0 = no bars, 4 = full). Omit to leave unchanged.
network_delayNoLatency: a named profile (none, gprs, edge, umts) or raw "<min>:<max>" in ms. Omit to leave unchanged.
network_speedNoData throughput: a named profile (gsm, gprs, edge, umts, hsdpa, lte, evdo, full) or raw "<up>:<down>" in kbps. Omit to leave unchanged.

TDQS

A3.9/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It clearly indicates this is an emulation-only tool that affects radio state (which can disrupt connectivity), and that every field is optional. It does not disclose whether changes are reversible, what happens if two serials are attached, or if there are side effects like dropping ongoing calls. While reasonably transparent, there is room for more detail.

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

Conciseness4/5

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

The description is a single paragraph of about 60 words, front-loading the core action first. Every sentence adds information: purpose, parameters, use cases, constraints. It avoids redundancy but could be slightly more structured (e.g., separate sentences for each aspect) without adding length.

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

Completeness4/5

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

Given there is no output schema and no annotations, the description covers the essential purpose, parameters, use cases, and constraints (emulator-only) adequately for a tool with 6 optional parameters. It explains how to specify throughput and latency both as named profiles and raw values. It could be more complete by mentioning that changes may affect other running apps or that serial is required when multiple devices are attached.

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

Parameters3/5

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

The input schema already provides full (100%) coverage with descriptions for each parameter, so the baseline is 3. The description adds value by explaining the meaning of signal strength values and giving examples for network_delay and network_speed (e.g., 'lte', '<up>:<down> kbps'), which enriches understanding beyond the schema. However, it does not explain the enum values for data/voice or the effect of profiles like 'full'.

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

Purpose5/5

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

The description uses specific verbs ('Shape the emulated cellular radio') and clearly identifies the resource (cellular radio on an emulator). It enumerates the three controllable aspects (registration state, signal strength, throughput/latency) and distinguishes it from sibling tools like phone_call or send_sms which are also telecom-related but perform different actions.

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

Usage Guidelines4/5

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

The description explicitly states the tool is 'Emulator-only', which is crucial for knowing when not to use it (e.g., on physical devices). It also provides example use cases ('Test offline/roaming/weak-signal and slow-network behaviour deterministically'), giving clear context. However, it does not mention alternatives or explicitly say when to avoid this tool in favour of others.

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

clear_app_dataA

Wipe an app's data and cache (pm clear) to reset it to a first-launch state — the fastest way to reproduce onboarding/permission flows from scratch.

ParametersJSON Schema
NameRequiredDescriptionDefault
serialNoTarget device serial (adb -s). Optional when exactly one device is attached.
packageYesApplication package name (e.g. com.example.app).

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of disclosure. It clearly states the tool is destructive ('Wipe an app's data and cache'), implies no rollback, and uses the phrase 'from scratch' to convey irreversibility. A 4 is appropriate because it effectively communicates the mutation behavior, though it could mention potential side effects (e.g., login tokens lost).

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, tight sentence that conveys purpose, mechanism, effect, and use case without any wasted words. It is front-loaded with the key action and parenthetical command, making it immediately scannable.

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

Completeness4/5

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

Given no output schema, the description could mention what the tool returns (e.g., success/failure message), but for a destructive command like 'pm clear', the effect is the primary concern. The description completely covers intent and behavior for an agent, earning a 4 for being nearly complete in context.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3. The description adds value by explaining the purpose ('reset to first-launch state') and the underlying command ('pm clear'), but it does not elaborate on parameter details beyond what the schema provides, such as the optional nature of 'serial' or format of 'package'.

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

Purpose5/5

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

The description uses a specific verb-resource pair ('Wipe an app's data and cache') and clearly identifies the tool as a 'pm clear' equivalent. It explains the effect ('reset to a first-launch state') and the use case ('reproduce onboarding/permission flows'). This distinguishes it from siblings like 'uninstall_app', 'stop_app', 'clear_logcat', and 'clear_device_lock'.

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

Usage Guidelines4/5

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

The description explicitly states the use case ('fastest way to reproduce onboarding/permission flows'), providing clear context for when to use this tool. However, it does not mention when not to use it or explicitly name alternatives among the siblings, such as 'uninstall_app' or 'stop_app' for less destructive resets.

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

clear_device_lockA

Remove the secure lock screen, supplying the current credential as old_value. Use to restore a clean state after testing a Keystore flow.

ParametersJSON Schema
NameRequiredDescriptionDefault
serialNoTarget device serial (adb -s). Optional when exactly one device is attached.
old_valueYesThe current credential, needed to clear the lock.

TDQS

A4.2/5.0
Behavior4/5

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

Since no annotations are provided, the description carries full burden for behavioral disclosure. It clearly states this is a destructive action ('Remove the secure lock screen') and explains the dependency on providing the current credential. It also specifies the post-condition ('restore a clean state'), which adds useful behavioral context beyond just naming the operation.

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

Conciseness5/5

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

The description is two sentences with zero wasted words. First sentence front-loads the core action and required input. Second sentence provides usage context. Every sentence earns its place. No extraneous 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 a tool with only 2 parameters (both well-documented in schema), no output schema, and no annotations, the description adequately covers what the tool does, what input is required, and the typical usage scenario. It could mention what happens if the credential is wrong (error behavior) to be fully complete, but the existing information is sufficient for correct selection and invocation in most cases.

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 100%, so baseline is 3. The description adds value by explaining the semantics of 'old_value' as 'the current credential, needed to clear the lock', which reinforces the schema description. For 'serial' it does not add new details, but the schema already adequately defines its optionality and purpose, so the overall contribution lifts the score slightly.

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

Purpose5/5

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

The description uses a specific verb ('Remove') and resource ('secure lock screen'), clearly linking to credential parameter 'old_value'. It also distinguishes from its sibling 'set_device_lock' by indicating this is the reverse operation, and frames the purpose within a testing context.

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

Usage Guidelines3/5

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

The description implies usage context ('after testing a Keystore flow') but does not provide explicit when-not-to-use guidance or contrast with other lock-related tools like 'set_device_lock', 'prefer_pin', or 'enter_pin'. Without sibling differentiation or alternative recommendations, usage guidance is adequate but incomplete.

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

clear_logcatA

Empty the device's logcat ring buffer (adb logcat -c). The sharpest isolation primitive for a press→observe loop: clear, perform ONE action, then logcat — every line you read was caused by that action. Without it, a filter hit may be minutes old and an empty result may just mean the buffer rotated. (For reaching BACK in time instead, use logcat's since param.)

ParametersJSON Schema
NameRequiredDescriptionDefault
serialNoTarget device serial (adb -s). Optional when exactly one device is attached.

TDQS

A4.5/5.0
Behavior4/5

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

No annotations exist, so description carries full burden. It honestly describes the destructive effect (empties buffer) and the impact on subsequent logcat reads (every line read is caused by the action). Does not mention prerequisites (adb connection) but is otherwise transparent for this simple mutation.

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

Conciseness5/5

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

Two concise sentences plus a parenthetical alternative. Front-loaded with action, no filler words. Every sentence earns its place.

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

Completeness5/5

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

Given the simple tool (1 optional param, no output schema), the description covers purpose, usage, effect, and alternative. No gaps. The isolation primitive analogy provides rich context.

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

Parameters3/5

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

Schema description coverage is 100% for the single 'serial' parameter, with adequate explanation in schema. Description does not add parameter-specific semantics beyond the schema, so baseline 3 is appropriate.

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

Purpose5/5

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

Description uses specific verb 'Empty' and resource 'logcat ring buffer', clearly stating the action. It distinguishes from sibling tools like logcat (read) and start_logcat_capture (capture to file) by focusing on clearing the buffer as an isolation primitive.

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 explains when to use: as the sharpest isolation primitive for a press→observe loop. Provides when-not-to-use context (filter hits may be seconds old, empty result may mean buffer rotated). Names an alternative: 'use logcat's since param' for reaching back in time.

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

connect_wirelessA

Connect to a device over Wi-Fi/TCP (adb connect), optionally pairing first (adb pair) with the 6-digit code from Android 11+ Wireless debugging. Pass host:port; for pairing also pass the pairing address + code shown on the device.

ParametersJSON Schema
NameRequiredDescriptionDefault
host_portYesDevice address to connect to, host:port (e.g. 192.168.1.42:5555).
pair_addressNoPairing address host:port (Android 11+ Wireless debugging), if different from host_port. Only needed when pairing.
pairing_codeNo6-digit pairing code shown on the device. Provide to pair before connecting.

TDQS

A3.9/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It discloses the two-step process (pair then connect) and the roles of host:port, pair_address, and pairing_code. However, it does not mention what happens on failure, network prerequisites, or the state of previous connections, which would be helpful.

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 concise at two sentences with no filler. It front-loads the core action and covers the key parameters efficiently. Every sentence adds value.

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

Completeness3/5

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

Given the moderate complexity (3 parameters, no output schema, no annotations), the description adequately explains the tool's purpose and workflow but does not specify return values or error handling. It is sufficient for a basic connection tool but could be improved.

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

Parameters3/5

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

The schema already provides 100% coverage with clear descriptions for host_port, pair_address, and pairing_code. The description adds minimal extra meaning beyond the schema, primarily clarifying the workflow (pairing code from Android 11+). Baseline 3 is appropriate.

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

Purpose5/5

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

The description uses the specific verb 'connect' and resource 'device over Wi-Fi/TCP', and distinguishes the tool from sibling tools by mentioning ADB operations. It contrasts with siblings that are unrelated to wireless connectivity.

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

Usage Guidelines4/5

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

The description explains when to use the tool (for Wi-Fi/TCP connections) and provides explicit instructions for pairing with the 6-digit code from Android 11+ Wireless debugging. It does not directly name alternative tools for other connection methods, but the context is clear enough.

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

describe_uiA

Read the on-screen UI hierarchy as a list of elements, each with its text, content_desc, resource_id, class, clickable flag, pixel bounds, and a precomputed center in TRUE DEVICE PIXELS. This is your source of truth for AIMING: pass an element's center straight to tap. Never guess coordinates from the screenshot (it is downscaled and you will miss). The response header states the FOCUSED WINDOW (if it's a system overlay — biometric prompt, permission dialog — the elements belong to that overlay, not your app) and how many nodes the filter hid. Default filter keeps labelled/clickable/id-carrying elements minus redundant wrappers; filter="clickable" returns only tap targets (much smaller); filter="all" returns every bounded node — the only mode where absence proves an element isn't in the CURRENT VIEWPORT's hierarchy. Every mode is viewport-scoped: Android omits a ScrollView's off-screen children from the accessibility tree entirely, so scroll before concluding an element does not exist, and never use this to COUNT a long list (it will undercount) — render_stats reports the whole view tree. Canvas-drawn (RN/Flutter/Skia) content appears in NO mode.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryNoCase-insensitive substring to match against text, content_desc, and resource_id — return only matching elements. The cheap way to ask 'is X on this screen?'. Combine with filter='all' to prove absence definitively.
filterNoWhat to include: 'auto' (default — elements with text, content_desc, resource_id, or clickable; identical-bounds label-less wrappers dropped), 'clickable' (tap targets only, the smallest view), or 'all' (every bounded node, unfiltered — use to PROVE an element is absent from the CURRENT VIEWPORT). 'all' is still viewport-scoped: Android omits off-screen ScrollView children from the accessibility tree, so scroll before concluding absence, and use render_stats (not this) to count a long list.
serialNoTarget device serial (adb -s). Optional when exactly one device is attached.
compactNoReturn one line per element (center, bounds, flags, labels) instead of JSON — ~10x fewer tokens, same aiming information. Use for repeated look-drive loops and geometry work.
packageNoOptional package expected to own the focused window. If another app or SystemUI owns focus, the response calls that out explicitly.

TDQS

A4.7/5.0
Behavior5/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It reveals critical behaviors: focused-window detection including system overlays, hidden-node count in the response header, viewport scoping for all modes, Android's omission of off-screen ScrollView children, and complete invisibility of canvas-drawn content. This is rich, non-obvious behavioral context.

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 dense but every sentence carries distinct operational value: output contents, aiming rule, screenshot warning, response header, filter modes, viewport limitation, and canvas limitation. The structure front-loads the core purpose and progressively adds edge-case warnings without filler.

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?

Since there is no output schema, the description must explain what the tool returns, and it does: per-element fields, header contents, compact format, and all critical limitations. It also tells the agent how to interpret absence and when to delegate counting to render_stats. Nothing needed for correct invocation and interpretation is missing.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3. The description reinforces filter semantics and the viewport caveat, but the schema already explains query, filter, serial, compact, and package in comparable detail. The description adds no substantial parameter-level meaning beyond the schema.

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

Purpose5/5

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

The description opens with a specific verb and resource: 'Read the on-screen UI hierarchy as a list of elements' followed by the exact fields returned. It explicitly differentiates from screenshots by calling itself the 'source of truth for AIMING' and warns against guessing coordinates from the downscaled screenshot, clearly separating it from sibling tools like screenshot and render_stats.

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?

The description gives explicit when-to-use and when-not-to-use guidance: use render_stats instead for counting long lists, scroll before concluding absence, filter='all' to prove absence in the current viewport, and compact mode for repeated look-drive loops. It also names the screenshot alternative to avoid. This is far beyond implied usage.

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

doctorA

Diagnose the local toolchain, and the first call of any session that isn't going well: Android SDK path (and whether it really is an SDK), adb/emulator availability, known AVDs, attached devices, per-device accessibility bridge status, plus the host build tools — a JDK (Gradle needs one) and a system gradle (needed only so scaffold_android_project can generate a wrapper). Run this first when something isn't working, especially a Gradle tool failing with "SDK location not found".

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description carries the full behavioral burden. It conveys a read-only diagnostic intent ('Diagnose') and details what is inspected: SDK path, tools, AVDs, devices, accessibility bridge status, and build tools. It does not explicitly promise zero side effects, but 'diagnose' and the absence of any fix/update language strongly imply it is a non-mutating inspection.

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

Conciseness4/5

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

The description is dense but well-organized: it front-loads the purpose, uses a colon to launch the checklist, and adds an em-dash rationale for the gradle requirement. There is minor repetition between 'first call of any session that isn't going well' and 'Run this first when something isn't working', so it is not maximally tight.

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 zero-parameter diagnostic tool, the description is complete: it tells the agent when to run it, what subsystems it inspects, and even explains why a system gradle matters. No output schema exists, but the enumerated diagnostic areas give sufficient context for what kind of results to expect.

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 and an empty schema, so there is nothing for the description to explain. The description correctly does not invent parameters, and the 0-parameter baseline of 4 applies because no semantic gap exists.

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

Purpose5/5

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

The description opens with a specific verb and resource: 'Diagnose the local toolchain' and then enumerates exactly what is checked — SDK path validity, adb/emulator availability, AVDs, devices, accessibility bridge, JDK, and system gradle. This clearly distinguishes it from sibling tools like list_devices or list_avds because it is an aggregated diagnostic rather than a single-feature listing.

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

Usage Guidelines4/5

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

The description explicitly says to run this tool first when something isn't working, and gives a concrete trigger: a Gradle tool failing with 'SDK location not found'. It does not name alternatives or exclusion cases, but for a diagnostic first-stop tool this context is clear enough.

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

dragA

Press-hold-move-release drag from (x1,y1) to (x2,y2) in true device pixels (input draganddrop, Android 11+). Unlike swipe (which flings), this holds at the start first — use it for drag handles, long-press-to-reorder lists, and drag-and-drop targets a quick swipe skips.

ParametersJSON Schema
NameRequiredDescriptionDefault
x1YesStart X in true device pixels.
x2YesEnd X in true device pixels.
y1YesStart Y in true device pixels.
y2YesEnd Y in true device pixels.
serialNoTarget device serial (adb -s). Optional when exactly one device is attached.
duration_msNoDrag duration in ms. Default 400.

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden. It explains the gesture sequence (press-hold-move-release), the hold-at-start distinction, and the underlying Android API. However, it does not disclose whether the operation is blocking, what happens on invalid coordinates, or any side effects. The given detail is good but not exhaustive.

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

Conciseness5/5

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

The description is two sentences, front-loaded with the action and then the usage context. Every sentence is informative with no fluff. It is well-structured and easy to parse.

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

Completeness4/5

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

Given the tool's complexity (6 parameters, no output schema, no annotations), the description is reasonably complete. It covers the gesture mechanics, use cases, and sibling differentiation. It lacks details on error handling, device state prerequisites, or return behavior, but for a drag gesture these are not critical omissions.

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

Parameters3/5

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

Schema coverage is 100% with all 6 parameters documented in the input schema. The description adds minimal value beyond the schema: it mentions 'true device pixels' (already in schema) and the default duration (already in schema). Baseline 3 is appropriate as the description does not introduce new semantic information.

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

Purpose5/5

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

The description clearly states the action ('Press-hold-move-release drag'), the resource (coordinates in true device pixels), and the specific Android input method ('input draganddrop, Android 11+'). It explicitly distinguishes from the sibling tool 'swipe' by noting the hold-at-start behavior, making the purpose unambiguous.

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?

The description provides explicit guidance on when to use this tool: 'use it for drag handles, long-press-to-reorder lists, and drag-and-drop targets a quick swipe skips.' It directly contrasts with 'swipe' (which flings) and gives concrete use cases, though it does not mention alternatives like 'long_press' or 'tap'.

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

enter_pinA

Enter digits on a numeric PIN pad by tapping each key with a settle delay. Use when input_text does nothing because the pad renders its own key views. Visibility is PAD-SPECIFIC — run describe_ui on the pad screen first: a native-view pad (digits listed as Buttons with text) works with the default hierarchy lookup, no extra args. Only CANVAS-DRAWN pads (React Native / Skia SDK pads, whose keys are invisible to describe_ui) need 'grid' (the pad's bounding box; digits placed on a standard 3x4 dialpad) or 'coords' (explicit per-digit x,y) — read those bounds off a screenshot.

ParametersJSON Schema
NameRequiredDescriptionDefault
gridNoOptional bounding box {x1,y1,x2,y2} of the PIN pad. Provide this for custom-drawn (React Native / Skia) pads whose keys are invisible to describe_ui: digits are placed on a standard 3x4 dialpad grid (1-2-3 / 4-5-6 / 7-8-9 / _-0-_) inside the box.
coordsNoOptional explicit per-digit tap points as 'digit:x,y' pairs separated by ';', e.g. '1:540,1600;2:640,1600'. Overrides grid and hierarchy for the digits given. Use when the pad is not a regular grid.
digitsYesThe digits to enter, e.g. "1234".
serialNoTarget device serial (adb -s). Optional when exactly one device is attached.

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden. It discloses the key behavioral trait: 'with a settle delay' between taps. It explains the internal logic for detecting native vs. canvas-drawn pads and the corresponding parameter strategies. While it does not specify return values or error conditions, the behavioral description is thorough for a tap-input tool.

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

Conciseness4/5

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

The description is moderately lengthy but every sentence contributes necessary information. It is well-structured: opening with the core purpose and usage trigger, then progressively detailing the pad-type logic and parameter modes. While not ultra-condense, the length is justified by the complexity of the two-path behavior.

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

Completeness4/5

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

Given the tool's moderate complexity (4 parameters, two modes, no output schema), the description provides a complete workflow: identify pad type via describe_ui, determine parameter requirements, read bounds from screenshot if needed. It does not mention return values or failure modes, but covers the essential user/agent actions for correct invocation.

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 100% with well-documented parameters. The description adds significant value beyond the schema by explaining the conditional logic: when to use 'grid' vs 'coords' vs default, and how to obtain the bounding box or coordinates (e.g., 'read those bounds off a screenshot'). This contextual guidance helps the agent decide parameter values.

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

Purpose5/5

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

The description clearly states the tool enters digits on a numeric PIN pad by tapping each key with a settle delay. It explicitly distinguishes from sibling 'input_text' by specifying when to use this tool ('Use when input_text does nothing because the pad renders its own key views'). The verb 'enter', resource 'digits on a numeric PIN pad', and method 'tapping each key' combine for a specific, actionable purpose.

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?

The description provides explicit when-to-use guidance: 'Use when input_text does nothing'. It also details how to choose between default, 'grid', and 'coords' parameter modes based on the pad type (native vs. canvas-drawn), instructing the agent to first run 'describe_ui' and potentially read bounds off a screenshot. This offers clear decision criteria and alternatives.

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

fingerprint_touchA

Simulate a fingerprint-sensor touch on an EMULATOR (adb emu finger touch). With a fingerprint enrolled, this satisfies a BiometricPrompt — drive the app's REAL biometric unlock path instead of cancelling into the PIN fallback every run. finger_id must match an enrolled finger (default 1). Check has_biometric_enrolled FIRST: with nothing enrolled this just sits on "Touch the sensor" forever. GOTCHA: the command reports OK even when the id matches nothing — if the prompt doesn't resolve, the enrolled id differs (re-enrollments increment it): try finger_id 2..5, send a second touch after ~1s, or re-enroll deterministically at session start (Settings > Security > Fingerprint, calling this tool for each wizard touch). Emulator-only; physical devices cannot inject biometrics.

ParametersJSON Schema
NameRequiredDescriptionDefault
serialNoTarget device serial (adb -s). Optional when exactly one device is attached.
finger_idNoId of the enrolled finger to touch with (must match a finger enrolled in Settings). Default 1.

TDQS

A4.8/5.0
Behavior5/5

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

With no annotations provided, the description fully carries the behavioral burden. It discloses that the command reports OK even on failure, explains the enrollment ID increment issue, and details edge cases like indefinite hanging without enrollment. This goes beyond what annotations could convey.

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

Conciseness4/5

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

The description is moderately concise for the complexity it covers. It front-loads the core action and then adds important gotchas and troubleshooting. While thorough, it could be slightly more streamlined, but every sentence earns its place for a tool with no annotations and complex behavior.

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

Completeness5/5

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

Given no output schema and no annotations, the description is remarkably complete. It covers prerequisites, failure modes, troubleshooting, and device constraints. For a tool with high behavioral nuance (2 params, but many edge cases), this provides all necessary context.

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 schema covers 100% of parameters, so baseline is 3. The description adds meaningful value by explaining the semantics of finger_id (must match enrolled finger, default 1, suggestion to try multiple values) and serial (target device, optional). This elevates it above baseline.

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

Purpose5/5

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

The description clearly states the tool simulates a fingerprint-sensor touch on an emulator, specifies it drives the real biometric unlock path, and distinguishes it from alternatives like PIN fallback. The verb 'Simulate' and resource 'fingerprint-sensor touch' are specific, and the context of BiometricPrompt sets it apart from sibling tools.

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

Usage Guidelines5/5

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

The description explicitly instructs to check has_biometric_enrolled FIRST, warns about the GOTCHA with non-matching finger_id, and provides concrete troubleshooting steps (try ids 2..5, second touch, re-enrollment). It also states the tool is emulator-only, guiding when not to use it.

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

finger_removeA

Lift the simulated finger off the sensor (adb emu finger remove) — the complement to fingerprint_touch, for flows that watch for the finger-up event. Emulator-only.

ParametersJSON Schema
NameRequiredDescriptionDefault
serialNoTarget device serial (adb -s). Optional when exactly one device is attached.

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations provided, the description bears full responsibility for disclosing behavior. It reveals the underlying ADB command, confirms it is a simulation action, and notes the emulator-only restriction. For a simple one-parameter tool, this is sufficient to understand what the tool does and its context, though it could mention that it requires a prior fingerprint touch to be meaningful.

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

Conciseness5/5

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

The description is extremely concise: two sentences that get straight to the point. The first sentence states the action and underlying command, the second provides usage context and restrictions. No filler or redundant information.

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

Completeness5/5

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

For a simple tool with one optional parameter and no output schema, the description covers all essential context: what it does, how it relates to a sibling tool, when to use it (finger-up event flows), and the emulator-only constraint. There are no gaps in completeness for this tool's complexity.

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

Parameters3/5

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

The input schema has 100% coverage for the single optional 'serial' parameter, so the schema already documents its meaning. The description does not add any additional context or nuance about the parameter beyond what the schema provides, meeting the baseline expectation.

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

Purpose5/5

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

The description clearly states the action ('lift the simulated finger off the sensor') and the resource (finger on sensor). It explicitly positions itself as the complement to 'fingerprint_touch', distinguishing it from that sibling tool. The verb and resource are specific and unambiguous.

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

Usage Guidelines4/5

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

The description states it is for 'flows that watch for the finger-up event' and notes it is 'emulator-only'. This gives clear context for when to use it, though it does not explicitly list conditions where it should not be used or mention alternatives beyond the stated complement.

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

get_app_detailsA

Report an installed app's version name/code and its launchable activity (dumpsys package + resolve-activity) — to confirm what build is installed and find the activity to launch.

ParametersJSON Schema
NameRequiredDescriptionDefault
serialNoTarget device serial (adb -s). Optional when exactly one device is attached.
packageYesApplication package name (e.g. com.example.app).

TDQS

A3.7/5.0
Behavior3/5

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

With no annotations provided, the description must disclose behavioral properties fully. It mentions the underlying commands (dumpsys package + resolve-activity), which is helpful for understanding scope and side effects. However, it does not disclose whether the tool modifies state, requires specific permissions, or has rate limits.

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

Conciseness5/5

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

The description is a single sentence with minimal words, front-loads the key output, and appends the implementation hint in parentheses. Every word earns its place.

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

Completeness4/5

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

Given the tool's moderate complexity (2 params, no nested objects, no output schema), the description adequately covers what the agent needs: what it reports and how it works. Still, without output schema, a brief note on return format would improve completeness.

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

Parameters4/5

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

Schema coverage is 100%—both parameters (serial, package) have descriptions in the schema. The description adds context about what the tool reports (version name/code, launchable activity) but does not elaborate on the parameters beyond what the schema provides. Since coverage is complete, the baseline is 3; the slight additional context justifies a 4.

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

Purpose4/5

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

The description clearly identifies a specific verb-resource pair: 'Report an installed app's version name/code and its launchable activity'. It distinguishes from sibling tools like list_packages (which lists packages) and launch_app (which launches), providing a clear, unique purpose.

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

Usage Guidelines3/5

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

The description implies usage context—confirming what build is installed and finding the launch activity—but does not explicitly state when to use this tool versus alternatives like list_packages, launch_app, or stop_app. It gives no guidance on when not to use it.

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

get_coverage_reportA

Run a JaCoCo coverage-report Gradle task in project_dir (default 'jacocoTestReport', which runs the JVM unit tests first) and summarize the resulting code coverage: overall line/branch/method/class percentages plus a per-package breakdown, worst-covered package first. In a multi-module build every module's report is merged into one set of totals, and the merged report files are listed. IMPORTANT — 'jacocoTestReport' is NOT a task the Android Gradle plugin defines; it exists only if the project declares it. If the task is not found, run list_gradle_tasks and look for AGP's built-in 'createDebugUnitTestCoverageReport' (present when a build type sets enableUnitTestCoverage = true) and pass it as task=; both write the same JaCoCo XML and both are read. Covers JVM unit tests only, not instrumented (on-device) tests — there is no on-device analogue. Pass json=true for structured JSON instead of the text form.

ParametersJSON Schema
NameRequiredDescriptionDefault
argsNoExtra arguments passed to Gradle (e.g. --stacktrace).
jsonNoReturn structured JSON instead of the human-readable text summary.
taskNoGradle task that generates the JaCoCo XML report. Defaults to jacocoTestReport, which is NOT a task the Android Gradle plugin defines — it exists only if the project declares it. If it is missing, check list_gradle_tasks for AGP's built-in "createDebugUnitTestCoverageReport" (present when a build type sets enableUnitTestCoverage = true). Module-qualified names work: ":app:jacocoTestReport".
project_dirNoPath to the Android project root containing the Gradle wrapper (gradlew). Optional if session_set_defaults has pinned a project_dir for this session.

TDQS

A4.6/5.0
Behavior5/5

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

with no annotations provided, the description carries full burden and meets it: it discloses that the default task runs jvm unit tests first, that in multi-module builds reports are merged, and the json option for structured output. it also explains the caveat about task availability and fallback, providing complete transparency.

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?

description is relatively compact for the amount of detail provided; front-loaded with the main action. the important caveat section is capitalized. one minor improvement: the fallback instructions could be slightly more succinct.

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

Completeness5/5

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

given the tool's moderate complexity (4 params, no output schema, no annotations) the description leaves no essential gaps. it explains default behavior, multi-module handling, fallback for missing tasks, scope limits (jvm only), and output format options. no need for more.

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

Parameters3/5

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

schema coverage is 100% so baseline is 3. the description adds some context for the task parameter (explaining the non-default nature of jacocoTestReport and fallback task) but the other parameters (args, json, project_dir) are adequately described in the schema already. no significant extra value beyond schema.

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

Purpose5/5

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

description clearly states the tool runs a specific gradle task and summarizes code coverage with detailed metrics (line/branch/method/class percentages, per-package breakdown). it distinguishes itself from similar sibling tools like get_file_coverage or run_unit_tests, covering a distinct purpose.

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?

description explicitly tells when to use this tool, warns that jacocoTestReport is not an android gradle plugin default, and tells the agent to fall back to list_gradle_tasks and pass the built-in createDebugUnitTestCoverageReport instead. also clarifies it covers only jvm unit tests, not instrumented tests, and states there is no on-device analogue.

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

get_file_coverageA

Same JaCoCo run as get_coverage_report (default task 'jacocoTestReport', same fallback to AGP's 'createDebugUnitTestCoverageReport' when that task doesn't exist), scoped to one source file: line/branch coverage, the exact missed and partially-covered line numbers, plus per-method detail — the per-function breakdown get_coverage_report's package-level summary doesn't carry. Use it to find WHICH lines to write a test for, after get_coverage_report says which package is weakest. file matches by suffix (e.g. "Foo.kt" or "com/example/Foo.kt") across every module of a multi-module build; an ambiguous bare filename returns every matching file, a miss lists what coverage data does exist so you can correct it. Same JVM-unit-test-only scope as get_coverage_report. Pass json=true for structured JSON instead of the text form.

ParametersJSON Schema
NameRequiredDescriptionDefault
argsNoExtra arguments passed to Gradle (e.g. --stacktrace).
fileYesSource file to report coverage for — a filename (e.g. Foo.kt) or package-qualified path (e.g. com/example/Foo.kt). Matched by suffix; an ambiguous bare filename returns every match.
jsonNoReturn structured JSON instead of the human-readable text summary.
taskNoGradle task that generates the JaCoCo XML report. Defaults to jacocoTestReport, which is NOT a task the Android Gradle plugin defines — it exists only if the project declares it. If it is missing, check list_gradle_tasks for AGP's built-in "createDebugUnitTestCoverageReport" (present when a build type sets enableUnitTestCoverage = true). Module-qualified names work: ":app:jacocoTestReport".
project_dirNoPath to the Android project root containing the Gradle wrapper (gradlew). Optional if session_set_defaults has pinned a project_dir for this session.

TDQS

A4.5/5.0
Behavior4/5

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

No annotations are provided, so the description carries full burden. It discloses the underlying JaCoCo task and fallback, the file matching algorithm, the output format options (text vs JSON), the scope (JVM unit tests), and the relationship to get_coverage_report. It is non-destructive, but this is not explicitly stated; however, the read-only nature is implied by the coverage analysis context.

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

Conciseness4/5

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

The description is a single well-structured paragraph that packs essential information without redundancy. It starts with the core purpose, then flows into usage guidance, file matching details, and output options. It is concise but could benefit from slight formatting (e.g., bullet points for clarity), though current structure is effective.

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

Completeness4/5

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

Given the tool's complexity (5 parameters, no output schema, no annotations), the description covers all key aspects: purpose, usage relation to sibling, parameter behavior, file matching edge cases, and output format options. It does not describe the exact structure of the JSON/text output, but the details provided are sufficient for an agent to invoke the tool correctly.

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 100%, so baseline is 3. The description adds significant value beyond the schema: it explains the default task behavior and fallback, clarifies that file matching is by suffix, describes handling of ambiguous names and misses, and notes the optionality of project_dir. This extra context justifies a score above baseline.

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

Purpose5/5

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

The description clearly states the tool's purpose: a JaCoCo coverage report scoped to one source file, providing line/branch coverage, missed lines, and per-method detail. It distinguishes itself from the sibling get_coverage_report by explaining that it operates at the file level with per-function breakdown, not package-level summary.

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 guides when to use this tool: 'Use it to find WHICH lines to write a test for, after get_coverage_report says which package is weakest.' It also explains file matching behavior (suffix match, ambiguous names return all matches, misses list available data) and the scope (JVM unit tests only), providing clear context for selection.

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

gradle_buildA

Build the app with Gradle (default task assembleDebug) in project_dir, and report the produced APK path(s). project_dir must contain the Gradle wrapper (gradlew). Runs on the host, not a device.

ParametersJSON Schema
NameRequiredDescriptionDefault
argsNoExtra arguments passed to Gradle (e.g. --stacktrace, -Pflavor=free).
jsonNoFor run_unit_tests/run_instrumented_tests: return the test summary as structured JSON (per-suite timing, full failure stack traces) instead of the human-readable text summary. Ignored by gradle_build and list_gradle_tasks.
taskNoGradle task to run. Defaults to the tool's standard task.
project_dirNoPath to the Android project root containing the Gradle wrapper (gradlew). Optional if session_set_defaults has pinned a project_dir for this session.

TDQS

A4.1/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. It discloses the core behavior (build, report APK paths, default task, host execution) and a prerequisite. It does not mention potential side effects, error conditions, or execution time, but the disclosed information is sufficient for basic understanding.

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 three concise sentences with no fluff. Each sentence adds essential information: purpose and default, prerequisite, and host-vs-device distinction. The structure is logical and front-loaded.

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

Completeness3/5

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

The description covers the basic purpose, default, prerequisite, and host execution. However, it lacks details on the return format of APK paths, error handling, and potential timeouts. With no output schema, more explanation of the return value would improve completeness.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3. The description adds value by stating the default task (assembleDebug) and clarifying that the json parameter is ignored by this tool. This goes beyond the schema descriptions.

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

Purpose5/5

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

The description clearly states the tool builds the app with Gradle, specifies the default task assembleDebug, and reports produced APK paths. It distinguishes from siblings like build_and_run by noting it runs on the host, not a device.

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

Usage Guidelines4/5

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

The description provides a clear prerequisite (project_dir must contain gradlew) and a key usage distinction (runs on host, not device). However, it does not explicitly name alternative tools or state when not to use this tool.

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

gradle_project_propertiesA

Dump Gradle's evaluated properties for one module, such as :app or :feature:login. Use after list_gradle_projects when you need the module's namespace, Android SDK settings, build directory, or other effective configuration rather than just its task/variant names. This is the module's FULL effective property set — the same one ./gradlew properties would print, which can include credentials a build.gradle reads from ~/.gradle/gradle.properties or env (e.g. private Maven repo auth). Values for keys that look secret-shaped (password/token/key/credential) are redacted before being returned.

ParametersJSON Schema
NameRequiredDescriptionDefault
moduleYesGradle module path, e.g. :app or :feature:login.
project_dirNoPath to the Android project root containing the Gradle wrapper (gradlew). Optional if session_set_defaults has pinned a project_dir for this session.

TDQS

A4.6/5.0
Behavior5/5

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

With no annotations, the description carries full weight. It discloses the scope (one module), the fact that it returns the full effective property set (like ./gradlew properties), and importantly warns that credentials may be included but are redacted for secret-shaped keys. This is thorough behavioral documentation.

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 four sentences, each adding essential information. It is front-loaded with the core purpose, then usage context, then behavioral details. No wasted words or redundancy.

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

Completeness4/5

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

Given the lack of an output schema, the description does a good job clarifying what the agent will receive (full property set, redacted secrets). It covers sensitivity and scope. However, it could mention the output format (e.g., key-value pairs) for even better completeness.

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

Parameters3/5

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

Schema coverage is 100% for both parameters, so the baseline is 3. The description reinforces that module uses the ':app' format and that project_dir is optional (possibly set by session_set_defaults), but does not add significant information beyond what the schema already provides.

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

Purpose5/5

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

The description uses a specific verb ('Dump') and resource ('Gradle's evaluated properties for one module'), clearly distinguishing the tool from siblings like list_gradle_projects. It explicitly contrasts the output (effective configuration vs. task/variant names), making the purpose unambiguous.

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?

The description explicitly states when to use this tool ('Use after list_gradle_projects when you need the module's namespace...') and what alternative provides ('rather than just its task/variant names'). This gives the agent clear context for selection among related tools.

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

grant_permissionB

Grant a runtime permission to an app (pm grant), e.g. android.permission.CAMERA — skips the in-app permission dialog so you can drive straight to the feature.

ParametersJSON Schema
NameRequiredDescriptionDefault
serialNoTarget device serial (adb -s). Optional when exactly one device is attached.
packageYesApplication package name.
permissionYesFull permission name, e.g. android.permission.CAMERA.

TDQS

B3.4/5.0
Behavior2/5

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

No annotations are provided, so the description bears full responsibility for behavioral disclosure. It reveals the key behavior of bypassing the permission dialog, but omits other important traits: what happens if the permission is already granted, whether the tool requires root or specific Android version, error handling, or side effects on other apps. The disclosure is partial and insufficient for a system-mutating tool.

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

Conciseness5/5

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

The description is a single sentence with a dash and an example, front-loading the core action. Every word earns its place: the verb, the resource, the implementation hint ('pm grant'), the example, and the user benefit. No redundant text or unnecessary details.

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

Completeness2/5

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

Given the absence of an output schema, the description should describe what the tool returns or error behavior. It does not mention success/failure responses, side effects, or status codes. The tool modifies system permissions, yet the description omits critical context about return values, error cases, and post-conditions.

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

Parameters3/5

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

Schema description coverage is 100% (all three parameters have descriptions in the schema). The description adds only a reinforcing example ('android.permission.CAMERA') and implicitly notes that serial is optional (since it is not required in the schema). This meets the baseline but does not provide additional meaning beyond the schema.

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

Purpose5/5

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

The description clearly states the action ('Grant a runtime permission'), specifies the target resource ('an app'), provides a concrete example ('android.permission.CAMERA'), and distinguishes the tool from the sibling 'revoke_permission' by its verb. It also explains the practical benefit of skipping the dialog, making the purpose unmistakable.

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

Usage Guidelines3/5

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

The description implies when to use the tool ('skip the in-app permission dialog so you can drive straight to the feature') but does not explicitly state when not to use it, mention alternatives like 'revoke_permission', or note prerequisites (e.g., device debug mode). The context is adequate but lacks exclusions or boundary conditions.

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

has_biometric_enrolledA

Report whether any fingerprint is enrolled (and how many), from dumpsys fingerprint. Check this BEFORE a biometric flow: with nothing enrolled, fingerprint_touch can never satisfy a BiometricPrompt — it just sits on "Touch the sensor" — so branch to enrolling one or to the PIN path instead of guessing. Works on emulators and physical devices. Note: the framework exposes only an enrolled COUNT, never which finger id is enrolled, and a wrong fingerprint_touch id trips a HAL lockout after a few tries — so enroll deterministically rather than sweeping ids.

ParametersJSON Schema
NameRequiredDescriptionDefault
serialNoTarget device serial (adb -s). Optional when exactly one device is attached.

TDQS

A4.5/5.0
Behavior4/5

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

No annotations are provided, so the description must carry the full burden. It discloses key behaviors: works on emulators and physical devices, the framework only exposes an enrolled count (never which finger id), and that a wrong fingerprint_touch id trips a HAL lockout after a few tries. It also advises enrolling deterministically. While it covers most behavioral traits, it does not mention whether the tool requires any special permissions or adb setup, leaving a minor gap.

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

Conciseness5/5

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

The description is three sentences: the first states the core function, the second provides critical usage guidance, and the third adds behavioral nuances. Every sentence serves a distinct purpose without redundancy or fluff. It is well-front-loaded and concise.

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

Completeness5/5

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

Given the simplicity (1 optional parameter, no output schema, no nested objects), the description is fully adequate. It provides purpose, usage context, behavioral insights, and practical advice. There is no missing information needed for an agent to correctly select and invoke this tool.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents the single optional 'serial' parameter. The description does not add additional meaning about the parameter beyond the schema. Baseline 3 is appropriate.

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

Purpose5/5

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

The description explicitly states the tool reports whether any fingerprint is enrolled and how many, from 'dumpsys fingerprint'. The verb 'Report' and resource 'biometric enrollment' are specific. It clearly distinguishes from siblings like 'fingerprint_touch' (which performs a touch) and 'finger_remove' (which removes enrollment), making its purpose unique.

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?

The description provides clear when-to-use guidance: 'Check this BEFORE a biometric flow'. It explains the consequence of not checking (fingerprint_touch can never satisfy BiometricPrompt and just sits on 'Touch the sensor') and gives explicit branching alternatives ('branch to enrolling one or to the PIN path instead of guessing'). This is exemplary usage guidance.

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

input_key_comboA

Press several keys together as a chord (input keycombination, Android 11+). Use preset="select_all" (or copy/paste/cut/undo/redo/save/find) for a named shortcut, or keys=["ctrl","a"] / ["alt","tab"] to spell one out — modifier(s) first, then the action key; each is a key name (ctrl/alt/shift/meta, a-z, enter, tab, ...) or a raw keycode. For a single key use press_key instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
keysNoKeys to press together, modifier(s) first, e.g. ["ctrl","a"] or ["alt","tab"]. Each is a key name (ctrl, alt, shift, meta, a-z, enter, tab, ...) or a raw keycode number. Needs at least 2. Omit if preset is given.
presetNoNamed combo shortcut (select_all, copy, paste, cut, undo, redo, save, find) that expands to the right chord — use this instead of keys when a name will do.
serialNoTarget device serial (adb -s). Optional when exactly one device is attached.

TDQS

A4.5/5.0
Behavior4/5

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

No annotations exist, so the description carries full burden. It explains key ordering, modifier priority, and preset expansion. Lacks details about error handling or return values, but provides sufficient behavioral context for a chord press.

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

Conciseness4/5

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

Single dense paragraph is efficient and front-loaded with key info (chord, Android 11+). Could benefit from bulleted examples, but every sentence earns its place.

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 three-parameter tool with no output schema, the description covers usage, parameter selection, and alternatives. It is complete enough for an agent to invoke correctly.

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

Parameters4/5

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

Schema coverage is 100% with descriptions, but the tool description adds extra meaning: examples like ["ctrl","a"], explicit ordering 'modifier(s) first', and listing preset names. This goes beyond the schema alone.

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

Purpose5/5

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

Description clearly states it presses several keys together as a chord on Android 11+. It explicitly contrasts with press_key for single keys, distinguishing itself from a 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 Guidelines5/5

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

Provides explicit guidance on when to use preset vs keys, and directs users to use press_key for a single key. Also notes the Android 11+ requirement, giving clear context for usage.

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

input_textA

Type text into the currently focused input field via the IME. Tap the field first so it has focus. Afterwards the soft keyboard may cover buttons lower on screen — dismiss it with press_key escape (or back) before tapping them. For native non-IME PIN pads this does nothing; use enter_pin instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYesText to type into the focused field.
serialNoTarget device serial (adb -s). Optional when exactly one device is attached.

TDQS

A4.8/5.0
Behavior5/5

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

With no annotations provided, the description fully bears the burden of behavioral disclosure. It discloses all key behaviors: the IME mechanism, the prerequisite focus requirement, the side effect of keyboard obstruction, the suggested mitigation, and the specific failure case (native PIN pads). No contradictions present.

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

Conciseness4/5

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

The description is 3 sentences, front-loaded with the primary action, 135 characters per sentence average. Every sentence provides distinct value: primary action, prerequisite, and post-action guidance with alternative tool reference. Slightly longer than strictly necessary but no wasted words.

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

Completeness5/5

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

Given the complexity of text input on mobile devices (IME vs native, keyboard obstruction), the description is complete. There is no output schema, but the side effects and failure modes are well documented. The description covers prerequisite, mechanism, side effect, mitigation, and the known exception case comprehensively.

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 100%, so baseline is 3. The description adds significant value beyond the schema: 'serial' is documented in the schema, but the description adds the 'via the IME' mechanism and keyboard dismissal context for 'text'. The description does not repeat the schema's parameter definitions verbatim but adds operational context that clarifies the intended usage of the 'text' parameter.

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

Purpose5/5

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

The description uses a specific verb ('type text') and identifies the target resource ('currently focused input field') with a clear mechanism ('via the IME'). It also explicitly distinguishes itself from the sibling tool 'enter_pin', which handles native PIN pads, preventing confusion.

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?

The description provides explicit step-by-step guidance: tap the field first for focus, and dismiss the keyboard with press_key escape/back before tapping other buttons. It also explicitly states when NOT to use this tool (for native non-IME PIN pads) and directs to the alternative 'enter_pin'.

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

install_appA

Install (or reinstall, -r) an APK from a local file path onto the device. Use to deploy a build you want to test.

ParametersJSON Schema
NameRequiredDescriptionDefault
serialNoTarget device serial (adb -s). Optional when exactly one device is attached.
apk_pathYesLocal filesystem path to the .apk to install.

TDQS

A3.7/5.0
Behavior2/5

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

No annotations are provided, so the description carries full burden. It only mentions install/reinstall but lacks details on side effects, permissions, multi-device behavior, or completion status. This is insufficient for safe autonomous use.

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, no redundant words. The core action and purpose are front-loaded, making it efficient and easy to parse.

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

Completeness3/5

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

For a simple install tool with no output schema and no annotations, the description covers the basic purpose but omits crucial details like error handling, timeout behavior, return format, and device selection fallback. It is adequate but not fully 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 100%, so baseline is 3. The description does not add meaningful information beyond the schema; it repeats 'local file path' which is already in the apk_path parameter description. No extra value.

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

Purpose5/5

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

Description clearly states the verb 'Install (or reinstall, -r)' and the resource 'APK from a local file path onto the device', making the tool's action unambiguous. It distinguishes from siblings like launch_app by specifying deployment of a local build for testing.

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 phrase 'Use to deploy a build you want to test' provides clear context for when to use the tool. However, it does not explicitly state when not to use it or mention alternatives like uninstall_app or launch_app, leaving room for improvement.

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

is_device_secureA

Report whether a secure lock screen is set (KeyguardManager.isDeviceSecure). Use it to verify set_device_lock worked before running a Keystore-gated flow.

ParametersJSON Schema
NameRequiredDescriptionDefault
serialNoTarget device serial (adb -s). Optional when exactly one device is attached.

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden. It discloses that the tool reports a boolean state and frames it as a verification step, adding context beyond a bare API name. It does not mention side effects (likely none), but for a simple read-only query, this level of transparency is sufficient.

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

Conciseness5/5

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

Two sentences: the first states the core function and API, the second gives a concrete use case. Every word earns its place, and the front-loaded structure makes the tool's purpose immediately clear.

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

Completeness5/5

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

For a simple query tool with one optional parameter, the description fully covers what the tool does, when to use it, and its relationship to set_device_lock. No output schema exists, but 'Report whether' already conveys the return type. The context is complete for an agent to select and invoke it correctly.

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

Parameters3/5

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

The schema has 100% description coverage for the single optional 'serial' parameter, so the schema already documents its meaning. The description adds no additional parameter semantics, which is acceptable since schema coverage is high.

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

Purpose5/5

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

The description uses a specific verb ('Report') and resource ('secure lock screen'), and specifies the underlying API (KeyguardManager.isDeviceSecure). It clearly distinguishes from sibling tools like has_biometric_enrolled by focusing on lock-screen security rather than biometrics.

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 says 'Use it to verify set_device_lock worked before running a Keystore-gated flow,' providing a clear when-to-use scenario. It does not explicitly mention when not to use or list alternatives, but the directive is unambiguous for common cases.

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

last_crashA

Return the most recent app crash from the system DropBox (dumpsys dropbox — JVM/React-Native and native crashes), with the full exception header and stack in one call. Optionally filter to a package. Use this instead of grepping logcat when an app just crashed: DropBox keeps the whole fatal (header + Caused by + frames) together even after it has scrolled out of the logcat ring buffer.

ParametersJSON Schema
NameRequiredDescriptionDefault
serialNoTarget device serial (adb -s). Optional when exactly one device is attached.
packageNoOptional package name to filter to (e.g. com.example.app); omit for the most recent crash from any app.

TDQS

A4.4/5.0
Behavior4/5

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

No annotations are provided, so the description fully covers behavioral aspects: it describes the data source (dumpsys dropbox), types of crashes (JVM/React-Native and native), and that it returns full exception headers and stacks. The only minor gap is not mentioning that the operation is read-only or any impact on system state, but it clearly implies a read operation.

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

Conciseness5/5

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

The description is two sentences, each earning its place: the first sentence states the tool's capability and source, the second provides usage guidance and rationale. It is front-loaded with the essential purpose.

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

Completeness4/5

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

Given that there are only 2 parameters, no required parameters, no output schema, and no annotations, the description is adequately complete. It explains the tool's purpose, usage advice, and filtering option. The only missing aspect is specifying the return format, but without an output schema this is a minor gap.

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

Parameters3/5

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

Schema description coverage is 100%, so baseline is 3. The description adds context for the 'package' parameter (how to filter) but does not add meaning beyond what the schema already provides. The 'serial' parameter is standard across sibling tools and requires no additional explanation.

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

Purpose5/5

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

The description states the tool returns the most recent app crash from the system DropBox, specifying the source (dumpsys dropbox) and type (JVM/React-Native and native crashes). It distinguishes itself from siblings like logcat by explaining it retrieves full exception headers and stacks in one call.

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?

The description explicitly states when to use this tool: 'Use this instead of grepping logcat when an app just crashed', and gives a clear alternative (logcat). It also explains the advantage (DropBox keeps the whole fatal, even after it has scrolled out of logcat).

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

launch_appA

Launch an app by package name (starts its LAUNCHER activity) and echo the resolved component on success. Fails with a clear message (not a raw monkey dump) when the package isn't installed or has no launcher activity. Combine with stop_app to restart an app cleanly from a known state.

ParametersJSON Schema
NameRequiredDescriptionDefault
serialNoTarget device serial (adb -s). Optional when exactly one device is attached.
packageYesApplication package name (e.g. com.example.app).

TDQS

A4.4/5.0
Behavior5/5

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

With no annotations provided, the description fully carries the behavioral transparency burden. It states the launched activity type, success indicator (echo component), and error conditions (missing package or launcher). The usage pattern with stop_app adds transparency about side effects and state management.

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 concise (three sentences), front-loaded with the main action, and every sentence adds value. No filler or redundant information. It efficiently conveys purpose, behavior, and usage.

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 tool with no output schema and good parameter documentation, the description is largely complete. It covers success/failure behavior and a common usage pattern. Minor gap: the output format ('echo') is implied but not explicitly defined.

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

Parameters3/5

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

Schema description coverage is 100%, so baseline is 3. The description does not add meaning beyond what the input schema already provides for the two parameters (package and serial). No additional context about parameter values or constraints is given.

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

Purpose5/5

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

The description clearly states the tool's purpose: 'Launch an app by package name (starts its LAUNCHER activity) and echo the resolved component on success.' It uses a specific verb-resource combination and distinguishes itself from siblings like stop_app by explaining how to combine them for a clean restart.

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

Usage Guidelines4/5

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

The description provides explicit guidance on when to use the tool and what to expect on failure ('Fails with a clear message when the package isn't installed or has no launcher activity'). It also suggests a common workflow with stop_app, though it doesn't explicitly mention alternatives for deep links or other launch methods.

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

launch_dev_clientA

Launch an Expo dev build straight at a Metro dev server, skipping the Dev Launcher's server-picker screen. Builds the "://expo-development-client/?url=http://host:port" deep link and opens it. Pass scheme (your app.json "scheme"); host/port default to localhost:8081. PREREQUISITE: run adb_reverse tcp:8081 first so the device can reach Metro, otherwise the dev client falls back to its embedded bundle. For plain Expo Go (not a dev build) use open_url with the exp:// URL instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
hostNoMetro dev-server host as the DEVICE sees it. Default localhost (works once adb_reverse tcp:8081 is set).
portNoMetro dev-server port. Default 8081.
schemeYesThe app's URL scheme from app.json (e.g. "myapp") — used to build the expo-development-client deep link.
serialNoTarget device serial (adb -s). Optional when exactly one device is attached.
packageNoOptional package to target the intent at (disambiguates if multiple apps claim the scheme).

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations, the description carries the full behavioral burden. It discloses the deep-link construction, default host/port behavior, and the embedded-bundle fallback when adb_reverse is not set. It doesn't document the return value or post-launch behavior, but the core operational traits are transparent.

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

Conciseness5/5

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

Four sentences, all information-dense and directly useful. The main verb and outcome are front-loaded, the prerequisite and alternative are clearly flagged, and no words are wasted.

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?

Despite having no output schema and no annotations, the description covers the essential context: prerequisite setup, fallback behavior, parameter sources, and distinction from a sibling tool. For a tool with five parameters and a specific launch flow, this is a complete and actionable description.

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

Parameters3/5

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

The input schema already provides rich descriptions for all five parameters (100% coverage), including defaults and device-visibility notes. The description adds context for scheme's source (app.json) and host/port defaults, but these largely repeat or infer what the schema already states, so the added semantic value is limited.

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

Purpose5/5

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

The description clearly states a specific action: launching an Expo dev build directly at a Metro dev server, bypassing the Dev Launcher's server-picker. It explicitly distinguishes itself from open_url for plain Expo Go, which is a key sibling differentiator.

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?

Provides explicit when-to-use context (dev build vs Expo Go) and names the alternative (open_url with exp://). It also gives a clear prerequisite (adb_reverse tcp:8081) and explains the consequence of skipping it, offering concrete operational guidance.

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

list_avdsA

List the Android Virtual Devices (AVDs) installed on this machine that can be booted. Start here when no emulator is running yet; the returned names feed boot_emulator.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.9/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It discloses that the tool lists AVDs that 'can be booted', implying a read-only operation, but does not mention any side effects, permissions needed, or how the list is obtained (e.g., from local files or ADB). For a zero-parameter tool with no output schema, some behavioral context is missing.

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

Conciseness5/5

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

The description is two sentences long with no extraneous information. It front-loads the core purpose ('List the Android Virtual Devices') and adds a practical usage hint. Every sentence earns its place.

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

Completeness4/5

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

Given the tool's simplicity (no params, no output schema), the description is largely complete: it explains what the tool does, when to use it, and how the output is used. A minor gap is lack of detail on output format (e.g., list of strings, JSON) or edge cases (e.g., no AVDs installed), but the description suffices for an agent to select and invoke the tool correctly.

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

Parameters4/5

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

The input schema has 0 parameters, and schema description coverage is 100%, so the description adds clarity by explaining what the tool returns (AVD names) and their purpose. No parameter documentation is needed, and the description compensates well by explaining the output usage.

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

Purpose4/5

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

The description clearly states the verb 'List' and the resource 'Android Virtual Devices (AVDs) installed on this machine', and distinguishes the tool's scope (listing installed AVDs). However, it does not differentiate from sibling tools like 'list_devices' or 'boot_emulator' beyond stating where the names feed into.

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

Usage Guidelines4/5

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

The description gives explicit guidance on when to use this tool ('Start here when no emulator is running yet') and indicates the next step ('the returned names feed boot_emulator'), which implies a workflow. However, it does not mention when not to use it or provide alternatives among the many sibling tools.

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

list_devicesA

List attached emulators/devices and their adb state (device = ready, offline, unauthorized). Use it to confirm a device is up before driving it, or to get the serial when several are attached. Driving a React Native/Expo dev build? Read android://guide/rn-expo before you start — the ordering (adb_reverse BEFORE launch, app_state before believing anything) is the part that costs sessions.

ParametersJSON Schema
NameRequiredDescriptionDefault
serialNoTarget device serial (adb -s). Optional when exactly one device is attached.

TDQS

A4/5.0
Behavior4/5

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

With no annotations, the description carries the behavioral disclosure burden. It communicates that the tool is a read-only listing operation and clarifies the adb states it reports. It does not explicitly state the absence of side effects, but 'List' and the focus on device state strongly imply a safe, non-mutating operation.

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 two sentences are concise and front-loaded with essential information. However, the third sentence about the React Native/Expo guide is tangential to listing devices and introduces workflow advice that may belong elsewhere. It slightly dilutes the tool-focused message.

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 tool with one optional parameter and no output schema, the description covers the core action, expected state values, and practical use cases. It could be more complete by explicitly describing the return format, but the description is sufficient for an agent to understand what will happen.

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

Parameters3/5

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

Schema coverage is 100% and the schema already documents the 'serial' parameter with its optionality and adb -s semantics. The description adds marginal context by mentioning serial retrieval when multiple devices are attached, but it does not meaningfully supplement the schema.

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

Purpose5/5

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

The description states a specific verb and resource: 'List attached emulators/devices and their adb state'. It also defines the state values (device, offline, unauthorized), making the tool's function unambiguous. This distinguishes it from sibling tools like list_avds, which target AVDs rather than attached devices.

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

Usage Guidelines4/5

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

The description explicitly tells the agent when to use this tool: 'confirm a device is up before driving it' and 'get the serial when several are attached'. It does not explicitly mention alternatives or exclusions, but the usage contexts are clear enough for an agent to decide.

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

list_gradle_projectsA

List the Gradle modules (sub-projects) in project_dir (gradlew projects) — the map of a multi-module build, e.g. :app, :core, :feature:login. Use it to find which module to point gradle_build/list_gradle_variants at, or to address a task at one module with ':' (e.g. :app:assembleDebug). A single-module build reports no sub-projects.

ParametersJSON Schema
NameRequiredDescriptionDefault
project_dirNoPath to the Android project root containing the Gradle wrapper (gradlew). Optional if session_set_defaults has pinned a project_dir for this session.

TDQS

A4.7/5.0
Behavior4/5

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

No annotations are provided, so the description carries the full burden. It clearly indicates a read-only operation (listing modules) with no side effects. It does not elaborate on potential errors or prerequisites beyond the gradlew wrapper, but for a simple list tool, this is sufficient. The behavior is transparent enough for an agent to understand the tool's impact.

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 concise single paragraph that front-loads the main purpose. Every sentence adds value: listing the result, usage examples, and a note about single-module builds. There is no redundancy or fluff.

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

Completeness5/5

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

Given the tool's simplicity and the absence of an output schema, the description is complete. It explains the tool's output format (modules as paths like ':app'), how to use it, and the edge case of single-module builds. No additional information is needed for effective use.

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 schema coverage is 100% with a description for the single parameter 'project_dir'. The tool description adds value beyond the schema by explaining the optionality via session defaults (referencing 'session_set_defaults'). This provides crucial context for an agent, elevating it above the baseline 3.

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

Purpose5/5

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

The description clearly states the tool's purpose: listing Gradle modules (sub-projects) in a project directory. It uses a specific verb ('List') and resource ('Gradle modules'), and provides examples like ':app', ':core', ':feature:login'. It differentiates from sibling tools like 'gradle_build' and 'list_gradle_variants' by explaining how the output is used to target those tools.

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?

The description explicitly tells when to use this tool: to find which module to point at 'gradle_build' or 'list_gradle_variants', or to address a task with a module path. It also explains the single-module build case, giving clear context. Though no explicit 'when not to use', the use case is well-defined and leaves no ambiguity.

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

list_gradle_tasksA

List the available Gradle tasks in project_dir (gradlew tasks) — to discover build/test/install targets. In a multi-module build this lists the ROOT project's own tasks by default; pass task=":tasks" (e.g. ":app:tasks", from list_gradle_projects) to scope to a submodule instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
argsNoExtra arguments passed to Gradle (e.g. --stacktrace, -Pflavor=free).
jsonNoFor run_unit_tests/run_instrumented_tests: return the test summary as structured JSON (per-suite timing, full failure stack traces) instead of the human-readable text summary. Ignored by gradle_build and list_gradle_tasks.
taskNoGradle task to run. Defaults to the tool's standard task.
project_dirNoPath to the Android project root containing the Gradle wrapper (gradlew). Optional if session_set_defaults has pinned a project_dir for this session.

TDQS

A4.2/5.0
Behavior3/5

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

The description states it runs 'gradlew tasks' which is a read-only operation, implying no destructive side effects. However, since there are no annotations provided, the description should ideally be more explicit about non-destructive behavior, output format (plain text), and potential prerequisites (e.g., Gradle installation). The description is adequate but not exhaustive.

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

Conciseness5/5

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

The description is a single sentence with a key parenthetical tip. It is front-loaded with the core purpose and efficiently conveys essential usage nuance without extraneous words.

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

Completeness4/5

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

Given no output schema and moderate parameter count (4), the description adequately covers the tool's purpose, scope, and a key parameter usage (task for submodules). It does not detail return format (text output) or behavior when no task is specified, but the core use case is well-served. A sibling reference to list_gradle_projects adds helpful context.

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 schema has 100% description coverage for all four parameters, so the baseline is 3. The description adds extra value by explaining the 'task' parameter's special usage for submodule scoping, which is not fully detailed in the schema. Additionally, it clarifies that 'json' is ignored by this tool, providing useful semantic nuance beyond the schema.

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

Purpose5/5

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

The description clearly states it lists available Gradle tasks via 'gradlew tasks' to discover build/test/install targets. It also distinguishes the scope (root project vs. submodule), which helps differentiate from sibling tools like list_gradle_projects or list_gradle_variants.

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

Usage Guidelines4/5

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

The description explains when to use this tool (discover Gradle tasks) and provides a concrete alternative approach for multi-module builds (passing task="<module>:tasks"). It could be stronger with explicit when-not-to-use scenarios, but the sibling context and tip cover key usage guidance.

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

list_gradle_variantsA

List the buildable build variants in project_dir (parsed from the assemble* tasks) — the Android analogue of "list schemes". Each variant V maps to an assembleV / installV Gradle task; pass it as the task= arg to gradle_build/build_and_run to disambiguate a multi-flavor project. Test-only APK tasks (androidTest/unitTest) are excluded. In a multi-module build the ROOT project usually has no variants of its own (no Android plugin applied there) — pass task=":tasks" (e.g. ":app:tasks", from list_gradle_projects) to scope to the module that actually builds APKs.

ParametersJSON Schema
NameRequiredDescriptionDefault
taskNoGradle task to scope to, e.g. ":app:tasks" to list variants for the :app module. Defaults to the root project's tasks.
project_dirNoPath to the Android project root containing the Gradle wrapper (gradlew). Optional if session_set_defaults has pinned a project_dir for this session.

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations provided, the description carries full burden for behavioral transparency. It clearly states expected behavior (parsing from assemble* tasks, excluding test APKs), the edge case of multi-module root projects, and the relationship to task arg propagation. However, it does not discuss potential latency, error conditions (e.g., project_dir not set), or what happens if no assemble tasks exist, which would push it to a perfect 5 in this unannotated context.

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, dense paragraph of 4 sentences that front-loads the core purpose in the first sentence, then adds progressively more nuanced context. Every sentence is essential—no fluff, no repetition of schema, and no extraneous explanations. It achieves maximal information density in minimal space.

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

Completeness5/5

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

Given the tool's complexity (2 params, no output schema, moderate sibling list), the description is remarkably complete. It covers what the tool does, what it excludes, how variants map to downstream tools, the root project caveat, and cross-referencing to sibling tools like list_gradle_projects and gradle_build. No significant gaps remain for an agent to effectively select and invoke this tool.

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

Parameters3/5

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

Schema description coverage is 100%, so baseline is 3. The description does not add parameter-level detail beyond the schema—it mentions task= and project_dir in the prose but provides no additional syntax, allowed values, or format constraints. This is adequate since the schema already describes both parameters clearly, but the description does not enhance understanding of their role beyond restating schema information.

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

Purpose5/5

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

The description uses a specific verb-resource pair ('list the buildable build variants') and distinguishes the tool from its siblings by calling it the 'Android analogue of list schemes' and explaining that each variant maps to an assembleV/installV task. It clearly states what is excluded (test-only APK tasks) and how it relates to other tools like gradle_build.

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?

The description explicitly guides when to use this tool and when to use alternatives: it explains that variants are passed to gradle_build's task= arg, and for multi-module builds, you should use list_gradle_projects first then task='<module>:tasks'. It covers the root project caveat and scoping advice, leaving no ambiguity about appropriate usage.

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

list_packagesA

List installed package names, optionally filtered by substring — to confirm an app is installed and get its exact package name for launch_app/stop_app.

ParametersJSON Schema
NameRequiredDescriptionDefault
filterNoSubstring to filter package names.
serialNoTarget device serial (adb -s). Optional when exactly one device is attached.

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It correctly implies a read-only listing operation, mentions optional filtering, and indicates that the output provides package names usable by launch_app/stop_app. This is sufficient for an agent to infer safety and return structure, though it could explicitly state it does not modify the device.

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, well-structured sentence that front-loads the primary action and filter option, then immediately gives the use case. Every word earns its place, no redundancy.

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

Completeness4/5

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

Given the tool's low complexity (2 optional params, no output schema, no annotations), the description is nearly complete: it explains purpose, parameters briefly, and downstream usage. A minor gap is that it doesn't hint at the return format or that serial is for multi-device scenarios, but these are compensated by the schema descriptions.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3. The description adds no additional meaning to the filter or serial parameters beyond what the schema already provides; it just names the parameters in context. This is adequate but does not exceed the baseline.

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

Purpose5/5

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

The description clearly states the tool lists installed package names, optionally filtered by substring, and explicitly communicates the use case: to confirm an app is installed and get its exact package name for launch_app/stop_app. This is a specific verb+resource combination that distinguishes it from siblings like get_app_details or install_app.

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

Usage Guidelines4/5

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

The description tells when to use this tool (to confirm an app is installed and get its exact name for launching/stopping), implying the subsequent action. It does not explicitly state when not to use it or mention alternatives among the many sibling tools, but the context is clear enough for an agent.

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

logcatA

Dump recent native log lines — the last N (default 400) or, with since="2m"/"90s", everything from that long ago on the device clock (the right axis when the report is 'I just hit an error'; on a chatty emulator 400 lines can span seconds). Optionally filtered by a case-insensitive substring, a minimum priority (V/D/I/W/E/F — e.g. priority="E" for errors and up), and/or tags (OR'd). This is how you find the REAL reason a native call failed when the UI only shows a generic 'X failed' alert: filter by your app tag or 'Exception'/'Caused by' and read the 'Caused by:' line — that is the root cause. Dumps and exits (does not stream); chatty spam is stripped.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagsNoKeep only lines whose log tag contains one of these (case-insensitive, OR'd), e.g. ["SessionStore","AuthModule"]. Omit for no tag filtering.
linesNoNumber of recent lines to dump. Default 400. Ignored when since is given.
sinceNoTime window instead of a line count: only lines from the last e.g. "2m", "90s", "1h30m" (device clock). The right axis when the report is "I just hit an error" — on a chatty emulator 400 lines can span under ten seconds.
filterNoCase-insensitive substring to keep (e.g. an app tag or "Exception").
redactNoMask common secrets (token, password, authorization, api key, secret) before returning log lines. Recommended for payment/auth SDKs and debug builds.
serialNoTarget device serial (adb -s). Optional when exactly one device is attached.
priorityNoMinimum priority to keep: V, D, I, W, E, or F (matches adb's own "*:E"-style filter — E keeps Error and Fatal). Omit for no priority filtering.

TDQS

A4.9/5.0
Behavior5/5

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

With no annotations provided, the description fully shoulders the transparency burden. It discloses: the tool dumps and exits (not streaming), strips chatty spam, is case-insensitive, accepts relative time windows via device clock, and the default of 400 lines can span only seconds on a chatty emulator. All behavioral traits are clearly communicated.

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 dense paragraph that wastes no words. Every clause earns its place: the default behavior, the since parameter explanation, the use-case hook, the filter/tag/priority options, the non-streaming nature, and the spam-stripping note. It is front-loaded with the core action and then layers detail. No fluff.

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?

Despite having 7 parameters and no annotations or output schema, the description covers all important aspects: what the tool does, how to use each parameter, when to use it, its behavioral limits (dump and exit, spam stripping, device clock for since), and how to interpret results ('Caused by: line is the root cause'). The only minor gap is that no output format is described, but for a text-dumping tool that's acceptable — the user sees raw logcat text.

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 100%, so baseline is 3. The description goes beyond the schema by explaining that since is 'the right axis when the report is I just hit an error' and that '400 lines can span seconds on a chatty emulator' — adding operational context not present in the parameter descriptions. It also clarifies that tags are OR'd and priority mirrors adb's *:E syntax, which is not in the schema. One small deduction: the description doesn't detail how multiple filters (tag, priority, filter) interact — but the schema already implies AND logic.

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

Purpose5/5

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

The description opens with 'Dump recent native log lines' — a strong verb+resource pair. It immediately distinguishes itself from sibling tools like start_logcat_capture (streaming), clear_logcat (clearing), and last_crash (crash-specific) by emphasizing its dump-and-exit, non-streaming behavior and its role for root-cause analysis.

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?

The description explicitly tells when to use this tool: 'when the UI only shows a generic X failed alert.' It also indirectly advises against using it for streaming (since it dumps and exits) and positions it as complementary to start_logcat_capture/stop_logcat_capture for continuous monitoring. The since parameter is scoped to 'device clock' and the right axis is explained.

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

long_pressA

Press and hold a coordinate (true device pixels) for a duration — for context menus, drag handles, and long-press actions.

ParametersJSON Schema
NameRequiredDescriptionDefault
xYesX coordinate in true device pixels.
yYesY coordinate in true device pixels.
serialNoTarget device serial (adb -s). Optional when exactly one device is attached.
duration_msNoHold duration in ms. Default 600.

TDQS

A4/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It correctly indicates that the action is a sustained press at a coordinate in true device pixels for a configurable duration. However, it does not mention side effects (e.g., triggering system gestures) or failure modes, leaving a modest gap.

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

Conciseness5/5

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

A single sentence that packs the verb, resource, key parameters, and use cases. Every phrase earns its lace, and the most critical information is front-loaded. No filler.

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

Completeness4/5

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

Given the tool's simplicity (4 basic paramers, no output schema, no nested objects), the description covers the essential purpose, input meaning, and typical scenarios. It lacks an explicit return-value statement, but that's acceptable for a void action. The description feels complete enough for an agent to invove this tool correctly.

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

Parameters3/5

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

Schema coverage is 100%, so the schema already documents all four parameters. The description adds the meaning of 'true device pixels' and the 'duration' concept, but does not elaborate on serial or duration default beyond what the schema's 'Default 600' already states. Baseline 3 is appropriate.

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

Purpose5/5

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

The description clearly states 'Press and hold a coordinate' with specific use cases—'context menus, drag handles, and long-press actions.' This verb+resource combination distinguishes it from siblings like 'tap','swipe','drog' by emphasizing sustained contact.

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

Usage Guidelines4/5

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

The description explicitly lists when to use the tool ('for context menus, drag handles, and long-press actions'), guiding the agent toward appropriate user scenarios. It does not explicitly contrast with alternatives, but the use cases implicitly differentiate it from point-and-click or swipe actions.

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

open_dev_menuA

Open the React Native dev menu (KEYCODE_MENU) on the foreground app — the reliable way to reach a dev build's Reload/Debug JS Remotely/etc. options when reload_app's broadcast doesn't apply. Follow with tap_on_text or describe_ui to pick a menu item.

ParametersJSON Schema
NameRequiredDescriptionDefault
serialNoTarget device serial (adb -s). Optional when exactly one device is attached.

TDQS

A4.7/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden for behavioral disclosure. It clearly states the tool opens the dev menu via KEYCODE_MENU, implies it's reliable, and hints it may be non-destructive by mentioning follow-up inspection/selection rather than direct result. However, it could be slightly more explicit about whether it waits for the menu to appear or returns immediately.

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

Conciseness5/5

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

Two sentences, zero waste. Every sentence serves a purpose: the first states the action and reliability, the second gives follow-up guidance. No filler, perfectly front-loaded.

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

Completeness5/5

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

Given the tool's low complexity (1 optional param, no output schema), the description is complete. It explains what it does, when to use it, and what to do after. The sibling list contains many UI tools, and the description clarifies its unique role among them.

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 100%, so the schema already documents the `serial` parameter well. The description doesn't add parameter-specific details but does set broader context (target device from foreground app). Baseline 3, bumped to 4 because the description effectively compensates by contrasting with a sibling tool and explaining the tool's purpose, adding value beyond the schema's dry field description.

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

Purpose5/5

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

The description uses a specific verb+resource: 'Open the React Native dev menu (KEYCODE_MENU) on the foreground app', clearly differentiating it from sibling tools like `reload_app` or `launch_app`. It directly states what the tool does and unlike the sibling tools, it's tailored for a specific use case.

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?

The description explicitly tells when to use this tool ('the reliable way to reach a dev build's Reload/Debug JS Remotely/etc. options when reload_app's broadcast doesn't apply') and provides follow-up instructions ('Follow with tap_on_text or describe_ui to pick a menu item'), giving clear context on when it's appropriate vs alternatives.

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

open_urlA

Open a URL or deep link via an ACTION_VIEW intent (am start) — the way to jump straight to a deep-linked screen. Optionally target a specific package.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesURL or deep link to open (ACTION_VIEW).
serialNoTarget device serial (adb -s). Optional when exactly one device is attached.
packageNoOptional package to target the intent at.

TDQS

A3.7/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden for behavioral disclosure. It mentions launching via 'am start' and optionally targeting a package, which gives some insight into the underlying action. However, it does not disclose safety (e.g., whether this might launch external apps or change device state), nor any side effects like what happens if the URL is invalid or the deep link is not handled. For a tool that can launch arbitrary intents, more behavioral context would be warranted.

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

Conciseness5/5

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

The description is two sentences long, front-loaded with the main action. Every sentence adds value: the first states the core functionality and mechanism, the second clarifies optional targeting. No filler or redundant content.

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

Completeness3/5

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

Given the tool has 3 parameters (all covered by schema), no output schema, and moderate complexity (launching an intent), the description provides basic completeness. It explains the 'what' and 'how' but omits important context like whether it handles malformed URLs, what the return value indicates (success/failure), or prerequisite conditions (e.g., device must be connected). This is adequate but not thorough.

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

Parameters3/5

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

Schema description coverage is 100%—each parameter already has a description in the schema: url as 'URL or deep link to open', serial as 'Target device serial', package as 'Optional package to target the intent at.' The tool description adds no new detail beyond what is in the schema, such as syntax or formatting nuances. Since schema coverage is high, a baseline of 3 is appropriate.

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 uses a specific verb+resource combination, 'Open a URL or deep link via an ACTION_VIEW intent (am start) — the way to jump straight to a deep-linked screen.' It clearly states the tool opens URLs or deep links and mentions the underlying mechanism (ACTION_VIEW intent). While it doesn't explicitly distinguish itself from siblings among many other tools, its purpose is distinct enough given the sibling list includes no other URL-opening tools.

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

Usage Guidelines4/5

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

The description implies its usage context: 'the way to jump straight to a deep-linked screen' indicates when to use it (for deep links), and the optional package targeting provides some guidance. However, it lacks explicit exclusions or alternatives—for example, it doesn't say when NOT to use it (e.g., for opening a URL in a browser vs. a deep link). No sibling tool directly overlaps, so the lack of competition reduces the need for heavy guidance.

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

phone_callA

Drive an emulated voice call (adb emu gsm). action="call" (default) rings an incoming call from number; "accept"/"cancel"/"busy"/"hold" transition an in-progress call. Use to test call-interruption behaviour and CALL_PHONE flows. Emulator-only.

ParametersJSON Schema
NameRequiredDescriptionDefault
actionNoWhat to do: "call" (default — ring an incoming call), "accept", "cancel" (hang up), "busy", or "hold".
numberYesPhone number for the call, e.g. "+15551234567".
serialNoTarget device serial (adb -s). Optional when exactly one device is attached.

TDQS

A4.2/5.0
Behavior3/5

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

No annotations are provided, so the description carries full burden. It explains the actions and the emulator-only restriction, but does not disclose potential side effects, permission requirements, or error states when actions are used out of order. The information is adequate but not rich.

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 three sentences, front-loaded with the main action, and every sentence provides essential information. There is no fluff or redundancy.

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

Completeness4/5

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

Given the tool has 3 parameters, no output schema, and no annotations, the description covers the core behavior and the critical emulator-only constraint. It does not explain return values or error handling, but for a simple ADB command tool, this is sufficient. The optional serial parameter is not mentioned, but it is covered by the schema.

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

Parameters4/5

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

Schema coverage is 100%, baseline 3. The description adds value by explaining the effects of the action parameter ('rings an incoming call' vs 'transition an in-progress call'), which goes beyond the schema's list of options. This enhances understanding for the agent.

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

Purpose5/5

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

The description clearly states the tool drives an emulated voice call using adb emu gsm, and lists the specific actions (call, accept, cancel, busy, hold) with their effects. It is a unique verb+resource combination that distinguishes itself from siblings like send_sms or cellular.

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

Usage Guidelines4/5

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

The description includes explicit usage context: 'Use to test call-interruption behaviour and CALL_PHONE flows. Emulator-only.' This tells the agent when and where to use it. It does not explicitly state when not to use it or name alternatives, but the context is clear enough.

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

prefer_pinA

Try to move a standard BiometricPrompt to its PIN/password fallback by selecting an explicit system button, or sending BACK as the generic cancel path. App-controlled prompts may suppress or rename this option, so confirm the resulting PIN pad with describe_ui before calling enter_pin.

ParametersJSON Schema
NameRequiredDescriptionDefault
serialNoTarget device serial (adb -s). Optional when exactly one device is attached.

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden. It discloses that the tool 'tries' to move the prompt (implying possible failure), mentions two distinct mechanisms, and warns about app-controlled suppression. It advises a follow-up step. This is good behavioral context, though it could mention prerequisites or failure cases 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.

Conciseness5/5

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

The description is two sentences long, each earning its place. The first sentence states the primary action, the second gives crucial post-usage guidance. No filler or repetition. Efficient and front-loaded.

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

Completeness4/5

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

Given the lack of output schema and the tool's nature (a UI fallback action), the description is fairly complete. It explains what the tool does, warns about potential limitations, and tells the user the next steps (describe_ui then enter_pin). Could be strengthened by mentioning return behavior or side effects, but overall sufficient.

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

Parameters3/5

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

Schema description coverage is 100% for the single optional 'serial' parameter, with a clear description in the schema. The tool description adds no additional parameter semantics, so the baseline score of 3 is appropriate.

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

Purpose5/5

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

The description clearly states the tool's purpose: 'Try to move a standard BiometricPrompt to its PIN/password fallback.' It specifies the actions (selecting a system button or sending BACK) and the resource (BiometricPrompt). This distinguishes it from siblings like 'enter_pin' and 'describe_ui'.

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

Usage Guidelines4/5

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

The description provides context for when to use the tool and how to proceed after invocation: 'confirm the resulting PIN pad with describe_ui before calling enter_pin.' It warns that app-controlled prompts may suppress or rename the option. However, it does not explicitly state when not to use it or mention alternative tools for different scenarios.

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

press_keyA

Press a hardware/navigation key by name (enter, back, home, menu, tab, del, escape, up, down, left, right, dpad_center, app_switch, search, power, wakeup, sleep, volume_up, volume_down, ...) or a raw Android keycode number. Handy to submit a form (enter), dismiss the keyboard (escape), or go back (back). To turn the screen ON use wakeup (not power, which toggles and may sleep an awake screen); sleep turns it off. A key can be silently consumed with no effect (e.g. back while a biometric prompt is up) — pass verify_change=true to get ui_changed: true/false instead of guessing. Batching several presses (or a press whose timing matters relative to other actions) belongs in run_sequence, not in separate calls.

ParametersJSON Schema
NameRequiredDescriptionDefault
keyYesKey name (enter, back, home, menu, tab, del, escape, up, down, left, right, ...) or a raw keycode number.
serialNoTarget device serial (adb -s). Optional when exactly one device is attached.
verify_changeNoAlso report whether the UI hierarchy changed after the key press (ui_changed: true/false). Costs two extra hierarchy reads (~2-3s); use when the key may be silently consumed (e.g. back while a biometric prompt is up).

TDQS

A4.8/5.0
Behavior5/5

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

With no annotations, the description carries the full behavioral burden. It discloses that a key press can be silently consumed with no effect (e.g., back during a biometric prompt), that power toggles rather than simply turning on, and that verify_change adds two extra hierarchy reads. These are non-obvious behaviors an agent needs to know.

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 dense but well-organized: core action first, then examples, then caveats, then batching guidance. Every sentence contributes useful information, and there is no redundant repetition of 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?

It covers key names, behavioral caveats, alternative routing, and the verify_change option thoroughly. The only gap is that, with no output schema, the normal return value/immediate result of a press is not described, though verify_change's return is. This is minor relative to the tool's simplicity.

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 100%, so the baseline is 3. The description adds value by enumerating common key names, explaining wakeup vs power semantics, and clarifying the cost and purpose of verify_change. It does not add much about serial, but the schema already explains that clearly.

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

Purpose5/5

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

The description uses a specific verb ('press') with a precise resource ('hardware/navigation key' or 'raw Android keycode number') and gives concrete examples. It also distinguishes itself from related tools by explicitly pointing to run_sequence for batched actions and contrasting wakeup vs power.

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?

It provides direct when-to-use guidance: submit a form with enter, dismiss keyboard with escape, go back with back. It explicitly warns that power toggles and may sleep an awake screen, recommending wakeup instead, and says time-sensitive or batched presses belong in run_sequence, not separate calls.

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

pull_fileA

Copy a file off the device to a local path (adb pull) — e.g. retrieve a generated file, database, or screenshot.

ParametersJSON Schema
NameRequiredDescriptionDefault
serialNoTarget device serial (adb -s). Optional when exactly one device is attached.
local_pathYesLocal destination path.
device_pathYesFile path on the device to copy off.

TDQS

A3.6/5.0
Behavior2/5

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

No annotations are provided, so the description must carry the full burden. It states the basic operation (copy from device by adb pull) but does not disclose important behavioral traits: whether the local path is overwritten without warning, what happens if the device is disconnected or the file does not exist, or any required permissions. The description is too minimal to ensure safe agent behavior.

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

Conciseness5/5

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

The description is a single sentence plus an example, perfectly front-loaded with the key action. Every word earns its place; there is no fluff. It efficiently conveys the core functionality.

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 file copy tool with no output schema, the description covers the essential purpose and use cases. It could mention return values or error behavior, but the examples help ground the agent. It is not missing critical information, though a bit more detail on behavior would improve completeness.

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

Parameters3/5

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

Schema description coverage is 100%, so the parameters are already well-documented in the schema. The description adds only brief examples (e.g., 'retrieve a generated file, database, or screenshot') which provide some context but do not add significant new meaning beyond the schema. Baseline score of 3 is appropriate.

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

Purpose5/5

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

The description clearly states the action 'Copy a file off the device to a local path' and identifies the underlying adb command 'adb pull'. The examples (generated file, database, screenshot) further clarify the type of resources. This distinguishes it well from sibling tools like push_file (opposite direction) and screenshot (captures a screen image but not arbitrary files).

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

Usage Guidelines3/5

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

The description implies usage through examples but does not explicitly state when to use this tool versus alternatives like push_file. It lacks guidance on prerequisites (e.g., device must be connected) or when not to use it. The context is clear enough for a simple tool but not fully explicit.

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

push_fileA

Copy a local file onto the device (adb push) — e.g. seed test data or a file to import.

ParametersJSON Schema
NameRequiredDescriptionDefault
serialNoTarget device serial (adb -s). Optional when exactly one device is attached.
local_pathYesLocal file to copy onto the device.
device_pathYesDestination path on the device, e.g. /sdcard/Download/x.json.

TDQS

A3.5/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden. It only states the basic operation without revealing behavioral traits such as overwrite behavior, error handling, permissions, or side effects. This is insufficient for a write operation.

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

Conciseness5/5

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

The description is a single, efficient sentence that front-loads the purpose. Every word adds value, and there is no redundancy or unnecessary detail.

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

Completeness3/5

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

For a simple file copy tool, the description is adequate but incomplete. It lacks details on overwrite behavior, error conditions, and output. With no annotations or output schema, more context about the tool's behavior would be beneficial.

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

Parameters3/5

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

The input schema covers all 3 parameters with descriptions, achieving 100% coverage. The description adds minimal parameter-level context (e.g., use case example) but does not enhance understanding beyond what the schema provides.

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

Purpose5/5

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

The description clearly states the action ('Copy a local file onto the device (adb push)') and provides a concrete example ('seed test data or a file to import'). It distinguishes from the sibling tool 'pull_file' which does the opposite.

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

Usage Guidelines3/5

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

The description implies usage for pushing files to a device, but lacks explicit guidance on when to use this tool versus alternatives (e.g., 'pull_file' is not mentioned as the counterpart). No conditions or exclusions are stated.

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

reload_appA

Best-effort: trigger a Metro/JS reload on a React Native dev-client build via the classic .RELOAD_APP_ACTION broadcast. Only works on debug builds of classic (non-bridgeless) RN architectures that register the receiver — on newer RN/Expo dev clients it may silently no-op with no error. If the app doesn't visibly reload, use open_dev_menu then tap_on_text("Reload") instead. PREREQUISITE: the app must be able to reach Metro at all — run adb_reverse {device_port: 8081} first, or a reload lands you back on the EMBEDDED bundle and your edits still won't appear (app_state tells you which bundle the running process is actually serving).

ParametersJSON Schema
NameRequiredDescriptionDefault
serialNoTarget device serial (adb -s). Optional when exactly one device is attached.
packageYesApplication package name (e.g. com.example.app).

TDQS

A4.6/5.0
Behavior5/5

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

No annotations are provided, so the description bears full responsibility for behavioral disclosure. It honestly states 'best-effort', 'may silently no-op with no error', and details the exact conditions under which the tool works (debug builds, classic non-bridgeless architectures). This provides excellent transparency about limitations and failure modes.

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

Conciseness4/5

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

The description is front-loaded with the core purpose ('Best-effort: trigger a Metro/JS reload...') and then efficiently covers prerequisites, limitations, and alternatives. Every sentence adds value, though the prerequisites section is slightly lengthy. Still, it remains focused and avoids redundancy, earning a high score for conciseness.

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

Completeness5/5

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

Given the complexity of the tool (best-effort, silent failures, strict environment requirements) and the absence of an output schema, the description is remarkably complete. It covers prerequisites, failure modes, conditions for effectiveness, and fallback alternatives. No additional information is needed for an agent to use this tool correctly.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents both parameters adequately. The description does not add new semantic information about the parameters beyond what the schema provides (e.g., serial optional when one device, package format). Baseline score of 3 is appropriate as the description adds no extra value for parameter understanding.

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

Purpose5/5

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

The description clearly states the tool triggers a Metro/JS reload on React Native dev-client builds. It specifies the verb 'trigger', the resource 'Metro/JS reload', and the context 'RN dev-client build'. It also distinguishes from sibling tools like open_dev_menu and tap_on_text by providing alternative steps, making the purpose unambiguous.

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?

The description explicitly states when to use this tool ('debug builds of classic RN architectures') and when not to ('newer RN/Expo dev clients may silently no-op'). It provides a direct alternative ('use open_dev_menu then tap_on_text("Reload")') and a prerequisite ('run adb_reverse {device_port: 8081} first'), offering complete guidance on usage.

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

render_statsA

Count an app's REAL view tree and recent frame health: total views, render-node kB, per-window breakdown, jank percentage and frame-time percentiles, plus Choreographer's "Skipped N frames" tally. Use this — not describe_ui — to MEASURE a screen: describe_ui is viewport-scoped (Android drops off-screen ScrollView children from the accessibility tree), so it undercounts a long list even at filter="all". The three numbers together are what argues an unvirtualised list: a large view count, render-node kB that grows as you scroll, and skipped frames on the main thread. Pass reset=true to zero the frame counters after reading so the next call measures one specific interaction.

ParametersJSON Schema
NameRequiredDescriptionDefault
resetNoZero gfxinfo's frame counters after reading, so the NEXT call measures only what happens in between. Use it to attribute jank to one interaction instead of to the whole session.
serialNoTarget device serial (adb -s). Optional when exactly one device is attached.
packageYesApplication package name.

TDQS

A4.9/5.0
Behavior5/5

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

With no annotations, the description carries the transparency burden and meets it: it explains that the tool reads the real view tree, enumerates the exact metrics, and warns that reset=true zeros frame counters as a side effect. The behavioral contrast with describe_ui's viewport scoping is genuinely informative.

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 compact sentences, each with a distinct job: enumerate outputs, differentiate from sibling, explain reset. No filler, and the most decision-relevant guidance is front-loaded.

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?

Since there is no output schema, the description must state what the tool returns — it does, with a concrete metric list and an interpretive hint about what the three numbers together argue. It also covers the reset behavior, so an agent can invoke it correctly.

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 schema already documents all three parameters at 100% coverage, so the baseline is 3. The description adds value by restating reset=true's purpose ('so the next call measures one specific interaction') and tying it to jank attribution, which helps an agent decide when to set it. It doesn't add much for package/serial, but none is needed.

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

Purpose5/5

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

The description names a specific measurement operation with the metrics it returns (total views, render-node kB, jank percentage, frame-time percentiles, skipped frames), so an agent knows exactly what the tool provides. It also explicitly distinguishes itself from describe_ui, preventing sibling confusion.

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?

It states directly 'Use this — not describe_ui — to MEASURE a screen' and explains why describe_ui undercounts lists, giving a concrete decision rule. It also instructs when to pass reset=true, covering the main usage branch.

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

revoke_permissionA

Revoke a runtime permission from an app (pm revoke) — to test the denied path or re-trigger the permission-request dialog on next use. Pairs with grant_permission. Note: revoking some permissions kills the app process.

ParametersJSON Schema
NameRequiredDescriptionDefault
serialNoTarget device serial (adb -s). Optional when exactly one device is attached.
packageYesApplication package name.
permissionYesFull permission name, e.g. android.permission.CAMERA.

TDQS

A4.2/5.0
Behavior4/5

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

No annotations are provided, so the description carries the full burden. It discloses a critical behavioral trait: revoking some permissions kills the app process. It also explains the effect on the permission dialog. It does not mention prerequisites like ADB connection or root permissions, but the given info is valuable and actionable.

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

Conciseness5/5

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

Two sentences plus a note, front-loaded with the core action. Every sentence adds value: action+technical details, use case+pairing, and a behavioral caveat. No wasted words.

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

Completeness4/5

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

Given 3 fully described parameters, no output schema, and no annotations, the description covers purpose, usage context, and a key side effect. It lacks information about prerequisites (e.g., device must be debuggable, ADB authorization) and does not specify Android version compatibility. However, for a focused permission tool, it is largely 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 100% for all three parameters, so baseline 3 applies. The description does not add parameter-specific details beyond the schema; it references 'runtime permission' but does not elaborate on parameter constraints or examples. No improvement over schema.

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

Purpose5/5

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

The description clearly states the tool revokes a runtime permission using 'pm revoke' and specifies the exact use case: testing the denied path or re-triggering the permission dialog. It explicitly pairs with the sibling 'grant_permission', distinguishing itself.

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

Usage Guidelines4/5

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

Provides clear context: use when you need to test denied paths or re-trigger permission requests. Mentions pairing with grant_permission, implying sequential usage. Warns about process kills. Does not explicitly say when NOT to use or list alternatives, but the context is sufficient.

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

rotate_screenA

Rotate the emulator to its next orientation (adb emu rotate) — the quick way to exercise landscape/portrait layout and rotation-driven state loss. Emulator-only.

ParametersJSON Schema
NameRequiredDescriptionDefault
serialNoTarget device serial (adb -s). Optional when exactly one device is attached.

TDQS

A4/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It discloses the underlying command ('adb emu rotate') and the behavioral effect of rotation-driven state loss. However, it does not explain the exact rotation order (e.g., cycles through orientations) or whether it is a toggle, nor does it state if it is destructive or read-only. The description is adequate but lacks deeper behavioral context.

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

Conciseness5/5

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

The description is extremely concise: two sentences that front-load the primary action and immediately provide context. Every sentence adds value, and there is no redundant or unnecessary text.

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

Completeness4/5

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

Given the simple tool (one optional parameter, no output schema, no annotations), the description covers the essential aspects: purpose, underlying command, use case, and constraint. It does not specify return values (likely none) or timing, but these are not critical for such a straightforward action. The description is sufficiently complete for an agent to use the tool correctly.

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

Parameters3/5

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

Schema description coverage is 100% for the single parameter 'serial', which already has a clear description. The tool description adds no additional information about the parameter. With high coverage, the baseline is 3, and the description does not exceed it.

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

Purpose5/5

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

The description clearly states the verb 'rotate' and the resource 'emulator orientation', and it specifies the action as rotating to the next orientation. It also distinguishes the tool's purpose by mentioning it's 'the quick way to exercise landscape/portrait layout and rotation-driven state loss', which uniquely identifies it among the sibling tools.

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

Usage Guidelines4/5

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

The description provides context for when to use this tool: to exercise layout and state loss due to rotation. It explicitly states 'Emulator-only', which is a clear constraint. However, it does not mention alternatives or when not to use it, though no direct sibling tool exists for rotation, so the guidance is sufficient.

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

run_instrumented_testsA

Run Gradle instrumented (on-device) tests (default task 'connectedAndroidTest') in project_dir — requires a booted device/emulator. Returns per-suite timing and failing-test stack traces; pass json=true for a structured JSON summary instead of the text form.

ParametersJSON Schema
NameRequiredDescriptionDefault
argsNoExtra arguments passed to Gradle (e.g. --stacktrace, -Pflavor=free).
jsonNoFor run_unit_tests/run_instrumented_tests: return the test summary as structured JSON (per-suite timing, full failure stack traces) instead of the human-readable text summary. Ignored by gradle_build and list_gradle_tasks.
taskNoGradle task to run. Defaults to the tool's standard task.
project_dirNoPath to the Android project root containing the Gradle wrapper (gradlew). Optional if session_set_defaults has pinned a project_dir for this session.

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations provided, the description carries full burden. It discloses that a booted device/emulator is required, that it returns per-suite timing and failing-test stack traces, and that json=true changes output format. It does not mention whether the device must be an emulator or physical, or if there are side effects like app installation. Still, it is fairly transparent for a test runner.

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

Conciseness4/5

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

The description is a single sentence with a clarifying second sentence about json output. It is front-loaded and efficient, but the note about default task could be more explicit as 'default task connectedAndroidTest' is already in parentheses.

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

Completeness3/5

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

Given the tool has 4 parameters, no output schema, and no annotations, the description is adequate but not fully complete. It omits details like what happens if no device is available (error message?), whether it installs the app first, or the format of the text summary. For a complex test tool, more behavioral details would improve completeness.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all 4 parameters. The description adds no new meaning beyond the schema for parameters like args, project_dir, or task. For json, the description clarifies it is shared with run_unit_tests and ignored by gradle_build/list_gradle_tasks, adding value only for this one parameter. Baseline 3 is appropriate.

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

Purpose5/5

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

The description clearly states it runs Gradle instrumented (on-device) tests in a project_dir, specifies the default task 'connectedAndroidTest', and distinguishes from other test-running siblings like run_unit_tests by noting the need for a booted device/emulator.

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?

The description explicitly says it requires a booted device/emulator, which is critical context not obvious from the schema. It also hints at an alternative (json=true for structured output) and implicitly distinguishes from run_unit_tests via the device requirement. However, it does not explicitly state when not to use this tool versus build_and_run or gradle_build.

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

run_sequenceA

Run several interaction steps in ONE call — no agent round-trip between them. Use for scripted flows and, crucially, flows driven by NATIVE TIMERS (background-token clear, a biometric prompt that auto-fires on resume) where a round-trip per step would perturb the timing you're testing: e.g. key:home → sleep:19 → launch → sleep:9 → tap_text:Cancel (if_present:biometric) → assert_foreground(package) → describe_ui. Each step has an 'action' (sleep, tap, tap_text, tap_element, key, text, swipe, launch, stop, assert_foreground, wait_text, describe_ui) with its params; an if_present/if_absent guard skips a step unless a selector is (not) on screen — that's how you express a conditional cancel; and optional=true lets a step fail without aborting. Returns a per-step result (ok/skipped/error) with elapsed_ms plus the final hierarchy. A non-optional step error stops the rest.

ParametersJSON Schema
NameRequiredDescriptionDefault
stepsYesOrdered steps to run in one call. Each has an 'action' (sleep, tap, tap_text, tap_element, key, text, swipe, launch, stop, assert_foreground, wait_text, describe_ui) plus that action's params, and optional if_present/if_absent guards and an 'optional' flag. Results include elapsed_ms.
serialNoTarget device serial (adb -s). Optional when exactly one device is attached.
capture_finalNoAppend the settled UI hierarchy after the last step (unless the run aborted) so you see the end state in this same response. Default true.

TDQS

A4.6/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden. It discloses sequential execution, stop-on-error behavior for non-optional steps, per-step results (ok/skipped/error) with elapsed_ms, final hierarchy capture, and the default for capture_final. It does not mention concurrency or limitations, but for a sequence runner this is adequate.

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

Conciseness4/5

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

The description is a single paragraph but is front-loaded with the key purpose. It covers the core functionality, guards, optionality, and return format without redundancy. It could be slightly better structured (e.g., bulleted action list), but every sentence earns its place and there is no fluff.

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

Completeness5/5

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

Given no output schema, the description fills the gap by detailing return structure (per-step result, final hierarchy). All 3 parameters are explained adequately beyond the schema. Error behavior, guard semantics, and the default for capture_final are covered. The description is complete for an agent to use the tool effectively without additional context.

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?

All three parameters are already documented in the schema (100% coverage), so baseline is 3. The description adds significant value by explaining guards (if_present/if_absent), the optional flag, how results are structured, and the action type list with context. This additional guidance raises the score above baseline.

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

Purpose5/5

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

The description opens with 'Run several interaction steps in ONE call — no agent round-trip between them,' making the core purpose immediately clear. It then distinguishes itself from sibling tools (single-step actions like tap, wait) by emphasizing the batch execution and timing-critical use cases, with a concrete example.

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?

The description explicitly states when to use: 'for scripted flows and, crucially, flows driven by NATIVE TIMERS... where a round-trip per step would perturb the timing.' It also explains how conditional guards (if_present/if_absent) and optional flags work, providing clear guidance on handling conditional branches and step failures. The implication that for non-timing-critical single steps one would use sibling tools is clear.

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

run_unit_testsA

Run Gradle JVM unit tests (default task 'test') in project_dir and return the result summary, including per-suite timing and failing-test stack traces. Note that on an Android project 'test' runs EVERY variant's unit tests (debug and release both); pass task="testDebugUnitTest" (or ":app:testDebugUnitTest" in a multi-module build) to run just one and roughly halve the time. Pass json=true for a structured JSON summary instead of the text form.

ParametersJSON Schema
NameRequiredDescriptionDefault
argsNoExtra arguments passed to Gradle (e.g. --stacktrace, -Pflavor=free).
jsonNoFor run_unit_tests/run_instrumented_tests: return the test summary as structured JSON (per-suite timing, full failure stack traces) instead of the human-readable text summary. Ignored by gradle_build and list_gradle_tasks.
taskNoGradle task to run. Defaults to the tool's standard task.
project_dirNoPath to the Android project root containing the Gradle wrapper (gradlew). Optional if session_set_defaults has pinned a project_dir for this session.

TDQS

A4.2/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. It discloses the default task behavior, the fact that on Android it runs all variants, and the return format. However, it does not mention side effects (e.g., whether it modifies files), required permissions, or error behaviors, leaving some gaps.

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

Conciseness5/5

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

Two sentences: first defines the core purpose and output, second delivers key usage guidance and optional feature. Every word adds utility, no redundancy. Extremely efficient and front-loaded.

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 tool with no output schema, the description adequately describes return values (timing and stack traces, optional JSON). It covers all parameters with extra guidance and addresses the common Android variant scenario. Lacks mention of edge cases like missing gradle wrapper or no tests, but these are minor.

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

Parameters4/5

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

Schema coverage is 100%, establishing a baseline of 3. The description adds significant value by explaining the json parameter effect (structured JSON), providing Android-specific advice for the task parameter, and clarifying the args parameter as extra Gradle arguments. This goes well beyond the schema descriptions.

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

Purpose5/5

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

The description clearly states the action ('Run Gradle JVM unit tests'), the resource (default task 'test'), location (project_dir), and what is returned (summary with per-suite timing and failing-test stack traces). It distinguishes from siblings like run_instrumented_tests and gradle_build by specifying JVM unit tests.

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

Usage Guidelines4/5

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

The description provides explicit guidance on when to override the default task on Android projects for efficiency (e.g., task='testDebugUnitTest'), giving concrete examples. It implies appropriate contexts for use but does not explicitly contrast with siblings like gradle_build or run_instrumented_tests, leaving slight ambiguity.

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

scaffold_android_projectA

Create a minimal Kotlin Android application in a new empty directory, including Gradle Kotlin DSL files, an AndroidManifest, a launcher Activity, resources, README, and gitignore. The tool never overwrites a non-empty directory. It also generates the Gradle wrapper when a system gradle is on PATH, so the result is immediately buildable with gradle_build; if no gradle is installed the result says so, and gradle wrapper has to be run in that directory before any Gradle tool here will work (they all drive ./gradlew).

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesHuman-readable app name.
packageYesApplication id/package, e.g. com.example.app.
destinationYesEmpty or new directory to create the project in.

TDQS

A4.7/5.0
Behavior4/5

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

No annotations are provided, so the description carries full burden for behavioral disclosure. It clearly conveys that the tool writes a project structure (including wrapper generation, conditional on PATH), never overwrites non-empty dirs, and explains the dependency on `gradle_build`. Although it doesn't explicitly state that it's a write operation (non-read, potentially destructive), the 'never overwrites' phrasing implies safety for existing directories. A small gap is the lack of mention of cleanup or rollback if something fails, but overall it is thorough.

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

Conciseness5/5

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

The description is two dense, front-loaded sentences with zero wasted words. Every clause earns its place: the first lists deliverables, the second addresses overwrite behavior and Gradle wrapper conditions. It is efficiently structured.

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

Completeness5/5

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

Given the tool's moderate complexity (3 params, no nested objects, no output schema), the description fully covers what the tool does, its side effects, prerequisites (empty directory, optional gradle on PATH), and how it relates to sibling tools like `gradle_build`. There is no missing guidance for an agent to invoke it correctly.

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

Parameters4/5

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

The input schema already covers all three parameters with complete descriptions (100% coverage), so the description does not need to repeat them. The description adds context beyond the schema: it explains that `destination` must be empty/new, and implies `name` and `package` affect the generated content. This adds meaningful usage nuance.

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

Purpose5/5

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

The description states it creates a minimal Kotlin Android app in a new empty directory, listing specific outputs like Gradle Kotlin DSL, AndroidManifest, launcher Activity, resources, README, and gitignore. This is a specific verb+resource that clearly distinguishes it from siblings like `build_and_run` or `gradle_build`.

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?

The description explicitly says the tool never overwrites a non-empty directory, and provides clear context about when to use it vs alternatives: it generates the Gradle wrapper when `gradle` is on PATH for immediate buildability with `gradle_build`, and explains what happens if no gradle is installed. This gives the agent solid when/when-not guidance.

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

screenshotA

Capture the current screen as a PNG so you can SEE the UI state. Call it after every action to confirm the screen changed before acting again — driving blind chains taps onto the wrong screen. The image is auto-downscaled (default max 760px) so it is accepted by the image reader; this is for seeing only — derive tap coordinates from describe_ui, not from this image. Auto-retries an all-black frame (an intermittent capture glitch) and, if it stays black, says why (FLAG_SECURE content like a native PIN pad, or a sleeping display) — when black, use describe_ui instead. Works on multi-display foldables (the default display captures correctly); pass display="cover"/"inner"/an index to grab a specific panel.

ParametersJSON Schema
NameRequiredDescriptionDefault
serialNoTarget device serial (adb -s). Optional when exactly one device is attached.
displayNoWhich physical display to capture on a multi-display device (a foldable). Omit for the default/built-in screen. Accepts a name alias ('inner'/'primary' or 'cover'/'outer'), an HWC index ('0','1'), or a raw physical display id. Only needed to grab the NON-default panel — the default display already captures correctly without it.
max_dimNoMax width/height of the returned image in pixels. Omit for the default 760; pass 0 (or a negative) to disable downscaling and get the full-resolution image.

TDQS

A4.7/5.0
Behavior5/5

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

With no annotations, description discloses auto-downscaling, retry logic for black frames, handling of FLAG_SECURE and sleeping displays, and multi-display foldable support. No contradictions—fully transparent.

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?

Dense but efficient; each sentence adds value. Could be slightly more concise by merging some details, but front-loaded with core purpose and well-organized for a complex tool.

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?

Covers edge cases (black frames, multi-display), retries, and limitations (no coordinate derivation). Missing explicit output format (e.g., base64), but otherwise complete for a screenshot tool with optional parameters and no output schema.

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

Parameters4/5

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

Schema coverage is 100% with good parameter descriptions. The description adds context like default values for max_dim, alias usage for display, and when to omit serial, enriching the schema with practical usage hints.

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

Purpose5/5

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

The description clearly states the tool captures a PNG of the current screen to see UI state, using specific verbs and resource. It distinguishes from siblings like describe_ui by emphasizing it's for visual confirmation, not coordinate derivation.

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 tells when to use (after every action to confirm screen change) and when not to (when frame is black, use describe_ui instead). Provides alternative tool and explains consequence of driving blind.

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

send_smsA

Deliver an incoming SMS to the emulator (adb emu sms send) — the standard way to drive OTP / 2FA flows without a second phone. Pass a sender number (from) and the message text (e.g. the code). Emulator-only.

ParametersJSON Schema
NameRequiredDescriptionDefault
fromYesSender phone number the SMS appears to come from, e.g. "+15551234567".
textYesMessage body (e.g. an OTP code) delivered to the device's SMS inbox.
serialNoTarget device serial (adb -s). Optional when exactly one device is attached.

TDQS

A3.8/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden to disclose behavior. It reveals the low-level implementation ('adb emu sms send') and the emulator-only constraint, but does not clarify whether this is a destructive action (overwrites the last received SMS?), whether it requires any preconditions, or what happens if the emulator is not available. The description does not contradict any annotations because there are none.

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

Conciseness5/5

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

Two sentences, zero wasted tokens. Every sentence serves a purpose: first sentence states the operation and use-case, second sentence clarifies required parameters with an example. Ideal length for a simple tool.

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 2-required-param tool with no output schema, the description is mostly complete: it covers purpose, use-case, constraints (emulator-only), and required inputs. However, completeness is slightly limited by the lack of behavioral transparency around error cases or side-effects (e.g., what happens if the emulator is offline).

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

Parameters3/5

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

The schema description coverage is 100%, so the schema already documents all 3 parameters. The description mentions 'Pass a sender number (from) and the message text (e.g. the code)', which adds a typical usage example but does not add new constraints or semantics beyond what the schema provides. Baseline 3 is correct.

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

Purpose5/5

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

The description uses a specific verb ('Deliver an incoming SMS to the emulator (adb emu sms send)') and clearly identifies the resource and use-case (OTP/2FA flows). It distinguishes this from any sibling tool by calling out the emulator-only constraint.

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

Usage Guidelines4/5

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

The description explicitly identifies the primary use-case ('drive OTP / 2FA flows without a second phone') and notes the emulator-only limitation, which helps the agent decide when to use it. However, it does not describe when NOT to use it (e.g., physical devices) or suggest alternatives among siblings.

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

session_clear_defaultsA

Clear any project_dir/serial defaults pinned for this session, reverting to requiring them on every call (serial still falls back to the single-attached-device default).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.9/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden. It clearly explains the effect: clearing pinned defaults and reverting to requiring them on every call, with a fallback note for serial. This is transparent about the behavioral change and the specific fallback behavior, which is valuable beyond what a schema could convey.

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

Conciseness5/5

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

The description is a single sentence, front-loaded with the action and resource, and includes a clarifying parenthetical about serial fallback. Every part is essential and there is no wasted text. It is perfectly sized for the tool's simplicity.

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

Completeness4/5

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

Given the tool has no parameters, no output schema, and no annotations, the description fully explains what the tool does and its effect on session behavior. It is complete for this simple tool, though one could argue it could mention that it only affects the current session scope, but that is already implied.

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

Parameters4/5

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

The input schema has zero parameters, and schema description coverage is 100% (no params to describe). The description explains what the tool does without needing parameter details, which is appropriate. Since there are no parameters, the description adds value by clarifying the tool's effect, earning a higher score.

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

Purpose4/5

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

The description clearly states the tool reverts session-pinned defaults for project_dir and serial, causing them to be required on every call again. The verb 'clear' and the specific resources ('project_dir/serial defaults') give a precise purpose. It distinguishes itself from session_set_defaults and session_show_defaults among siblings.

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

Usage Guidelines3/5

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

The description implies this tool is used when you no longer want pinned defaults and want to require explicit parameters each time. However, it does not explicitly state when to use it versus when not to, nor does it name session_set_defaults or session_show_defaults as alternatives. The guidance is clear enough but lacks explicit context or exclusions.

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

session_set_defaultsA

Pin a default project_dir and/or serial for the rest of this session so later calls can omit them — the fix for a multi-module or multi-flavor project (or multiple attached devices) forcing you to repeat the same project_dir/serial on every Gradle or device call. Only the fields you pass are changed; omit a field to leave its current default alone. An explicit project_dir/serial on any individual call always overrides the session default for that one call.

ParametersJSON Schema
NameRequiredDescriptionDefault
serialNoDefault device serial to use whenever a tool call omits serial. Leave empty to leave the current default unchanged.
project_dirNoDefault Android project root to use whenever a tool call omits project_dir. Leave empty to leave the current default unchanged.

TDQS

A3.6/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It discloses key behaviors: only passed fields are changed, omitted fields retain their current default, and explicit parameters override session defaults. It does not mention reversibility (can be undone via session_clear_defaults), potential side effects, or whether defaults persist across session resets. This leaves some behavioral uncertainty.

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

Conciseness4/5

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

The description is three sentences: purpose, use case, and override behavior. It is front-loaded and well-structured. Each sentence adds value without redundancy. Minor opportunity to tighten, but overall efficient.

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

Completeness4/5

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

Given the tool's simplicity (2 optional params, no output schema), the description covers purpose, usage context, partial update behavior, and interaction with explicit parameters. It does not explain return values, but that is acceptable. A mention of session_clear_defaults for reversing would improve completeness, but the current text is largely sufficient.

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

Parameters3/5

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

Schema coverage is 100%, with both parameters described. The description adds context ('Only the fields you pass are changed; omit a field to leave its current default alone') but largely echoes the schema description ('Leave empty to leave the current default unchanged'). It adds marginal value beyond the schema, warranting a baseline 3.

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

Purpose4/5

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

The description clearly states the tool's purpose: pinning default values for project_dir and/or serial for the session. It uses specific verbs ('Pin', 'set defaults') and identifies the resource (session defaults). However, it does not explicitly differentiate from sibling tools like session_clear_defaults or session_show_defaults, which would strengthen clarity.

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

Usage Guidelines4/5

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

The description provides context on when to use the tool: 'the fix for a multi-module or multi-flavor project (or multiple attached devices) forcing you to repeat the same project_dir/serial on every Gradle or device call.' It also explains how explicit parameters override session defaults. However, it lacks explicit 'when not to use' guidance or mentions of alternative tools (e.g., prefer_pin might relate but isn't addressed).

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

session_show_defaultsA

Show the project_dir/serial defaults currently pinned for this session (set via session_set_defaults).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden. It discloses the tool is a read operation (no side effects), but doesn't mention whether defaults are session-scoped or what happens if no defaults are set. The description is adequate for a straightforward query tool.

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

Conciseness5/5

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

The description is a single sentence, perfectly focused, and front-loads the purpose. Every word adds value, with no redundancy or unnecessary detail.

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

Completeness4/5

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

Given 0 parameters, no output schema, and no annotations, the tool is simple. The description clarifies the source of defaults (session_set_defaults), which is complete enough for selecting this tool among 77 siblings.

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 100%, but with 0 parameters, the schema is inherently complete. The description doesn't list parameters (none needed), so it adds no parameter info, but the baseline for 0-param tools is 4 as no compensation is required.

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

Purpose5/5

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

The description uses the specific verb 'show' paired with the resource 'project_dir/serial defaults pinned for this session', clearly distinguishing it from sibling tools like session_set_defaults and session_clear_defaults. It precisely identifies what the tool returns (pinned defaults).

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

Usage Guidelines4/5

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

The description explicitly clarifies that defaults are those set via session_set_defaults, which implies a complementary relationship to that sibling. It doesn't state when not to use it or provide explicit exclusions, but the context makes usage clear.

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

set_batteryA

Set the battery level (0-100) and/or charging state — test low-battery UI and charging-only logic deterministically. On an emulator it uses the console (adb emu power); on a PHYSICAL device it forces the values via dumpsys battery, which persist until you call this again with reset=true (or the device reboots). Provide level, charging, or both — or reset=true to restore automatic reporting. (For a fake battery in a clean SCREENSHOT status bar only, use set_status_bar instead.)

ParametersJSON Schema
NameRequiredDescriptionDefault
levelNoBattery charge level 0-100. Omit to leave the level unchanged.
resetNoRestore automatic battery reporting (dumpsys battery reset) and ignore level/charging. On a physical device the forced values persist until this (or a reboot); use it to clean up after testing.
serialNoTarget device serial (adb -s). Optional when exactly one device is attached.
chargingNotrue = plugged into AC, false = on battery. Omit to leave the charging state unchanged.

TDQS

A4.7/5.0
Behavior5/5

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

No annotations provided, so description carries full burden. It discloses implementation differences (emulator vs physical device), that values persist until reset or reboot, and behavior of reset=true. No contradictions.

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 well-structured sentences, front-loaded with the primary purpose. Every sentence adds necessary information without redundancy. No wasted words.

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

Completeness5/5

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

Given the lack of annotations and output schema, the description is complete: covers use cases, device behavior differences, persistence, reset usage, and explicitly mentions an alternative tool. Leaves no critical 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 100%. Description adds context by summarizing parameter roles (level, charging, reset, serial) but does not provide additional meaning beyond the schema descriptions. Baseline 3 is appropriate.

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

Purpose5/5

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

The description clearly states the tool sets battery level and charging state for testing low-battery UI and charging logic, distinguishing itself from set_status_bar (which only fakes battery in status bar). It specifies exact verb and resource.

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 tells when to use (testing low-battery and charging behavior) and when not (for fake battery in clean status bar, prefer set_status_bar). Also explains persistence on physical devices and use of reset=true.

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

set_dark_modeA

Turn the system dark theme on or off (cmd uimode night) — to test light/dark appearances.

ParametersJSON Schema
NameRequiredDescriptionDefault
serialNoTarget device serial (adb -s). Optional when exactly one device is attached.
enabledYestrue = dark theme on, false = off.

TDQS

A4/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden of disclosing behavior. It clearly states the tool turns dark theme on/off ('true = dark theme on, false = off'), which implies a low-risk UI toggle. However, it does not mention whether a device reset or app restart is needed for the change to take effect, or if there are side effects. With no annotations, a 3 is appropriate as the basic behavior is clear but lacks depth.

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

Conciseness5/5

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

Single, front-loaded sentence that immediately states the action and purpose. The parenthetical includes a helpful internal command reference without bloating. Every word serves a purpose; no redundancy given the simple tool.

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

Completeness4/5

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

The tool is a simple toggle with 2 params and no output schema or nested objects. The description fully covers the action and context (testing appearances). Minor gap: absent mention of return value or confirmation, but for a boolean toggle tool, this is acceptable. Sibling tools like set_battery have similar simplicity and would benefit from a similar level of detail.

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 100%, meaning both parameters (serial, enabled) are already documented in the schema. The description adds value by clarifying the overarching purpose (testing appearances) and referencing the underlying command, but does not add new meaning for individual parameters beyond the schema. Baseline 3 is appropriate; plus 1 for the useful context (cmd uimode night) that aids parameter understanding.

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

Purpose5/5

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

Description uses specific verb 'Turn' and resource 'system dark theme', immediately clarifying the on/off function. It distinguishes from sibling tools like set_battery, set_sensor, set_status_bar which set other system properties, and references the internal command 'cmd uimode night' for full precision.

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?

Description states the tool is for toggling dark theme on/off and mentions testing light/dark appearances, which implies a development/testing use case. However, it provides no explicit guidance on when not to use it, no alternatives, and no prerequisites (e.g., device must support dark theme).

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

set_device_lockA

Set a secure lock screen (type: pin [default], pattern, or password). REQUIRED before AndroidKeyStore / Keystore-backed crypto flows, which fail with 'A secure lock screen is required' on a fresh emulator that has no lock. Follow with is_device_secure to confirm.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeNoLock type: pin (default), pattern, or password.
valueYesCredential to set, e.g. "1234".
serialNoTarget device serial (adb -s). Optional when exactly one device is attached.
old_valueNoThe CURRENT credential, required only when a lock is already set and you want to change it (locksettings refuses to overwrite otherwise).

TDQS

A4.2/5.0
Behavior4/5

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

No annotations provided, so description carries full burden. Discloses failure mode for fresh emulators and the condition for old_value. Lacks explicit mention of side effects such as device lock screen change requiring credential for subsequent operations.

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

Conciseness5/5

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

Two efficient sentences with no redundancy. Front-loaded with the action, then adds critical usage context. Every sentence earns its place.

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

Completeness4/5

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

Given no output schema and missing annotations, description covers purpose, prerequisite, and follow-up. However, it does not hint at return value or result of setting lock, slightly incomplete.

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

Parameters3/5

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

Schema description coverage is 100% and schema already describes all parameters well. Description adds context about Keystore necessity but does not significantly augment parameter understanding beyond the schema.

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

Purpose5/5

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

The description clearly states 'Set a secure lock screen' with specific lock types (pin, pattern, password) and explains its necessity for Keystore flows, distinguishing it from siblings like clear_device_lock and is_device_secure.

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

Usage Guidelines4/5

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

Explicitly states when it is required ('REQUIRED before AndroidKeyStore / Keystore-backed crypto flows') and recommends a follow-up action ('Follow with is_device_secure to confirm'). It does not contrast with alternatives like clear_device_lock, but the usage context is strong.

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

set_locationB

Set the emulator's mock GPS location (longitude, latitude) — for location-gated features.

ParametersJSON Schema
NameRequiredDescriptionDefault
serialNoTarget device serial (adb -s). Optional when exactly one device is attached.
latitudeYesLatitude of the mock GPS fix.
longitudeYesLongitude of the mock GPS fix.

TDQS

B3.3/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It implies a mutation (setting mock location) but doesn't describe side effects (e.g., replaces any existing mock location, persists across app restarts? Returns no confirmation?). Adequate for a simple mutation but missing potential failure modes (invalid lat/lon, emulator not running).

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

Conciseness5/5

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

The description is a single, concise sentence that front-loads the essential purpose and scope. Every word earns its place. It uses meaningful dashes and conveys the key differentiator (location-gated features) efficiently.

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

Completeness3/5

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

Given simple parameters, no output schema, and mutation operation, the description is mostly complete. However, it lacks mention of return value (e.g., nothing returned or success status) and prerequisites (emulator must be booted, GPS enabled). These are minor gaps for an experienced agent but still incomplete.

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

Parameters3/5

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

Schema coverage is 100% and includes descriptions for all three parameters. The description adds no additional semantics beyond the schema—e.g., no range hints for lat/lon, no format specification. With full schema coverage, baseline is 3, which is appropriate as the description does not enrich understanding.

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

Purpose4/5

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

The description clearly states the tool sets the emulator's mock GPS location with longitude and latitude parameters. It specifically targets 'location-gated features', which gives actionable context for the agent. However, it could better distinguish from location-related siblings like set_sensor, which also touches location settings.

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

Usage Guidelines2/5

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

The description does not specify when to use this tool versus alternatives (e.g., set_sensor may also modify location). It lacks conditions like 'use when testing location-based features' or warnings about required permissions. No guidance on when not to use or fallback options.

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

set_sensorA

Set an emulated hardware sensor value (adb emu sensor set) — drive accelerometer/gyroscope/orientation (pass x, y, z) or a single-value sensor like light/proximity/temperature/pressure/humidity (pass x only). Use to exercise shake/tilt/rotation handlers or ambient-light/proximity logic. Emulator-only.

ParametersJSON Schema
NameRequiredDescriptionDefault
xYesFirst value (the only value for single-axis sensors like light/proximity).
yNoSecond value for multi-axis sensors. Omit for single-value sensors.
zNoThird value for multi-axis sensors. Omit for single-value sensors.
sensorYesSensor name, e.g. acceleration, gyroscope, magnetic-field, orientation (3 values) or light, proximity, temperature, pressure, humidity (1 value).
serialNoTarget device serial (adb -s). Optional when exactly one device is attached.

TDQS

A4/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It discloses that the tool is emulator-only and explains parameter usage for different sensor types. However, it does not mention error conditions, permission requirements, or what happens if the sensor name is invalid or the emulator is not running. Basic transparency is present but not exhaustive.

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 sentences efficiently convey the core action, usage context, and parameter semantics. No extraneous information. Could be slightly improved by separating the parameter explanation into a clearer structure, but overall it is appropriately concise.

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

Completeness3/5

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

For a tool with 5 parameters, no output schema, and no annotations, the description covers purpose, usage, and parameter semantics. However, it lacks mention of prerequisites (emulator must be running and booted, sensor must exist), how the serial parameter is used, and what the return value or error behavior is. Adequate but with noticeable gaps.

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 100%, so baseline is 3. The description adds significant value by explaining the dual usage pattern: multi-axis sensors use x, y, z; single-value sensors use x only. It also provides concrete sensor examples (acceleration, gyroscope, light, proximity) that clarify the parameter schema beyond its individual descriptions.

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

Purpose5/5

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

Description uses specific verb 'Set' and resource 'emulated hardware sensor value', references the underlying adb command, and distinguishes between multi-axis and single-value sensors. It clearly differentiates from sibling tools like set_battery or set_location which are not sensor-setting tools.

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

Usage Guidelines4/5

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

Explicitly states when to use: 'exercise shake/tilt/rotation handlers or ambient-light/proximity logic'. Does not provide when-not-to-use or alternatives, but the sibling list lacks similar tools, so exclusion is not needed. Emulator-only constraint is clear.

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

set_status_barA

Pin a clean status bar via SystemUI demo mode (enabled=true) — fixed clock, chosen signal/battery, no notification icons by default — so screenshots for docs don't leak the wall clock or a random signal state. Optionally set clock (HHMM), battery (0-100), network_type (wifi/mobile/none) with mobile_level/data_type/carrier for mobile, and notifications_visible/notification_icon. Call with enabled=false to restore the live bar.

ParametersJSON Schema
NameRequiredDescriptionDefault
clockNoFixed clock as 4 digits HHMM, e.g. "1200". Only when enabled=true; omit to leave unchanged.
serialNoTarget device serial (adb -s). Optional when exactly one device is attached.
batteryNoFixed battery level 0-100 (shown unplugged). Only when enabled=true; omit to leave unchanged.
carrierNoCarrier/operator name shown in the status bar. Only used when network_type=mobile.
enabledYestrue = enter demo mode (clean, fixed status bar); false = exit and restore the live status bar.
data_typeNoMobile data-type icon shown next to the signal, e.g. lte, 4g, 5g, 3g, edge, 1x, h, h+, roam. Only used when network_type=mobile.
mobile_levelNoMobile signal bars 0-4. Only used when network_type=mobile. Default 4.
network_typeNoNetwork icon: "wifi" (default, full signal), "mobile", or "none" (hide network icons). Only when enabled=true.
notification_iconNoBest-effort: an AOSP SystemUI icon resource name to show in the first notification slot. Support varies by SystemUI/Android version. Only when enabled=true.
notifications_visibleNoShow notification icons in the status bar. Default false (hidden, for clean screenshots). Only when enabled=true.

TDQS

A4.4/5.0
Behavior4/5

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

The description discloses key behavioral traits: it uses SystemUI demo mode, sets fixed clock and battery, hides notification icons by default, and notes 'best-effort' for notification icon support. Since no annotations are provided, the description carries the full burden and does so well, though it could mention that changes are immediately visible or persistent behavior after tool completion.

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, well-structured paragraph of three sentences. Every sentence adds distinct value: purpose and primary behavior, optional parameter guidance, and restoration call. No redundancy or filler.

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

Completeness4/5

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

Given 10 parameters, no output schema, and no annotations, the description comprehensively covers the tool's purpose, behavior, and parameter guidelines. However, it could explicitly state the return value (e.g., success/failure) or side effects (e.g., device UI changes instantly), but the context is sufficient for an agent to use the tool correctly.

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 100%, so the baseline is 3. The description adds value beyond the schema by grouping parameters conceptually (e.g., 'battery as 0-100 (shown unplugged)' gives context not in the schema) and explaining the high-level behavior (no notification icons by default). This justifies a 4.

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

Purpose5/5

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

The description clearly states the tool pins a clean status bar via SystemUI demo mode for screenshot documentation. It specifies the verb 'pin', the resource 'status bar (via SystemUI demo mode)', and the purpose 'so screenshots for docs don't leak the wall clock or a random signal state', which differentiates it from other device-setting tools.

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

Usage Guidelines4/5

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

The description explains when to use the tool (for clean screenshots) and explicitly mentions how to restore ('Call with enabled=false to restore the live bar'). However, it does not provide explicit alternatives or when-not-to-use guidance, though the sibling tools are diverse and none appear to serve the same purpose, so the lack of exclusions is acceptable.

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

shutdown_emulatorA

Power off a running emulator (adb emu kill). Use when you are done with a device you booted.

ParametersJSON Schema
NameRequiredDescriptionDefault
serialNoTarget device serial (adb -s). Optional when exactly one device is attached.

TDQS

A4/5.0
Behavior3/5

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

No annotations are present, so the description carries the full burden. It reveals that the operation is a forceful 'adb emu kill', but does not disclose side effects (e.g., state saving, unsaved data loss) or expected response behavior. Some useful context is provided but more would be beneficial for a destructive action.

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

Conciseness5/5

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

Two short sentences, front-loaded with the action and purpose. No wasted words; every sentence adds value.

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

Completeness4/5

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

The tool is simple (one optional param, no output schema) and the description covers what it does and when to use it. However, given there are no annotations, a bit more about the impact of killing an emulator (e.g., losing unsaved state) would improve completeness.

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

Parameters3/5

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

Schema description coverage is 100%, so the serial parameter is fully documented in the schema. The description does not add parameter-specific info, but the schema already explains when serial is optional. Baseline 3 is appropriate.

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

Purpose5/5

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

The description explicitly states 'Power off a running emulator' with the underlying adb command in parentheses, making the action unambiguous. It clearly distinguishes from sibling tools like boot_emulator and stop_app.

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

Usage Guidelines4/5

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

Provides clear usage context: 'Use when you are done with a device you booted.' This implies ownership and timing, but doesn't explicitly contrast with other shutdown-like tools, though none are direct competitors.

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

start_logcat_captureA

Begin streaming logcat into a buffer for this device (optionally clearing first). Pair with stop_logcat_capture to get everything logged DURING a flow — use this instead of the one-shot 'logcat' when you need logs across an interaction.

ParametersJSON Schema
NameRequiredDescriptionDefault
clearNoClear the logcat buffer before capturing. Default true.
serialNoTarget device serial (adb -s). Optional when exactly one device is attached.

TDQS

A4/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden. It discloses that it begins streaming and optionally clears the buffer, but does not cover side effects (e.g., behavior if already streaming, buffer size, or concurrency). The pairing note helps but leaves some behavioral aspects implicit.

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

Conciseness5/5

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

The description is two sentences with no wasted words. The first sentence states the action, the second provides usage guidance and contrast. Every sentence earns its place.

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 tool with two optional parameters, no output schema, and clear sibling context, the description is largely complete. It explains the workflow and alternative. Minor gaps (e.g., default behavior if no clear param, multiple calls) are acceptable given the tool's simplicity.

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

Parameters3/5

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

Schema coverage is 100%, so both parameters are fully described in the schema. The description adds 'optionally clearing first' which reinforces the clear parameter, but does not add new meaning beyond the schema descriptions. Baseline 3 is appropriate.

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

Purpose5/5

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

The description clearly states the action: 'Begin streaming logcat into a buffer'. It specifies the device and optional clearing, and distinguishes it from the one-shot 'logcat' tool by name, with explicit guidance on when to use it.

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

Usage Guidelines4/5

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

The description explicitly tells the agent to use this instead of the one-shot 'logcat' for logs across an interaction and pairs it with stop_logcat_capture. It does not explicitly list when not to use it, but the alternative is clearly named, providing strong context.

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

start_screen_recordA

Start recording the screen to an mp4 on the device (Android caps a single recording at ~180s). Pair with stop_screen_record.

ParametersJSON Schema
NameRequiredDescriptionDefault
serialNoTarget device serial (adb -s). Optional when exactly one device is attached.

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden and does reveal important behavioral traits: it records to an mp4, the recording auto-caps at ~180s, and it is meant to be paired with a stop command. This goes beyond a simple 'starts recording' and gives non-obvious constraints, though it stops short of detailing every side effect (e.g., storage, permissions, behavior if already recording, output location).

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

Conciseness5/5

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

The description is two concise sentences: the first states the action and output, the second adds a critical constraint and pairing instruction. Every word adds value—no filler, and the most important information (what it does) is front-loaded.

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 tool with a single optional parameter and no output schema, the description is reasonably complete. It covers the core action, output format, system limitation, and the necessary companion tool. Minor omissions (e.g., where the file is saved, behavior if a recording is already active) could be added, but the essential context for correct invocation is present.

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

Parameters3/5

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

The single parameter 'serial' has 100% schema description coverage with a clear explanation: 'Target device serial (adb -s). Optional when exactly one device is attached.' The tool description itself adds no parameter-level information, but since the schema already provides full coverage, the baseline score of 3 applies.

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

Purpose5/5

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

The description uses a specific verb ('Start recording') and resource ('screen to an mp4 on the device'), clearly distinguishing this tool from the sibling 'screenshot' (still image) and other capture tools. It also includes a concrete output format and a key constraint (Android ~180s cap), leaving no ambiguity about the tool's function.

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

Usage Guidelines4/5

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

The description provides clear context for usage: it starts a screen recording and explicitly instructs to pair with 'stop_screen_record' for termination. It also mentions the Android time limit, which serves as a usage boundary. While it does not explicitly list alternatives or exclusions, the pairing and format guidance effectively distinguish it from related tools.

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

stay_awakeA

Keep the display from dozing during a driving session (svc power stayon true) — the fix when screenshots keep coming back black with screen_off:true because the device sleeps between steps (common on emulators with a short timeout). enabled=true holds the screen on while charging (emulators always are); enabled=false restores the normal timeout. describe_ui works regardless, but any screenshot/coordinate flow needs the screen on.

ParametersJSON Schema
NameRequiredDescriptionDefault
serialNoTarget device serial (adb -s). Optional when exactly one device is attached.
enabledYestrue = keep the screen on while charging (svc power stayon true); false = restore the normal display timeout.

TDQS

A4.5/5.0
Behavior5/5

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

With no annotations provided, the description fully carries the behavioral transparency burden. It discloses that enabled=true holds screen on while charging (emulators always are), enabled=false restores normal timeout, and that describe_ui works regardless but screenshot/coordinate flows need screen on. No behavioral surprises.

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 dense sentences with zero waste. First sentence states purpose and motivation in a memorable 'fix when' pattern, second explains the two states, third clarifies edge case (describe_ui unaffected). Perfectly front-loaded.

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

Completeness5/5

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

Given two simple parameters (one boolean, one optional string), no output schema, and no annotations, the description is completely sufficient. It explains why you need it, what it does in each state, and which sibling tools are unaffected. No gaps remain.

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

Parameters3/5

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

Schema coverage is 100%, so baseline is 3. The description adds context around the enabled parameter (explaining what true/false does in terms of svc power stayon and timeout restoration) and the serial parameter is self-explanatory from schema. No additional nuance beyond schema, so score remains at baseline.

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

Purpose5/5

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

Description clearly states the tool keeps the display awake during a driving session, links to black screenshots and device sleep, and distinguishes between enabled=true and enabled=false behaviors. The phrase 'the fix when screenshots keep coming back black' provides concrete motivation, and 'describe_ui works regardless' clarifies scope.

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

Usage Guidelines4/5

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

Explicitly states when to use this tool (when screenshots return black with screen_off:true, device sleeps between steps, common on emulators with short timeout). No explicit alternatives or when-not-to-use are mentioned, but the description implies it's needed for any screenshot/coordinate flow that requires screen on.

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

stop_appA

Force-stop an app by package name. Pair with launch_app to reset an app to a clean start when reproducing a bug.

ParametersJSON Schema
NameRequiredDescriptionDefault
serialNoTarget device serial (adb -s). Optional when exactly one device is attached.
packageYesApplication package name (e.g. com.example.app).

TDQS

A4/5.0
Behavior3/5

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

With no annotations provided, the description must fully disclose behavior. 'Force-stop' implies abrupt termination, but it doesn't clarify consequences like unsaved data loss, required permissions, or what happens if the app isn't running. It is adequate but could be more explicit.

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

Conciseness5/5

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

The description is extremely concise: two sentences, no unnecessary words. The first sentence states the core purpose, the second adds a practical usage hint. Every sentence earns its place.

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

Completeness4/5

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

Given the tool's simplicity, good schema, and no output schema requirement, the description is sufficiently complete. It covers the primary action and a key usage scenario. Minor gap: it doesn't mention that this is Android-specific, but the sibling tools make that clear.

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

Parameters3/5

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

Schema description coverage is 100% with clear descriptions for both parameters (serial and package). The description adds no additional semantic value beyond restating 'by package name'. Baseline 3 is appropriate since schema already handles the meaning.

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

Purpose5/5

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

The description clearly states the action (Force-stop) and resource (app) with a specific verb. It distinguishes from siblings like clear_app_data or uninstall_app by mentioning pairing with launch_app for resetting.

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

Usage Guidelines4/5

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

The description explicitly suggests pairing with launch_app 'when reproducing a bug', giving a concrete use case. However, it doesn't mention when not to use this tool (e.g., for apps that should remain running) or alternative tools for graceful shutdown.

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

stop_logcat_captureA

Stop the running logcat capture and return what was collected since start, optionally filtered by a case-insensitive substring, a minimum priority (V/D/I/W/E/F), and/or tags (OR'd). Output is capped to the last 500 lines by default (override with tail) so a long capture doesn't blow the token budget — narrow with the filters first.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagsNoKeep only lines whose log tag contains one of these (case-insensitive, OR'd).
tailNoKeep only the last N lines after filtering (the most recent, where a crash usually is). Default 500; pass a larger number for more, or a huge one to effectively disable the cap.
filterNoCase-insensitive substring to keep.
redactNoMask common secrets (token, password, authorization, api key, secret) before returning captured lines.
serialNoTarget device serial (adb -s). Optional when exactly one device is attached.
priorityNoMinimum priority to keep: V, D, I, W, E, or F.

TDQS

A3.9/5.0
Behavior3/5

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

No annotations exist, so the description carries full burden. It discloses output capping (500 lines default, tail override), filtering behavior (case-insensitive, OR'd tags, priority levels), and redaction of secrets. However, it does not explain what happens if no capture is running, error handling, or the exact return format.

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, well-structured sentence that front-loads the core purpose and then efficiently enumerates filtering options, output capping, and best practice advice. Every clause adds value without redundancy.

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

Completeness3/5

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

The tool has no output schema, so the description must clarify the return. It mentions 'lines' but not whether output is a string or array, and does not detail the lifecycle with start_logcat_capture. Sibling relationships are not addressed. The description is sufficient for basic use but leaves gaps in full operational context.

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

Parameters4/5

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

Schema coverage is 100%, baseline 3. The description adds meaningful context: explains tail's utility for crash debugging, lists priority letters, specifies redacted secrets, clarifies serial's optionality, and describes tag matching as OR'd. This exceeds the schema's own descriptions.

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

Purpose5/5

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

The description clearly states the tool stops a running logcat capture and returns collected output, with options for filters. It distinguishes from siblings like start_logcat_capture and logcat by specifying the 'stop and collect' action.

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

Usage Guidelines3/5

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

The description implies usage after a call to start_logcat_capture but does not explicitly state prerequisites or when not to use. It offers a tip to narrow filters first, but lacks a clear context of lifecycle or alternatives.

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

stop_screen_recordA

Stop the screen recording, finalize the mp4, and pull it to a local path.

ParametersJSON Schema
NameRequiredDescriptionDefault
serialNoTarget device serial (adb -s). Optional when exactly one device is attached.
local_pathYesLocal path to save the pulled mp4, e.g. /tmp/rec.mp4.

TDQS

A3.5/5.0
Behavior3/5

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

The description reveals that the tool not only stops recording but also finalizes the mp4 and pulls it to a local path, which is useful behavioral context beyond a simple 'stop' command. However, with no annotations provided, the description carries full burden. It does not disclose whether the recording is deleted from the device, what happens if no recording is active, or if the operation is idempotent.

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

Conciseness5/5

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

The description is a single sentence of 15 words, efficiently conveying the three-step process. It is front-loaded with the action and contains no extraneous 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?

For a tool with two parameters and a straightforward operation, the description covers the main actions. However, it lacks details about error conditions (e.g., no active recording), return value (no output schema), and behavior when the local path already exists. While acceptable for a simple tool, it could be more 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 100%, so the input schema already documents both parameters and their meanings. The description adds no additional semantics beyond what the schema provides; it only echoes the purpose of 'local_path' (saving the pulled mp4). Baseline 3 is appropriate since the schema does the heavy lifting.

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

Purpose5/5

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

The description clearly states the specific actions: stop the screen recording, finalize the mp4, and pull it to a local path. It uses a specific verb-resource combination ('stop screen recording') and distinguishes itself from sibling tools like 'start_screen_record' and 'pull_file' by describing the complete workflow.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool, when not to use it, or alternatives. While it is complementary to 'start_screen_record', there is no explicit mention of prerequisites (e.g., an active recording must exist) or when to use other tools like 'pull_file' instead.

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

swipeA

Swipe/drag from a start point to an end point. Params: x1,y1 (start) and x2,y2 (end) in true device pixels — x and y are accepted aliases for x1 and y1. To SCROLL DOWN a list, swipe from a HIGH y to a LOW y (drag the content up); reverse to scroll up. A longer duration_ms gives a slower, controlled drag; a short one flings.

ParametersJSON Schema
NameRequiredDescriptionDefault
xNoAlias for x1 (start X).
yNoAlias for y1 (start Y).
x1NoStart X in true device pixels (alias: x).
x2YesEnd X in true device pixels.
y1NoStart Y in true device pixels (alias: y).
y2YesEnd Y in true device pixels.
serialNoTarget device serial (adb -s). Optional when exactly one device is attached.
duration_msNoSwipe duration in ms. Default 300.

TDQS

A3.6/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden. It discloses the coordinate system, alias parameters, and swipe duration effect. However, it does not mention what happens on failure, out-of-bounds coordinates, or whether the tool provides any return value or feedback.

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 sentences that are well-structured: the first states the core action, the second details parameters and aliases, and the third gives key usage advice. Every sentence adds value with no redundancy or 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?

The description covers the core functionality, parameter meanings, and usage hints. Given the tool has 8 parameters and no output schema, it adequately prepares an agent for basic use. However, it lacks information about return behavior, error handling, or preconditions (e.g., device connectivity), which reduces completeness.

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

Parameters4/5

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

Schema coverage is 100%, but the description adds value beyond the schema by explaining the alias convention (x,y for x1,y1) and providing practical context for scrolling direction and duration behavior. This helps the agent understand parameter semantics more intuitively.

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

Purpose4/5

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

The description clearly states the tool performs a swipe/drag gesture from a start to an end point using device pixels. However, it does not differentiate from the sibling 'drag' tool, which may have similar functionality.

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 provides specific usage guidance for scrolling (high y to low y for scroll down) and explains the effect of duration on speed. However, it lacks explicit comparisons to alternatives like 'drag' or 'tap', and does not state when not to use this tool.

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

tapA

Tap a single coordinate in true device pixels. Use a center value from describe_ui. If a tap seems to do nothing, the coordinate is almost always stale/misscaled — re-run describe_ui and use a fresh center. Prefer tap_on_text when you know the element's label. When a tap lands but nothing happens, pass identify=true (reports which element the coordinate hit — or that it hit a non-clickable wrapper / no reported element) and/or verify_change=true (reports whether the UI actually changed) to tell the failure modes apart. Note: some native views (e.g. Compose/RN NativeTabs bars) don't respond to coordinate taps at all — use tap_on_text/tap_element with via_accessibility=true there (EXPERIMENTAL, requires adb-mcp bridge install once per device).

ParametersJSON Schema
NameRequiredDescriptionDefault
xYesX coordinate in true device pixels.
yYesY coordinate in true device pixels.
serialNoTarget device serial (adb -s). Optional when exactly one device is attached.
identifyNoAlso report which UI element the coordinate lands in (a hit test against the hierarchy read just before tapping). Use when a tap seems to do nothing: it tells you whether the coordinate hit the element you expected, a non-clickable wrapper, or no reported element at all (an unseen overlay). Costs one extra hierarchy read.
verify_changeNoAlso report whether the UI hierarchy changed after the tap (ui_changed: true/false). Costs two extra hierarchy reads (~2-3s); use when a tap silently doing nothing would send you down the wrong path.

TDQS

A4.7/5.0
Behavior5/5

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

Without any annotations, the description fully covers behavioral traits: it warns that stale coordinates cause silent failures, explains that some native views ignore coordinate taps entirely, details the side effects of passing 'identify' and 'verify_change' (extra hierarchy reads, time cost, and diagnostic value), and notes that 'verify_change=true' costs '~2-3s'. This is exceptionally thorough.

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 description packs a lot of valuable information, but it is somewhat long (several sentences) and could be more tightly organized. While every sentence earns its place, the structure feels a bit stream-of-consciousness rather than logically front-loaded. Still informative, but could be more concise.

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

Completeness5/5

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

Given the tool's context (5 params, 0 annotations, 0 output schema), the description is remarkably complete: it explains what the tool does, how to use it, when to avoid it, failure modes, and diagnostic flags. No missing critical information for an agent to use this tool effectively.

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 100%, so baseline is 3. The description adds significant value by explaining the purpose of 'identify' and 'verify_change' in troubleshooting scenarios (e.g., 'it tells you whether the coordinate hit the element you expected, a non-clickable wrapper, or no reported element at all'), which goes beyond the schema's terse descriptions. It doesn't add much for x, y, and serial, but the value added for the optional booleans warrants a 4.

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

Purpose5/5

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

The description clearly states 'Tap a single coordinate in true device pixels', specifying the verb 'tap' and the resource 'coordinate'. It distinguishes itself from siblings like 'tap_on_text' and 'tap_element' by explicitly recommending them when label or element is known, and from 'drag' which uses coordinates differently.

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?

The description provides explicit guidance on when to use alternatives: 'Prefer tap_on_text when you know the element's label.' It also advises when to avoid this tool for native views that don't respond to coordinate taps, directing to 'tap_on_text/tap_element with via_accessibility=true'. It tells users what to do if a tap seems to do nothing: re-run describe_ui and use fresh coordinates.

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

tap_elementA

Find an element by resource_id and tap its center — the id-addressed sibling of tap_on_text, for elements with no visible label. Runs describe_ui internally (filter=all, so even unlabeled wrapper nodes are findable) and re-resolves the element right before tapping, narrowing the window where a stale coordinate lands on an overlay (e.g. an Expo dev-menu bubble) the a11y tree never reported. Use exact match (partial=false) to avoid hitting the wrong item when ids overlap; verify_change reports whether the tap had any visible effect. If a coordinate tap lands but nothing happens (e.g. a Compose/RN NativeTabs bar), pass via_accessibility=true to dispatch a real accessibility click instead (EXPERIMENTAL — see that param's description).

ParametersJSON Schema
NameRequiredDescriptionDefault
serialNoTarget device serial (adb -s). Optional when exactly one device is attached.
partialNoSubstring match instead of exact. Default true.
resource_idYesResource id to find and tap, e.g. "com.example.app:id/submit_button" or just "submit_button" (matches by substring by default).
verify_changeNoAlso report whether the UI hierarchy changed after the tap (ui_changed: true/false). Costs two extra hierarchy reads (~2-3s); use when a tap silently doing nothing would send you down the wrong path.
via_accessibilityNoEXPERIMENTAL. Dispatch a real accessibility click (AccessibilityNodeInfo.performAction(ACTION_CLICK)) through the adb-mcp accessibility bridge instead of a coordinate tap — reaches native views (Compose/RN NativeTabs bars, some overlays) that ignore input tap entirely. Requires the bridge installed once per device: run "adb-mcp bridge install" on the host first, or this returns a clear error telling you to. Default false (coordinate tap).

TDQS

A4.8/5.0
Behavior5/5

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

With no annotations provided, the description carries full responsibility and delivers comprehensive behavioral details: it internally runs describe_ui with filter=all to find even hidden nodes, re-resolves the element to avoid stale coordinates landing on overlays, warns about unreported overlay windows, and explains the experimental nature of the accessibility click fallback. No contradictions with annotations (none present).

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 tightly written: it opens with a clear purpose, then each subsequent sentence adds distinct operational context without redundancy. Despite its length, every sentence earns its place—unlike many verbose descriptions, this one packs only essential information in a logical flow.

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

Completeness4/5

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

Given the tool's five parameters, lack of output schema, and no annotations, the description covers nearly every aspect: purpose, usage guidelines, internal behavior, parameter semantics, and error conditions. The only minor gap is the lack of an explicit description of the return value, though the mention of verify_change hints at its presence. This is a high bar, and the description comes very close to complete.

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

Parameters4/5

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

Schema coverage is 100% with each parameter described, meeting the baseline of 3. The description adds value by contextualizing parameter choices, such as recommending exact match to avoid ambiguous clicks and explaining when to use verify_change or via_accessibility, going beyond the schema's basic type and description.

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

Purpose5/5

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

The first sentence clearly states the action: 'Find an element by resource_id and tap its center'. It distinguishes itself from the sibling 'tap_on_text' by explicitly noting it is for elements with no visible label, providing immediate context on when this tool is appropriate.

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?

The description provides explicit guidance on when to use exact vs partial match ('Use exact match (partial=false) to avoid hitting the wrong item when ids overlap'), explains the purpose of 'verify_change' to detect silent failures, and advises using 'via_accessibility' when coordinate taps fail on certain native views. It also mentions the prerequisite of installing the adb-mcp bridge, leaving no ambiguity about usage.

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

tap_on_textA

Find an element by its visible text or content-description and tap its center — the one-shot way to press a labelled button/row without computing coordinates yourself. Runs describe_ui internally and prefers a clickable match. Matching folds typographic punctuation to ASCII, so a typed "Don't allow" finds the system dialog's "Don’t allow" (U+2019) and an en/em dash matches a hyphen. Use exact match (partial=false) to avoid hitting the wrong item when labels overlap. If a coordinate tap lands but nothing happens (e.g. a Compose/RN NativeTabs bar), pass via_accessibility=true to dispatch a real accessibility click instead (EXPERIMENTAL — see that param's description).

ParametersJSON Schema
NameRequiredDescriptionDefault
textYesText or content-description to find.
serialNoTarget device serial (adb -s). Optional when exactly one device is attached.
partialNoSubstring match instead of exact. Default true.
verify_changeNoAlso report whether the UI hierarchy changed after the tap (ui_changed: true/false). Costs two extra hierarchy reads (~2-3s); use when a tap silently doing nothing would send you down the wrong path.
via_accessibilityNoEXPERIMENTAL. Dispatch a real accessibility click (AccessibilityNodeInfo.performAction(ACTION_CLICK)) through the adb-mcp accessibility bridge instead of a coordinate tap — reaches native views (Compose/RN NativeTabs bars, some overlays) that ignore input tap entirely. Requires the bridge installed once per device: run "adb-mcp bridge install" on the host first, or this returns a clear error telling you to. Default false (coordinate tap).

TDQS

A4.6/5.0
Behavior5/5

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

With no annotations provided, the description carries the full behavioral burden and reveals substantial non-obvious behavior: it runs describe_ui internally, prefers a clickable match, normalizes typographic punctuation to ASCII, defaults to a coordinate tap, and can switch to a real accessibility click requiring a one-time bridge install. This goes well beyond what the schema alone would convey.

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 front-loaded with the core purpose and each subsequent sentence adds a distinct, valuable behavior or condition: internal describe_ui usage, punctuation normalization, exact-match guidance, and the accessibility fallback. There is no filler or redundant restating of the tool name.

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 5-parameter tool with no annotations and no output schema, the description covers selection criteria, matching semantics, and a failure-recovery path very thoroughly. It does not explicitly describe return values or no-match error behavior, but that is a minor gap given the otherwise complete operational guidance.

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

Parameters4/5

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

Schema coverage is already 100%, so the baseline is 3. The description adds meaning beyond the schema by explaining the punctuation-folding behavior for text matching and by giving the specific scenario where partial=false matters. via_accessibility is also contextualized with a concrete failure case, while serial and verify_change are adequately left to their schema descriptions.

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 exactly what the tool does: find an element by visible text or content-description and tap its center. It calls itself 'the one-shot way' to press a labelled button or row without computing coordinates, which clearly distinguishes it from coordinate-based taps and related sibling tools like tap.

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 clear, actionable guidance: use partial=false when labels overlap to avoid hitting the wrong item, and use via_accessibility=true when a coordinate tap lands but nothing happens. It does not explicitly enumerate when to prefer sibling tools like tap_element, but the coordinate-tap contrast and fallback conditions make the intended usage context clear.

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

uninstall_appA

Uninstall an app by package name (adb uninstall). Use to remove a build before a clean install, or to verify first-run behavior after reinstalling. To keep the app but reset it, prefer clear_app_data.

ParametersJSON Schema
NameRequiredDescriptionDefault
serialNoTarget device serial (adb -s). Optional when exactly one device is attached.
packageYesApplication package name (e.g. com.example.app).

TDQS

A4.3/5.0
Behavior3/5

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

Since no annotations are provided, the description carries full burden for behavioral disclosure. It states that the tool removes an app (destructive operation) and names the alternative for non-destructive reset. However, it does not disclose potential side effects (e.g., whether user data is removed, whether the deletion is irreversible, or any permission/authentication requirements), which would be useful for an agent deciding to invoke a destructive tool.

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

Conciseness5/5

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

The description is three sentences long, all substantive. The first sentence states the action and mechanism. The second explains use cases. The third provides an exclusion rule. No wasted words or redundant content. Front-loaded with the core action.

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

Completeness3/5

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

Given the tool is a simple deletion operation with 2 parameters (100% schema coverage) and no output schema, the description covers purpose, use cases, and an alternative tool. However, it lacks any mention of return values or success/failure indicators, and for a destructive operation, the absence of behavioral notes about data persistence or authorization (e.g., does the app need to be debuggable?) makes it slightly less complete than ideal.

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

Parameters4/5

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

Schema coverage is 100% (both parameters have descriptions in the schema), so the baseline is 3. The description adds value by implying the context for 'serial' (adb -s, optional when one device) beyond the schema's 'Target device serial' and gives a concrete example for 'package' (com.example.app) that reinforces the schema's generic description. This justifies a 4.

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

Purpose5/5

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

The description uses a specific verb ('uninstall') and resource ('app by package name'), and explicitly cites the underlying mechanism ('adb uninstall'). It immediately distinguishes from siblings like clear_app_data, stop_app, and install_app by naming use cases (clean install, first-run verification) and an alternative tool (clear_app_data).

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?

The description provides explicit guidance on when to use this tool (remove a build before clean install, verify first-run behavior) and when not to use it ('To keep the app but reset it, prefer clear_app_data'). This directly differentiates from the sibling tool clear_app_data, giving the agent clear decision criteria.

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

waitA

Sleep for a number of seconds (fractions ok, capped at 300), then return. For TIME-based conditions where wait_for_text's polling doesn't apply: backgrounding an app long enough to trip a native auth timer, waiting out a cooldown or rate limit, letting a long animation finish. If the sleep sits BETWEEN actions whose timing you are testing, put the whole flow in run_sequence instead — an agent round-trip per step perturbs native timers.

ParametersJSON Schema
NameRequiredDescriptionDefault
secondsYesHow long to wait, in seconds. Fractions allowed; capped at 300.

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations, the description carries the behavioral burden, and it does well by disclosing fractional seconds, the 300-second cap, the blocking 'sleep then return' behavior, and the subtle warning that agent round-trips perturb native timers. It does not explicitly state that the operation has no side effects, but for a sleep tool this is fairly self-evident.

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

Conciseness5/5

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

Two sentences with the core behavior front-loaded, followed by concrete use cases and a clear alternative. Every clause earns its place, and there is no redundant filler or boilerplate.

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 single-parameter tool with full schema coverage, the description is complete: it explains behavior, constraints, appropriate use cases, and the preferred alternative for timing-sensitive sequences. No critical information an agent needs to call this tool correctly is missing.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already fully documents the `seconds` parameter. The description repeats 'fractions ok; capped at 300' but adds no new parameter-level meaning beyond what the schema provides, earning the baseline score.

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

Purpose5/5

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

The description states a specific action ('Sleep for a number of seconds'), the resource (seconds), and the outcome ('then return'). It actively distinguishes itself from wait_for_text by explaining that it covers TIME-based conditions where polling does not apply, and from run_sequence for timing-critical flows.

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?

The description gives explicit when-to-use scenarios: backgrounding an app to trip native auth timers, waiting out cooldowns/rate limits, and letting long animations finish. It also gives an explicit when-not-to-use instruction by redirecting inter-step timing-sensitive sleeps to run_sequence.

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

wait_for_bootA

Block until a device finishes booting (sys.boot_completed=1). Only needed if you started an emulator elsewhere; boot_emulator already waits by default.

ParametersJSON Schema
NameRequiredDescriptionDefault
serialNoTarget device serial (adb -s). Optional when exactly one device is attached.
timeout_sNoTimeout in seconds. Default 120.

TDQS

A4.4/5.0
Behavior4/5

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

No annotations provided, so the description carries full burden. It discloses blocking behavior and the boot completion condition. However, it does not mention whether the operation is safe/non-destructive or what happens on timeout, which are reasonable expectations given no annotations.

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

Conciseness5/5

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

Extremely concise: two sentences with no wasted words. Front-loaded with the core purpose, then usage guidance.

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

Completeness4/5

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

Given the low complexity (2 optional params, no output schema), the description covers the essential purpose and usage context. It lacks detail on timeout behavior or failure conditions, which would be needed for full completeness, but it is largely sufficient for a simple blocking tool.

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

Parameters3/5

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

Schema coverage is 100% and already describes both parameters well. The description adds no additional meaning beyond what the schema provides, so baseline 3 is appropriate.

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

Purpose5/5

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

Clearly states it blocks until a device finishes booting with a specific condition (sys.boot_completed=1). Distinguishes itself from the sibling boot_emulator, which already waits by default.

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 tells when to use ('only needed if you started an emulator elsewhere') and when not to (boot_emulator already waits). Names the alternative tool directly.

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

wait_for_textA

Poll the UI until an element with the given text/content-description appears (or times out), then return it. Use this after an async action (network load, navigation, animation) instead of a blind wait-then-screenshot — it returns as soon as the element is present, with its tappable center. Note: canvas-drawn (RN/Skia) text never enters the hierarchy, so it will time out on those — screenshot instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYesText or content-description to wait for.
scrollNoWhen true, swipe upward through the current scroll container while polling. Useful when Android omits off-screen ScrollView content from the accessibility tree.
serialNoTarget device serial (adb -s). Optional when exactly one device is attached.
partialNoSubstring match instead of exact. Default true.
timeout_sNoHow long to wait, in seconds. Default 15.

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, description carries full burden. Discloses polling behavior, timeout, and return of element with tappable center. Covers edge case of canvas-drawn text timing out. Lacks explicit mention of side effects (e.g., scrolling when scroll=true) or error behavior on timeout, but transparency is good overall.

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

Conciseness5/5

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

Two sentences, front-loaded with core functionality, then usage guidance and caveat. No filler, every sentence adds value.

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?

Covers core behavior, usage context, and a critical caveat. Does not explain timeout error handling or return format, but given 100% schema coverage and no output schema, the description is sufficient for an agent to use the tool correctly in most scenarios.

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

Parameters3/5

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

Schema coverage is 100%, so baseline is 3. Description does not add extra meaning beyond schema; it mentions 'tappable center' but that pertains to return value, not parameters. No additional param context like format or edge cases.

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

Purpose5/5

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

Clearly states it polls the UI until an element with given text appears or times out, then returns it. Distinguishes from siblings like 'wait' (blind wait) and 'tap_on_text' (tap action). Mentions canvas-drawn text will time out, setting scope.

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 advises use after async actions (network, navigation, animation) as an alternative to blind wait-then-screenshot. Also clearly states when NOT to use (canvas-drawn text) and recommends 'screenshot instead', providing an actionable alternative.

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. Dates show when Glama detected each change.

  1. 3 tool updatesv0.23.0
    • Changedapp_state1 field changed
      • changedInput schema / properties / source_path / description
        Previous value: -"Optional host file or directory containing the app's source. When supplied, app_state compares its newest mtime with the latest Metro/HMR marker to flag stale JavaScript."New value: +"Optional host file or directory containing the app's source. When supplied, app_state ALWAYS returns a stale_verdict (stale | current | undetermined) with the reason — it compares the newest source mtime against the latest Metro/HMR marker, and checks that the dev server the app is connected to is rooted in this same checkout."
    • Changeddescribe_ui1 field changed
      • changedInput schema / properties / filter / description
        Previous value: -"What to include: 'auto' (default — elements with text, content_desc, resource_id, or clickable; identical-bounds label-less wrappers dropped), 'clickable' (tap targets only, the smallest view), or 'all' (every bounded node, unfiltered — use to PROVE an element is absent from the hierarchy)."New value: +"What to include: 'auto' (default — elements with text, content_desc, resource_id, or clickable; identical-bounds label-less wrappers dropped), 'clickable' (tap targets only, the smallest view), or 'all' (every bounded node, unfiltered — use to PROVE an element is absent from the CURRENT VIEWPORT). 'all' is still viewport-scoped: Android omits off-screen ScrollView children from the accessibility tree, so scroll before concluding absence, and use render_stats (not this) to count a long list."
    • Addedrender_stats
  2. 78 tool updatesv1.0.0
    • First observedadb_reverse
    • First observedapp_state
    • First observedavd_snapshot
    • First observedboot_emulator
    • First observedbuild_and_run
    • First observedcellular
    • First observedclear_app_data
    • First observedclear_device_lock
    • First observedclear_logcat
    • First observedconnect_wireless
    • First observeddescribe_ui
    • First observeddoctor
    • First observeddrag
    • First observedenter_pin
    • First observedfinger_remove
    • First observedfingerprint_touch
    • First observedget_app_details
    • First observedget_coverage_report
    • First observedget_file_coverage
    • First observedgradle_build
    • First observedgradle_project_properties
    • First observedgrant_permission
    • First observedhas_biometric_enrolled
    • First observedinput_key_combo
    • First observedinput_text
    • First observedinstall_app
    • First observedis_device_secure
    • First observedlast_crash
    • First observedlaunch_app
    • First observedlaunch_dev_client
    • First observedlist_avds
    • First observedlist_devices
    • First observedlist_gradle_projects
    • First observedlist_gradle_tasks
    • First observedlist_gradle_variants
    • First observedlist_packages
    • First observedlogcat
    • First observedlong_press
    • First observedopen_dev_menu
    • First observedopen_url
    • First observedphone_call
    • First observedprefer_pin
    • First observedpress_key
    • First observedpull_file
    • First observedpush_file
    • First observedreload_app
    • First observedrevoke_permission
    • First observedrotate_screen
    • First observedrun_instrumented_tests
    • First observedrun_sequence
    • First observedrun_unit_tests
    • First observedscaffold_android_project
    • First observedscreenshot
    • First observedsend_sms
    • First observedsession_clear_defaults
    • First observedsession_set_defaults
    • First observedsession_show_defaults
    • First observedset_battery
    • First observedset_dark_mode
    • First observedset_device_lock
    • First observedset_location
    • First observedset_sensor
    • First observedset_status_bar
    • First observedshutdown_emulator
    • First observedstart_logcat_capture
    • First observedstart_screen_record
    • First observedstay_awake
    • First observedstop_app
    • First observedstop_logcat_capture
    • First observedstop_screen_record
    • First observedswipe
    • First observedtap
    • First observedtap_element
    • First observedtap_on_text
    • First observeduninstall_app
    • First observedwait
    • First observedwait_for_boot
    • First observedwait_for_text

TDQS

A3.7/5.0
Disambiguation4/5

Tools generally have distinct purposes (e.g., tap vs tap_on_text vs tap_element vs long_press are all clearly differentiated by their descriptions). The only minor overlap is between stop_screen_record and start_screen_record (obviously paired) and between the various Gradle-related tools, which are well-scoped by their specific functions. No serious ambiguity.

Naming Consistency3/5

Most tools follow a verb_noun pattern (e.g., boot_emulator, install_app, grant_permission), but there are deviations like 'has_biometric_enrolled' (which could be 'check_biometric_enrolled') and 'prefer_pin' (which is a combo action). A few tool names like 'doctor' and 'cellular' are nouns rather than verbs. The naming is mostly consistent but has notable outliers.

Tool Count2/5

With 78 tools, the surface is very large and likely exceeds what most agents can efficiently navigate. While the server covers a comprehensive ADB/Android development workflow, the number of tools is heavy and could benefit from consolidation (e.g., merging some tap variants or grouping Gradle utilities). Many developers will find it overwhelming.

Completeness5/5

The tool set is remarkably complete for Android development and testing: it covers device management (boot, shutdown, list devices), build and install (Gradle tasks, APK install/uninstall), UI interaction (various tap, swipe, text input, describe_ui), testing (unit, instrumented, coverage), networking (adb reverse, connect_wireless), emulator control (sensors, battery, phone, SMS), and debugging (logcat, crash capture, screen recording). There are no obvious gaps for standard development workflows.

Maintenance

ActivityActive
ResponsivenessResponsive

Related MCP Connectors

Related MCP Servers

  • F
    license
    A
    quality
    C
    maintenance
    Enables AI agents to interact with Android devices through UI manipulation, screen capture, touch gestures, text input, and app management via ADB. Provides comprehensive mobile automation capabilities including element detection, navigation, and application control for Android device testing and interaction.
    9
    4
    -
  • A
    license
    C
    quality
    C
    maintenance
    Enables comprehensive control of Android devices via ADB for Flutter development, UI testing, and visual QA workflows. Provides 60+ tools for device management, UI inspection, app testing, performance profiling, and debugging through natural language.
    77
    MIT
  • A
    license
    B
    quality
    B
    maintenance
    Enables AI agents to control Android devices and emulators through direct UI interaction, allowing app navigation, automated testing, and real-world task execution via ADB without computer vision or scripts.
    18
    2
    MIT

Latest Blog Posts

MCP directory API

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

curl -X GET 'https://glama.ai/api/mcp/v1/servers/iksnerd/adb-mcp'

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