Skip to main content
Glama

DeepADB

Build npm License Official MCP Registry

MCP (Model Context Protocol) server for AI agents that need to inspect, control, test, and diagnose Android devices through ADB—or directly on-device through Termux.

209 tools, 5 resources, and 4 prompts across 49 modules—from UI automation and application management to logs, network capture, baseband, firmware, security, and hardware diagnostics.

Get started

DeepADB runs as a local MCP server. It uses ADB on a host computer and automatically switches to direct execution when running on Android (detected through /system/build.prop).

git clone https://github.com/fullread/DeepADB.git
cd DeepADB
npm ci
npm run build
npm start

Add build/index.js to your MCP client configuration, then begin with these workflows:

Goal

Start with

Confirm the toolchain and connected device

adb_health_check, then adb_devices

Inspect the current Android UI

adb_screen_state, then adb_ui_dump

Diagnose a device or app

adb_device_info, adb_logcat, and adb_dumpsys

For a guided local connection, see MCP Client Configuration. Read SECURITY.md before exposing HTTP, WebSocket, or GraphQL transports beyond loopback.

Using llama.cpp or another local model? See Local LLM clients for direct stdio, authenticated browser HTTP, and small tool profiles. WebSocket is not required.

Related MCP server: android-mcp-server

Architecture

┌──────────────────────────────────────────────────┐
│                   MCP Client                     │
│             (Any MCP-capable client)             │
└──────────────────────┬───────────────────────────┘
                       │ stdio (JSON-RPC), HTTP (/mcp or /sse), or WebSocket
┌──────────────────────▼───────────────────────────┐
│               DeepADB Server                     │
│                                                  │
│  ┌─────────────────────────────────────────────┐ │
│  │           Tool Modules (49)                 │ │
│  │  device │ shell │ packages │ files │ logs   │ │
│  │  diagnostics │ ui │ build │ health          │ │
│  │  wireless │ control │ logcat-watch          │ │
│  │  forwarding │ screen-record │ emulator      │ │
│  │  testing │ multi-device │ snapshot          │ │
│  │  network-capture │ ci │ plugins │ baseband  │ │
│  │  accessibility │ regression                 │ │
│  │  device-farm │ registry │ at-commands       │ │
│  │  screenshot-diff │ workflow │ sensors       │ │
│  │  split-apk │ mirroring │ test-gen           │ │
│  │  ota-monitor │ ril-intercept                │ │
│  │  device-profiles │ firmware-analysis        │ │
│  │  workflow-market │ selinux-audit            │ │
│  │  thermal-power │ network-discovery          │ │
│  │  input-gestures │ wireless-firmware         │ │
│  │  app-network │ database-inspector           │ │
│  │  runtime-audit │ wear                       │ │
│  ├─────────────────────────────────────────────┤ │
│  │  Resources (5) │ Prompts (4)                │ │
│  └───────────────────┬─────────────────────────┘ │
│                      │                           │
│  ┌───────────────────▼─────────────────────────┐ │
│  │          ToolContext (unified DI)           │ │
│  │  server │ bridge │ deviceManager            │ │
│  │  logger │ security │ config                 │ │
│  └───────────────────┬─────────────────────────┘ │
│                      │                           │
│  ┌───────────────────▼─────────────────────────┐ │
│  │           Middleware Layer                  │ │
│  │  OutputProcessor │ SecurityMiddleware       │ │
│  │  InputSanitizer │ Logger (stderr-safe)      │ │
│  └───────────────────┬─────────────────────────┘ │
│                      │                           │
│  ┌───────────────────▼─────────────────────────┐ │
│  │         Bridge Layer (auto-detect)          │ │
│  │                                             │ │
│  │  ┌─────────────┐    ┌────────────────────┐  │ │
│  │  │  ADB Bridge  │ OR │  Local Bridge      │ │ │
│  │  │  (PC mode)   │    │  (on-device mode)  │ │ │
│  │  │  via adb.exe │    │  via sh/su direct  │ │ │
│  │  └──────┬───────┘    └────────┬───────────┘ │ │
│  │         │                     │             │ │
│  │  Retry │ Timeout │ Cache │ Serial routing   │ │
│  └─────────┼─────────────────────┼─────────────┘ │
└────────────┼─────────────────────┼───────────────┘
             │                     │
     ┌───────▼───────┐    ┌───────▼───────┐
     │  ADB Binary   │    │   sh / su     │
     │  (USB/WiFi)   │    │   (local)     │
     └───────┬───────┘    └───────┬───────┘
             │                    │
       ┌─────▼────────────────────▼─────┐
       │          Android Device        │
       └────────────────────────────────┘

Dual-Mode Architecture

DeepADB operates in two modes, auto-detected at startup:

ADB Mode (default) — PC-side bridge

AI Agent (PC) ←→ MCP ←→ DeepADB (PC) ←→ ADB (USB) ←→ Android Device

Standard mode: DeepADB runs on a PC/Mac/Linux host and communicates with the device over USB via ADB. The complete 209-tool surface is registered through the ADB bridge with automatic retry on transient failures; environment-specific tools report their capability requirements when a host cannot run them.

On-Device Mode — direct local execution

AI Agent (Termux) ←→ MCP (stdio/HTTP) ←→ DeepADB (Termux) ←→ sh/su (local)

When DeepADB runs directly on the Android device (e.g., inside Termux), it auto-detects the environment and switches to LocalBridge. Commands execute directly via sh/su — no ADB server, no USB, no serialization overhead. The same 209-tool MCP surface is registered, with capability-aware guidance when an optional on-device binary such as sqlite3 is unavailable.

1.1.6 device validation (November 1, 2026): the released build's full on-device run passed 836 checks, 0 failed, 3 skipped (839 total) across all 24 suites on the rooted Pixel 6a / Android 16, using Termux Node 24.22.1 and SQLite 3.54.1. The three skips reuse the cached Alpine kernel, initrd and disk; the actual VM boot and shutdown checks passed. Coverage includes the 28 runtime-audit regressions, device SQLite, live Shannon AT/OK, client/plugin compatibility, POSIX security cases and PIN-based UI recovery. The production installation passed eight strict checks before and after promotion, plus eight real Chromium checks and six authenticated WebSocket/GraphQL checks. Following the final documentation audit and verified redeployment, 1.1.6 is the only DeepADB installation retained on the validation Pixel; older installations and rollback copies were removed at the operator's request. Real phone-to-watch validation remains deferred.

The earlier 1.1.6 host/ADB baseline on Windows/Node 24.22.2 passed 783 checks, 0 failed, 18 expected skips (801 total). After the oversized-header test was split into a portable regression, Node 22.23.4 device-free coverage passed 351 checks, 0 failed, 17 expected skips (368 total). Host skips cover device-only or POSIX behavior, unavailable tcpdump and Windows file-symlink privileges; they are distinct from the on-device results above.

v1.1.5 final audit-fix verification (Windows host): the ten device-free suites passed 295 checks, zero failures, and 17 expected skips (312 total) under Node 22.23.4 with coverage. The new hardening suite separately passed 41 checks on Node 24.22.2, with one Windows file-symlink capability skip; 16 other skips in the full CI set require hardware. Eight real-browser CORS/reload checks passed. The Pixel passed eight disposable POSIX path/link/race checks and five focused hardware smoke checks; the latest snapshot code also completed a real schema read through the isolated worker. These initial checks preceded the separate on-device release validation described below.

Final hardening hardware regression (October 31, 2026): all 22 host/ADB suites passed on the Pixel 6a / Android 16 using Node 24.22.2: 728 passed, 0 failed, 18 expected skips (746 total). This includes 41 audit-hardening, 33 local-LLM, 36 SDK/client/plugin compatibility, 93 security and 46 UI checks, plus live SQLite and Shannon validation. The skips are five on-device-only QEMU checks, twelve Windows/POSIX/tcpdump checks and one Windows file-symlink capability case. That last case is additionally covered by the disposable Pixel POSIX probes above. The suite exited successfully, left no ADB forwards, and made no repository file changes. This validates the host build; on-device LocalBridge execution is verified separately during release preparation.

1.1.5 release validation: the production-only package initializes with 209 tools, five resources/templates and four prompts. The staged Pixel build, using Termux Node 24.22.1 and SQLite 3.54.1, passed real SQLite schema/query reads, write rejection, runtime/health checks and a live Shannon handshake. Eight real-browser checks also passed against that on-device process, including authenticated SSE/Streamable HTTP, denied Origins and repeated page reloads. Six optional WebSocket/GraphQL checks passed with their production packages installed. The verified build was promoted to the normal installation path; Android auto-detection and all eight strict device checks passed again there. At that release's validation, the 1.1.4 rollback copy also started on the new runtime. The final host hardware rerun passed 728 checks with zero failures and 18 skips; device-free Node 24 coverage passed 295 checks with zero failures and 17 skips. GitHub CI covers Node 22/24/26 builds and regressions, real-browser MCP compatibility, coverage and dependency auditing, with separate CodeQL analysis for application code and GitHub Actions.

Earlier unreleased host hardware validation (October 31, 2026, before the final seven-finding hardening pass): the expanded suite, including SDK migration, browser reconnect, request-ID/cancellation, plugin callback lifetime, and profile regressions, completed on Pixel 6a / Android 16 with 687 passed, 0 failed, and 17 expected skips (704 total). Live llama.cpp checks separately exercised stdio, authenticated browser Streamable HTTP, and legacy SSE with the inspect profile; see LOCAL_LLMS.md for the tested model and browser HTTP reload recovery and its limits. Phone-to-watch Wear validation is deferred.

v1.1.4 host hardware validation: the full Pixel 6a / Android 16 regression completed with 604 passed, 0 failed, and 17 expected environment-specific skips (621 total). This includes live AT/OK validation on /dev/umts_router, a guarded read-only SQLite schema snapshot with cleanup, the unified runtime audit, per-app route context, and the single-device Wear preflight. The skips are the five on-device-only QEMU checks plus twelve Windows-host or unavailable-tcpdump security checks.

v1.1.3 hardware baseline: validated on a Pixel 6a (Android 16, Termux + Magisk + QEMU 10.2.1) across a four-cell test matrix — host (ADB) and on-device (LocalBridge), each with and without a device PIN — with 0 failures in every cell. The v1.1.3 suite contained 577 tests in the host/ADB configuration and 613 on-device; the difference is the QEMU virtualization and Alpine VM-boot suites, which run only on-device:

  • ADB mode, no PIN: 556 passed / 0 failed / 21 skipped (577 total). Skips: 5 QEMU (on-device only), 7 gracefulKill unit tests (require POSIX signals, skipped on the Windows host), 3 tcpdump sanitization (tcpdump is root-only and unreachable over a non-root ADB shell), 2 host-shell round-trips (require a POSIX /bin/sh), 4 screen-state (require DA_TEST_PIN).

  • ADB mode, with PIN: 560 passed / 0 failed / 17 skipped (577 total). The 4 screen-state tests unlock and run.

  • On-device mode, no PIN: 606 passed / 0 failed / 7 skipped (613 total). All QEMU tests run, including Alpine Linux VM boot with KVM acceleration, big.LITTLE CPU topology detection, guest ADB connectivity error handling, and clean VM shutdown; the tcpdump and gracefulKill suites also run here (root + POSIX). Skips: 3 QEMU setup steps that no-op when the Alpine kernel/initrd/disk are already cached, 4 screen-state (require PIN).

  • On-device mode, with PIN: 610 passed / 0 failed / 3 skipped (613 total). Every test enabled by the environment runs; the 3 skips are the cached-VM setup steps.

Privilege escalation: In ADB mode, all shell commands run as uid=2000 (the shell user) which has system-level permissions. In Termux, commands run as a regular app user. LocalBridge automatically elevates privileged commands through su when root (Magisk) is available:

  • Command allowlist: 16 system commands (settings, dumpsys, am, input, screencap, screenrecord, uiautomator, app_process, getenforce, setenforce, cmd, pm, wm, svc, ip, ifconfig) are routed through su -c to match ADB-mode behavior.

  • Path-based elevation: Commands referencing /sdcard, /storage, or /system/ paths are elevated to bypass Android scoped storage restrictions.

  • Root detection: Cached after a single su -c id probe at first use. Graceful degradation when root is unavailable.

  • The elevation allowlist is frozen (ReadonlySet + Object.freeze) — not configurable via environment variables or runtime API.

Auto-detection: Checks for /system/build.prop (present on all Android devices, never on hosts). Override with DA_LOCAL=true or DA_LOCAL=false.

On-device setup (Termux):

pkg install nodejs-lts git sqlite
git clone https://github.com/fullread/DeepADB.git
cd DeepADB
npm ci
npm run build

Choose the launch mode for your client. For stdio, configure the MCP client to launch node with the absolute path to DeepADB/build/index.js; the client starts the process itself. To run a loopback HTTP listener instead:

DA_HTTP_HOST=127.0.0.1 DA_HTTP_PORT=3000 npm start # /mcp and legacy /sse

This listener is accessible only on the device, not directly over Wi-Fi. For browser clients, configure a bearer token and an exact Origin allowlist; see Local LLM clients. For remote access, follow the token and TLS reverse-proxy or SSH-tunnel guidance in SECURITY.md.

Use a supported Node LTS release; Node 24 is validated for this release. The sqlite package supplies the sqlite3 executable required by on-device database inspection. Production installs that omit development dependencies must install ws and/or graphql separately when those optional transports are enabled. Before replacing an existing device installation, stage the built package, keep a rollback copy, and verify its actual LocalBridge execution with the device's runtime and binaries. Host/ADB tests alone do not validate that deployment.

MCP Client Configuration

Configure a local stdio MCP server with node as the command and the absolute path to build/index.js as its argument. The client starts the server process. For clients that use an mcpServers JSON configuration, the equivalent is:

{
  "mcpServers": {
    "deepadb": {
      "command": "node",
      "args": ["/path/to/DeepADB/build/index.js"]
    }
  }
}

Other clients may use a settings form, TOML, or a different JSON layout; enter the same command and argument using that client's configuration format. Leave DA_HTTP_PORT, DA_WS_PORT, and DA_GRAPHQL_PORT unset for this stdio setup. See Local LLM clients for explicit environment settings and authenticated browser connections.

Available Tools (209)

Start with the capability area that matches your task; the complete reference remains below.

Complete tool reference

Health (1 tool)

  • adb_health_check — Comprehensive toolchain validation: ADB binary, server, device connection, authorization, root access, and storage writability

Runtime Audit (1 tool)

  • adb_runtime_audit — Unified read-only readiness audit for transport, Android userspace, root, SELinux, storage, command capabilities, UI/network diagnostics, SQLite, modem nodes, and Wear prerequisites

The audit retains successful checks when an independent probe fails. Its report labels readiness as available, unavailable (a confirmed negative result), or inconclusive (failed, timed out, incomplete, or not safely checked). Audit status: partial and the Probe issues section identify incomplete checks while preserving useful device information and snapshots. A partial report is returned normally; failure to resolve the requested device remains a tool error. complete means the checks completed, not that every capability is available. Modem node visibility does not verify an AT handshake, and Play services presence does not verify phone/watch pairing. Use the dedicated Shannon and Wear tools for those narrower checks.

SQLite readiness follows the inspector's execution mode: host ADB uses the host's Node SQLite backend (Node 22.16+ with node:sqlite enabled), while on-device LocalBridge uses device sqlite3. A phone's SQLite binary cannot make a missing host backend available. Backend availability alone does not verify access to a particular app database.

Device (3 tools)

  • adb_devices — List all connected devices with state, model, and product info

  • adb_device_info — Detailed device properties (model, OS, SDK, build, security patch, ABI)

  • adb_getprop — Read a specific system property or dump all properties

Shell (2 tools)

  • adb_shell — Execute arbitrary shell commands with configurable timeout (security-checked)

  • adb_root_shell — Execute commands as root via su (requires rooted device, security-checked)

Packages (12 tools)

  • adb_install — Install APK with replace/downgrade options

  • adb_uninstall — Remove package with optional data retention

  • adb_list_packages — List packages filtered by name or type (all/system/third-party)

  • adb_package_info — Detailed package info (version, permissions, paths)

  • adb_clear_data — Clear all app data and cache

  • adb_grant_permission — Grant a runtime permission to a package

  • adb_revoke_permission — Revoke a runtime permission from a package (reset permission state for testing denial flows)

  • adb_list_permissions — List all declared and granted permissions for a package, filterable by granted/denied

  • adb_force_stop — Force-stop an app immediately

  • adb_start_app — Launch an app by package name (resolves launcher activity)

  • adb_restart_app — Force-stop then re-launch in one call (configurable delay)

  • adb_resolve_intents — Discover registered activities, services, and receivers with intent filters

Room & SQLite Inspection (1 tool)

  • adb_sqlite_inspect — Package-scoped listing, schema inspection and validated read-only SQL. Prefers run-as, falls back to root, rejects linked directories/files and verifies opened descriptors. Queries a private snapshot (database + WAL ≤64 MiB) with bounded execution and output, then removes it. Host inspection needs Node 22.16+ and runs in an isolated process; on-device inspection uses a trusted sqlite3 binary. Neither backend queries the live app path. Snapshots are not transactional backups; concurrent writes may require retrying with the app stopped.

Files (18 tools)

  • adb_push — Push local file to device (hard-blocked kernel paths, fs-type awareness, storage reporting)

  • adb_pull — Pull file from device to local filesystem

  • adb_ls — List device directory contents (simple or detailed)

  • adb_cat — Read text file from device with optional line limit

  • adb_file_write — Create or overwrite text files via heredoc (buffer limit warning, fs-aware, post-verify)

  • adb_find — Search for files by name/pattern with depth control and result capping

  • adb_file_stat — File metadata: size, permissions, timestamps, ownership, SELinux context

  • adb_file_checksum — SHA-256/SHA-1/MD5 hash with size-based timeout estimation

  • adb_mkdir — Create directories with parent creation (-p), hard-blocked kernel paths

  • adb_rm — Delete files/directories with depth-based recursive protection and symlink resolution

  • adb_file_move — Move/rename with source depth protection and post-verify

  • adb_file_copy — Copy with pre-flight size+space check and post-verify size match

  • adb_file_chmod — Change permissions (Zod-validated octal mode, depth-based recursive protection)

  • adb_file_touch — Create empty files or update timestamps (explicit timestamp support)

  • adb_file_fsinfo — Filesystem report: type, mount, capacity, capabilities, SELinux, limitations

  • adb_file_chown — Change ownership (root required, depth-based recursive protection)

  • adb_grep — Search file contents with fixed-string default, recursive depth control, result capping

  • adb_file_replace — Find/replace text in files (sed-backed, proper escaping, backup option)

Logs — Snapshots (3 tools)

  • adb_logcat — Filtered logcat snapshot with tag, priority, grep, and buffer selection

  • adb_logcat_clear — Clear all logcat buffers

  • adb_logcat_crash — Crash buffer log snapshot

Logs — Persistent Watchers (4 tools)

  • adb_logcat_start — Start a background logcat watcher with ring buffer accumulation

  • adb_logcat_poll — Retrieve new lines since last poll from a running watcher

  • adb_logcat_stop — Stop a watcher session (or all sessions)

  • adb_logcat_sessions — List all active watcher sessions with stats

Diagnostics (9 tools)

  • adb_dumpsys — Run dumpsys for any service (or list all services)

  • adb_telephony — Cell info, signal strength, and network registration (parallel query)

  • adb_battery — Battery status, level, temperature, and charging info

  • adb_network — WiFi, cellular, and IP connectivity (parallel query)

  • adb_top — CPU and memory usage snapshot

  • adb_perf_snapshot — Parallel memory, frame stats, and CPU profiling for a package

  • adb_bugreport — Full bug report zip capture (device state, logs, system info)

  • adb_crash_logs — ANR traces and tombstone crash dumps from /data/anr/ and /data/tombstones/

  • adb_heap_dump — Capture heap dump (.hprof) from a running process for memory analysis

Per-App Route Context (1 tool)

  • adb_app_route_context — Resolve an installed package to its UID and correlate its effective ip rule ranges, route tables, network policy, VPN, and default-network state without changing routes or policy

UI (10 tools)

  • adb_screencap — Take screenshot with filename sanitization, saves locally

  • adb_screencap_annotated — Screenshot with UI element bounding boxes and numbered labels composited onto the PNG. Returns annotated image path plus a text legend. Ideal for LLM workflows that reference elements by number

  • adb_current_activity — Get focused activity and top window stack

  • adb_input — Send tap, swipe, text, or keyevent input

  • adb_start_activity — Launch activities by intent or component name

  • adb_ui_dump — Dump full UI hierarchy. Supports three output formats: text (default, human-readable), tsv (compact tab-separated for token-efficient automation loops), xml (raw uiautomator XML)

  • adb_ui_find — Search UI hierarchy by text, resource-id, or content-description (returns tap coordinates)

  • adb_screen_state — Combined screen state in one call: foreground activity, screen dimensions and density, orientation, battery level, and a TSV list of interactive elements. Replaces 3–4 separate tool calls

  • adb_screenrecord_start — Start recording the device screen (1-180s, stored on device)

  • adb_screenrecord_stop — Stop recording and pull the mp4 video file locally

Device Control (9 tools)

  • adb_airplane_mode — Toggle airplane mode with broadcast and verification

  • adb_airplane_cycle — Cycle airplane mode on/off to force cellular re-registration

  • adb_wifi — Enable or disable WiFi

  • adb_mobile_data — Enable or disable mobile data

  • adb_location — Set location mode (off/sensors/battery/high)

  • adb_screen — Wake, sleep, toggle, lock, or unlock the screen. Lock verifies keyguard state via dumpsys window. Unlock uses wm dismiss-keyguard (works for swipe keyguards); supply pin to perform the full PIN entry sequence: wakes screen, swipes up to reveal keypad, types PIN, confirms, and verifies the keyguard sleep token was released

  • adb_settings_get — Read any Android setting from system/secure/global namespace

  • adb_settings_put — Write any Android setting with read-back verification

  • adb_reboot — Reboot device (normal, recovery, or bootloader mode)

Wireless Debugging (4 tools)

  • adb_pair — Pair with device over WiFi using pairing code

  • adb_connect — Connect to device over WiFi/TCP

  • adb_disconnect — Disconnect wireless device(s)

  • adb_tcpip — Switch USB device to TCP/IP mode (auto-detects device IP)

Port Forwarding (8 tools)

  • adb_forward — Forward a local port to a device port (host → device)

  • adb_reverse — Reverse-forward a device port to the host (device → host)

  • adb_forward_list — List all active forward and reverse port mappings

  • adb_forward_remove — Remove a port forward or all forwards

  • adb_reverse_remove — Remove a reverse forward or all reverse forwards

  • adb_tunnel_open — Open a managed tunnel with opaque ID. Auto-picks a free host port for forward direction when omitted; registers cleanup so the tunnel is removed on server exit

  • adb_tunnel_list — List active managed tunnels (those opened via adb_tunnel_open). Optional device filter; shows ID, direction, endpoints, and age

  • adb_tunnel_close — Close a managed tunnel by ID, or close all at once with id="all"

Emulator Management (3 tools)

  • adb_avd_list — List available AVDs (PC mode) or detect KVM/QEMU virtualization capabilities (on-device mode)

  • adb_emulator_start — Launch an AVD with headless, cold boot, and GPU options (PC mode) or report QEMU alternative (on-device mode)

  • adb_emulator_stop — Gracefully shut down a running emulator

QEMU/KVM Virtualization (8 tools)

  • adb_qemu_setup — Check and install QEMU for on-device virtualization. Verifies KVM, reports host CPU/RAM, installs via Termux pkg

  • adb_qemu_images — Manage VM disk images: list, create (qcow2/raw), delete. Path containment verification prevents traversal

  • adb_qemu_start — Boot a KVM-accelerated VM with dynamic resource allocation. Auto-detects optimal CPUs (total minus 1, reserving one for host) and memory (65% of physical RAM). Supports kernel/initrd/append for Android boot, ADB port forwarding

  • adb_qemu_stop — Stop a running VM (graceful SIGTERM or force SIGKILL). Auto-disconnects guest ADB before killing. Reports running VMs if no name given

  • adb_qemu_status — Full status: KVM/QEMU availability, host resource budget, running VMs with PID/resources/uptime/ports/ADB connection state, image inventory

  • adb_qemu_connect — Connect to a running VM's guest ADB service. Restricted to localhost only — port derived from running VM state, never user input. Enables multi-device tools to operate on guest VMs

  • adb_qemu_disconnect — Disconnect from a guest VM's ADB service. Clears connection state and removes guest from device list

  • adb_qemu_guest_shell — Execute shell commands on a guest VM via ADB. Subject to security middleware. Guest serial derived internally — no user-supplied host/IP reaches the ADB binary

Test Sessions (3 tools)

  • adb_test_session_start — Start a named test session with organized output directory

  • adb_test_step — Capture a numbered step with screenshot and logcat into the session

  • adb_test_session_end — End session, write summary manifest, return directory path

Multi-Device Orchestration (4 tools)

  • adb_multi_shell — Execute a command on all/selected devices in parallel (security-checked)

  • adb_multi_install — Install an APK across multiple devices simultaneously

  • adb_multi_compare — Run a command on all devices and highlight output differences

  • adb_multi_test — Comparative test workflow: run predefined diagnostic profiles (firmware/security/network/identity/full) or custom command lists across all devices including QEMU guests, compare per-check, report matches and differences

Wear Data Layer (1 tool)

  • adb_wear_datalayer_preflight — Read-only phone/watch role, Google Play services, Bluetooth, optional package, companion-association, and Data Layer service preflight; pairing identifiers are intentionally omitted

Input Gestures & UI Automation (15 tools)

  • adb_input_drag — Drag from point A to point B (uses draganddrop with swipe fallback for older Android)

  • adb_input_fling — High-velocity fling gesture for momentum-scrolling through lists and paged views (configurable duration 20-200ms)

  • adb_input_long_press — Long press at coordinates with configurable hold duration

  • adb_input_double_tap — Double tap with configurable interval between taps

  • adb_input_text — Dedicated text input with space/special character handling

  • adb_open_url — Open a URL on the device via VIEW intent

  • adb_orientation — Get or set screen orientation (auto/portrait/landscape/reverse)

  • adb_clipboard — Read or write device clipboard

  • adb_input_pinch — Multi-touch pinch (zoom out) or spread (zoom in) gesture. Two fingers move symmetrically around a center point. Layered injection: parallel input swipe (universal, no root) or raw sendevent MT Type B protocol (true multi-touch, root required). Auto-detects touchscreen device and capabilities via getevent -p. Configurable center, radius, duration, angle, and interpolation steps

  • adb_tap_element — Find element by text/resource-id/content-description and tap its center

  • adb_wait_element — Poll UI hierarchy until an element appears or disappears (configurable timeout/poll interval)

  • adb_wait_stable — Poll until consecutive UI dumps match (screen stabilization after transitions)

  • adb_scroll_until — Scroll repeatedly until a target element is found, with optional auto-tap

  • adb_screenshot_compressed — Capture screenshot with size/quality metadata for token-efficient workflows

  • adb_batch_actions — Execute multiple input actions (tap/swipe/fling/long_press/double_tap/keyevent/text/drag/pinch/back/home/sleep) in a single tool call with security validation

Device Awareness (3 tools)

  • adb_screen_size — Screen resolution, display density (DPI), aspect ratio, and DP width in one call

  • adb_device_state — Combined snapshot: battery level/status/temp, network type, WiFi state, screen on/off, orientation, foreground activity

  • adb_notifications — Parse active notifications with package, title, text, importance, channel, flags, and timestamp (filterable by package)

Snapshot/Restore (3 tools)

  • adb_snapshot_capture — Save comprehensive device state (packages, settings, properties) to JSON

  • adb_snapshot_compare — Diff current state against a saved snapshot (added/removed packages, changed settings)

  • adb_snapshot_restore_settings — Restore global/secure settings from a saved snapshot

Network Capture (3 tools)

  • adb_tcpdump_start — Start background packet capture via tcpdump (requires root)

  • adb_tcpdump_stop — Stop capture and pull pcap file locally for Wireshark analysis

  • adb_network_connections — Show active TCP/UDP connections (ss/netstat with /proc/net fallback)

CI/CD Integration (3 tools)

  • adb_ci_wait_boot — Wait for device/emulator to fully boot with configurable timeout

  • adb_ci_device_ready — Structured pass/fail readiness check (boot, PM, screen, network, disk)

  • adb_ci_run_tests — Run instrumented tests via am instrument with parsed pass/fail results

Baseband/Modem (6 tools)

  • adb_baseband_info — Modem firmware, RIL implementation, chipset, SIM configuration (dual SIM detection with per-slot state), network registration. IMEI retrieval is opt-in only (includeImei=true)

  • adb_cell_identity — Cell ID (CID), TAC/LAC, EARFCN, PCI, PLMN from dumpsys phone for cellular network analysis

  • adb_signal_detail — RSRP, RSRQ, SINR, RSSI, timing advance — raw radio measurements for signal analysis

  • adb_neighboring_cells — All visible LTE/5G/WCDMA/GSM cells with identities and signal strengths

  • adb_carrier_config — Carrier configuration dump, carrier ID, preferred APN

  • adb_modem_logs — RIL radio buffer, telephony framework, RILJ/RILC, kernel dmesg (root) modem logs

Accessibility Auditing (3 tools)

  • adb_a11y_audit — Targeted Android accessibility checks: missing labels, undersized touch targets (<48dp), duplicate descriptions, unfocusable clickables

  • adb_a11y_touch_targets — List all interactive elements with touch target dimensions in dp, flag undersized

  • adb_a11y_tree — Accessibility-focused UI tree showing only screen-reader-relevant elements with roles, labels, and states

Regression Detection (3 tools)

  • adb_regression_baseline — Capture performance baseline (memory, CPU, frame stats, battery, network) to JSON

  • adb_regression_check — Compare current performance against a saved baseline with configurable regression thresholds

  • adb_regression_history — List all saved baselines with trends, optionally filtered by package

Device Farm (3 tools)

  • adb_farm_run — Run instrumented tests on Firebase Test Lab across multiple device models and API levels

  • adb_farm_results — Retrieve results from a Test Lab run or list recent test matrices

  • adb_farm_matrix — List available device models and Android versions on Firebase Test Lab

Plugin Registry (3 tools)

  • adb_registry_search — Search the community plugin registry, shows install status and available updates

  • adb_registry_install — Download and install a plugin from the registry by name

  • adb_registry_installed — List locally installed plugins with version and update availability

Plugins (2 tools)

  • adb_plugin_list — List all loaded plugins with paths and load times

  • adb_plugin_info — Plugin system documentation and example plugin format

Build (2 tools)

  • adb_gradle — Run any Gradle task in a project directory

  • adb_build_and_install — Build debug APK and install via ANDROID_SERIAL targeting

AT Commands (6 tools)

  • adb_shannon_session — Check Shannon/Exynos chipset detection, root, character-device modem ports, and a benign AT/OK handshake together; supports Google Tensor's /dev/umts_router, re-arms bounded CPIF reads until a terminal result, optionally sends read-only ATI, and never sends a modem configuration command

  • adb_at_detect — Auto-detect modem AT command device node by chipset family (Shannon, Qualcomm, MediaTek, Unisoc, generic). Probes known paths and returns the first responding node

  • adb_at_send — Send a single AT command to the modem with response capture. Auto-detects port or accepts manual override. Dangerous command blocklist with force override

  • adb_at_batch — Send multiple AT commands sequentially with per-command results. Configurable inter-command delay

  • adb_at_probe — Run a standard diagnostic probe: modem ID, signal quality, network registration, SIM status, operator, functionality mode

  • adb_at_cross_validate — Cross-validate baseband firmware by comparing AT command responses (ATI, AT+CGMR, AT+CGMM) against system properties. Flags discrepancies as potential firmware tampering, incomplete OTA, or property spoofing. Shannon-specific AT+DEVCONINFO support. Requires root

Screenshot Diffing (3 tools)

  • adb_screenshot_baseline — Capture and save a named screenshot baseline with metadata (dimensions, SHA-256, timestamp)

  • adb_screenshot_diff — Compare current screen against a saved baseline using pixel-level PNG decoding. Reports changed pixel count/percentage, bounding box of changed region, and supports a tolerance threshold for absorbing dynamic elements like clocks

  • adb_screenshot_history — List all saved screenshot baselines with metadata

Workflow Orchestration (3 tools)

  • adb_workflow_run — Execute a JSON-defined workflow: sequential device operations with variable substitution, conditional steps, loops, and result capture. Actions: shell, root_shell, install, screenshot, logcat, getprop, sleep

  • adb_workflow_validate — Validate workflow structure without executing. Shows execution plan

  • adb_workflow_list — List saved workflow files in the workflows directory

Split APK Management (4 tools)

  • adb_install_bundle — Install split APKs (app bundles) via install-multiple with replace and downgrade options

  • adb_list_splits — Show all APK split paths for a package with classification (base, config.density, config.language, etc.) and total size

  • adb_extract_apks — Pull all splits for a package to a local directory for analysis or backup

  • adb_apex_list — List installed APEX modules with version info

Device Mirroring (3 tools)

  • adb_mirror_start — Start live screen mirroring via scrcpy. Supports windowed and headless modes, recording, bitrate/FPS/resolution control, stay-awake, and screen-off

  • adb_mirror_stop — Stop mirroring for a device or all devices

  • adb_mirror_status — Check scrcpy availability and list active mirroring sessions

Automated Test Generation (3 tools)

  • adb_test_gen_from_ui — Analyze the current screen's interactive elements and generate a workflow that taps each one, screenshots, and checks for crashes

  • adb_test_gen_from_intents — Analyze a package's registered activities and generate a workflow that launches each exported activity with crash detection

  • adb_test_gen_save — Save a generated workflow JSON to the workflows directory for later execution

OTA Update Monitoring (3 tools)

  • adb_ota_fingerprint — Capture system fingerprint: build ID, Android version, security patch, bootloader, baseband firmware, kernel, A/B slot

  • adb_ota_check — Compare current system state against a saved fingerprint to detect OTA updates. Identifies changed fields and recommends re-baselining

  • adb_ota_history — List all saved fingerprints for a device with version progression over time

RIL Message Interception (3 tools)

  • adb_ril_start — Start capturing RIL messages from the radio logcat buffer. Categorizes registration, cell info, signal, network, security, handover, and NAS events

  • adb_ril_poll — Retrieve captured RIL messages with optional category filtering. Shows category distribution

  • adb_ril_stop — Stop a RIL capture session with category summary

Device Profiles (3 tools)

  • adb_profile_detect — Auto-detect and build a device profile: hardware ID, chipset family, modem nodes, root status, 5G support, dual SIM configuration. Matches against built-in library for known quirks

  • adb_profile_save — Save a device profile to the profiles library

  • adb_profile_list — List built-in and user-saved device profiles

Modem Firmware Analysis (3 tools)

  • adb_firmware_probe — Comprehensive firmware identification: parses baseband (Shannon/Qualcomm/MediaTek/Unisoc/HiSilicon/Intel), bootloader, and RIL implementation into structured components. Reports kernel, security patch, A/B slot, verified boot state, VBMeta, hypervisor, and OTA partition inventory

  • adb_firmware_diff — Compare all firmware components (baseband, bootloader, kernel, security patch, build ID, Android version, RIL) between saved fingerprints or live device. Deep parsed diffs for baseband and bootloader when changes detected

  • adb_firmware_history — Track firmware progression across all saved OTA fingerprints with multi-component change detection (baseband, bootloader, kernel, security patch, build ID, Android version) and parsed baseband diffs

Wireless Firmware (4 tools)

  • adb_wifi_firmware — WiFi chipset and firmware identification: driver version, firmware version, supported bands (2.4/5/6 GHz), WiFi standard detection (5/6/6E/7), current connection info. MAC address opt-in only

  • adb_bluetooth_firmware — Bluetooth firmware and chipset identification: firmware version, BT version (4.0–5.4 from LMP), adapter state, LE capabilities (2M PHY, Coded PHY, extended advertising), active profiles (A2DP/HFP/HID/LE Audio), bonded device count. MAC/name opt-in only

  • adb_nfc_firmware — NFC controller firmware: controller type (NXP/Broadcom/Samsung/ST), firmware version, supported technologies (NFC-A/B/F/V, MIFARE), secure element (eSE/UICC), HCE support

  • adb_gps_firmware — GNSS/GPS chipset and firmware identification: hardware model (manufacturer, chip, firmware), supported constellations (GPS/GLONASS/Galileo/BeiDou/QZSS/NavIC/SBAS), signal types with frequencies, dual-frequency (L1+L5) detection, raw GNSS measurement capabilities, A-GPS modes (MSB/MSA), SUPL server configuration, carrier phase measurements

Workflow Marketplace (3 tools)

  • adb_market_search — Search the workflow marketplace for community-shared workflow definitions with keyword and tag filtering. Shows install status

  • adb_market_install — Download, validate (JSON structure + SHA-256 integrity), and install a marketplace workflow for immediate use with adb_workflow_run

  • adb_market_export — Package a local workflow with marketplace metadata (author, version, tags, SHA-256) and generate a registry manifest entry for sharing

SELinux & Permission Auditing (3 tools)

  • adb_selinux_status — SELinux enforcement mode, policy version, shell context, recent AVC denial count. Root provides kernel dmesg denial stats

  • adb_selinux_denials — List recent AVC denial messages with parsed source/target contexts, permission classes, and denied operations. Supports process filtering

  • adb_permission_audit — Audit runtime permission grants for a package grouped by dangerous permission category (Camera, Location, Phone, SMS, etc.). Flags high-sensitivity grants

Thermal & Power Profiling (3 tools)

  • adb_thermal_snapshot — Capture all thermal zone temperatures, per-CPU frequencies/governors, cooling device states, battery temperature/current/voltage/power draw. Optional save as JSON baseline

  • adb_thermal_compare — Compare current thermal state against a saved baseline with per-zone temperature deltas and battery current changes

  • adb_battery_drain — Measure battery drain rate over a configurable duration (3-60s). Reports average mA, mW, estimated %/hour. Optional package-specific batterystats

Network Discovery (3 tools)

  • adb_network_scan — Scan the local network for ADB-enabled devices via ARP table and optional IP range sweep. Probes ports 5555-5558 with batched parallel TCP probes

  • adb_network_device_ip — Get the WiFi IP of a connected device via multiple methods. Shows ADB TCP status and wireless connection instructions

  • adb_network_auto_connect — One-step discover + connect: scans for ADB devices and automatically runs adb connect on each found listener

Hardware Sensor Access (2 tools)

  • adb_sensor_read — Read current hardware sensor values via dumpsys sensorservice. Enumerates all sensors with vendor, type, mode, rate range, and wake capability. Returns last-known readings with timestamps and axis-labeled formatting. Category filter (13 categories) and listOnly discovery mode. No root required

  • adb_iio_read — Read raw hardware data from the Linux IIO subsystem. Auto-discovers IIO devices, classifies by kernel driver. On Tensor/Exynos: exposes per-rail ODPM power monitors showing real-time power consumption per SoC subsystem. Generic IIO path handles raw channels with calibrated scale+offset. Root required

Result Handles (3 tools)

  • adb_result_list — List active result handles in the tempdir-backed cache. Shows tool, name, size, age, and remaining TTL for each handle

  • adb_result_get — Retrieve the content of a stored handle by tool + name. Returns the original content blocks as the source tool produced them; updates last-accessed time. For URI-based retrieval, use the result://{tool}/{name} MCP Resource instead

  • adb_result_drop — Delete a stored result handle, or clear all handles in the current namespace. Pass both tool and name to drop one specific handle, or all: true to drop everything. Useful before changing DA_AUTH_TOKEN (which would otherwise leave orphans under the old token-hash directory)

MCP Resources (5)

Read-only device state surfaces accessible by MCP clients:

  • device://list — List of all connected devices with state and model info

  • device://info/{serial} — Device properties (model, OS, build, ABI)

  • device://battery/{serial} — Parsed battery status (level, charging, temperature, voltage)

  • device://telephony/{serial} — Telephony registry state for cellular analysis

  • result://{tool}/{name} — Stored tool result handle. Resolve by URI; created by tools that opt into result-handle storage via the result_handle parameter. Listed by adb_result_list

MCP Prompts (4)

Pre-built workflow templates for common multi-step debugging tasks:

  • debug-crash — Clear logcat → restart app → wait for reproduction → capture crash buffer → analyze

  • deploy-and-test — Build → install → clear logcat → start watcher → launch → screenshot → report

  • telephony-snapshot — Capture telephony state, SIM/network operator, network type → summarize anomalies

  • airplane-cycle-test — Start watcher → baseline telephony → cycle airplane mode → compare pre/post state

Key Features

Device Caching

Device discovery results are cached with a configurable TTL (default 5s), eliminating redundant adb devices subprocess calls during rapid tool sequences. Cache auto-invalidates on connection errors and after wireless connect/disconnect/pair operations.

Transient Failure Retry

The ADB bridge automatically retries on transient failures (device offline, connection reset, protocol fault) with configurable retry count and exponential backoff. Diagnostic commands skip retries to surface real issues immediately.

Output Protection

All ADB output passes through the OutputProcessor which normalizes line endings, enforces configurable character limits, and provides contextual truncation at logical boundaries (line breaks, section separators) rather than cutting mid-line. Includes structured parsers for battery, meminfo, and getprop output.

Persistent Logcat Streaming

Background logcat watchers run as spawned processes with ring buffer accumulation. Each poll returns only new lines since the last read. Supports multiple concurrent sessions (up to 10) with independent filters. Process cleanup handlers prevent orphaned adb logcat processes on server exit.

UI Hierarchy Analysis

Full view tree capture via uiautomator dump with parsed XML extraction. Returns structured element data including text, resource-id, content-description, class names, bounds coordinates with tap-ready center points, and interaction flags. Pre-compiled regex attribute extraction for efficient parsing.

Security Middleware

DA_SECURITY=true enables command blocklist/allowlist filtering and rate limiting on middleware-checked paths, including generic shell, workflow shell steps, and selected input/automation tools. Checked commands are logged with credential redaction by default. These controls are not a global per-tool policy or complete audit trail: dedicated tools such as adb_reboot and adb_wifi call the bridge directly. Use DA_TOOL_PROFILE=inspect for an enforced three-tool read-only catalog; command allowlisting alone does not make full read-only. See SECURITY.md for deployment recipes and limits.

Input Sanitization

All tools that interpolate user-supplied parameters into shell command strings validate inputs against shell metacharacters before execution. Package names, property keys, service names, setting keys, test identifiers, network interface names, and tcpdump filters are all validated through a centralized validateShellArg() function that rejects ;, |, &, $, backticks, parentheses, and other injection vectors. File paths use single-quoted shell escaping to prevent $() command substitution. The adb_input tool applies type-specific validation: tap/swipe accept only numeric coordinates, keyevent accepts only alphanumeric keycodes, and text is shell-escaped for literal delivery. The adb_batch_actions tool enforces the same per-action-type validation (digits-only for coordinates, alphanumeric for keycodes, shell-escape for text) and routes every assembled command through the security middleware. Deserialized JSON from snapshot files is validated before shell interpolation. Every z.number() parameter across all 209 tools has explicit .min()/.max() Zod bounds to prevent resource exhaustion from extreme values. The LocalBridge has explicit handlers for every ADB subcommand used by tool modules, preventing unquoted fallthrough to the default shell handler. In on-device mode, privilege escalation uses a frozen 16-command allowlist and restricted-path regex — the elevation set is ReadonlySet + Object.freeze, not configurable at runtime. The HTTP/SSE transport denies cross-origin requests by default (configurable via DA_HTTP_CORS_ORIGIN), the plugin registry verifies SHA-256 integrity hashes and prevents path traversal via directory containment checks, and the workflow engine enforces step count (200), sleep duration (5 min), and repeat iteration (100) limits. Fetch helpers enforce a 5 MB response body limit. Getprop output parsing handles Windows \r\n line endings via .trim() before regex matching, and dual SIM slot counts are capped at 4 to prevent resource exhaustion from corrupted device properties.

Multi-Device Orchestration

Run commands, install APKs, and compare outputs across multiple connected devices in parallel. Essential for comparative testing across Android versions and device models.

Snapshot/Restore

Capture comprehensive device state snapshots (packages, settings across all namespaces, system properties) to JSON files. Compare current state against saved snapshots to detect drift. Restore settings from snapshots for reproducible test environments.

Network Traffic Capture

On-device packet capture via tcpdump with pcap file pull for Wireshark analysis. Includes active connection listing via ss/netstat with /proc/net fallback for devices without those tools.

CI/CD Integration

Purpose-built tools for automated pipelines: wait for device boot with polling, structured readiness checks, and instrumented test execution with parsed pass/fail results.

Plugin Architecture

Dynamic tool module loading from a configurable plugins directory. Plugins are standard JavaScript ESM modules that export a register(ctx) function receiving the full ToolContext. Loaded at server startup, enabling community contributions without modifying core code.

The SDK v2 server preserves legacy plugin .tool(), .prompt(), .resource(), and register*() calls through a compatibility adapter, including Zod 3/4 validation, prompt argument completions, callback context, and registration updates. Async registration is awaited. Existing v1 SDK imports remain available. Cancelled or disconnected plugin callbacks cannot use their retained legacy or adapted v2 request/notification helpers to contact the next client. Typed plugins keep ToolContext for legacy callback fields such as extra.signal; new plugins can use NativePluginToolContext for v2 fields such as context.mcpReq. Direct low-level SDK request handlers require migration to v2; SDK-private internals and experimental task APIs are outside this adapter.

Community Plugin Registry

Search, install, and manage plugins from an operator-configured registry URL. DeepADB ships no default registry; set DA_REGISTRY_URL to a manifest URL you trust before searching or installing. Shows install status, version comparison, and available updates. Downloads plugin files with companion metadata into the plugins directory for loading on next restart. Installation requires a matching SHA-256 hash in the manifest; missing or mismatched hashes are rejected. Other checks include path traversal protection and register() export sanity checking. A matching hash verifies consistency with the manifest, not the trustworthiness of its publisher or plugin code.

Baseband/Modem Integration

Deep cellular radio inspection tools for advanced Android development and research. Extracts modem firmware identification, cell identity parameters (CID, TAC, EARFCN, PCI), raw signal measurements (RSRP, RSRQ, SINR), neighboring cell surveys, carrier configuration, and multi-source modem logs (RIL radio buffer, telephony framework, kernel dmesg). Supports Shannon/Exynos, Qualcomm, MediaTek, and Unisoc chipset families via standard Android telephony APIs. Includes Google Tensor SoC detection (gs101/gs201/zuma/zumapro) for automatic Shannon modem path routing on Pixel 6–9 devices. Dual SIM detection reports per-slot SIM state, operator, network type, and country for DSDS, DSDA, and TSTS configurations.

Accessibility Auditing

Targeted accessibility checks on the live Android UI hierarchy. Detects missing labels on interactive elements, undersized touch targets below the Android 48dp recommendation (density-aware), images without content-descriptions, clickable elements missing focusability, and duplicate content-descriptions. Generates structured reports with severity levels and includes an accessibility tree view for screen reader debugging. These checks do not constitute a complete WCAG conformance assessment or replace testing with assistive technology.

Regression Detection

Capture performance baselines (memory, CPU, frame stats, battery, network state) and compare subsequent runs against them. Configurable regression thresholds for memory (+20%), CPU (+50%), and jank rate (+25%). Maintains a history of baselines for trend analysis across releases.

Device Farm Integration

Cloud-based test execution via Firebase Test Lab through the gcloud CLI. Run instrumented tests across multiple device models and API levels, retrieve structured results, and list available test matrix configurations. Graceful fallback with setup instructions if gcloud is unavailable.

HTTP Transport and Tool Profiles

The SDK v2 migration retains existing client configurations: stdio remains the default, /sse and /message retain the legacy SSE protocol, and /ws remains available. Negotiated protocol revisions through 2025-11-25 are preserved. Streamable HTTP is available at /mcp on the same HTTP port. The 2026-07-28 protocol lifecycle is not enabled.

Alternative to stdio for browser-based and native MCP clients. Set DA_HTTP_PORT to start an HTTP server providing /mcp (Streamable HTTP), /sse (legacy client subscription), /message (legacy JSON-RPC), and /health endpoints. Set DA_HTTP_CORS_ORIGIN to an exact HTTP(S) origin or comma-separated list. Unlisted Origins are rejected with HTTP 403 before session handling. Browser preflights permit MCP-Protocol-Version; actual MCP requests still require the configured bearer token. Requests without Origin remain supported for native clients.

/mcp supports POST, GET and DELETE with an exposed Mcp-Session-Id header. One client is active across /mcp and legacy SSE. A new /mcp session cannot displace an active SSE client, and a new SSE client cannot displace an active /mcp session; these attempts receive 409. A second authorized SSE client replaces the previous SSE connection for compatibility. Competing /mcp initializations receive 409 except for the guarded browser-reload recovery described below. Streamable HTTP sessions expire after 30 idle minutes by default; active MCP requests and bounded uploads suspend the countdown until work completes. An open notification stream alone does not prevent expiry, and DELETE can still terminate an active session. If a browser loses its ID on reload, a valid initialization from the same Origin can reclaim the slot after its notification stream disconnects and all active calls, uploads and response streams finish. Native/POST-only clients retain explicit DELETE/expiry behavior; an open client or server-initiated stream close cannot trigger this recovery. Legacy SSE messages must use the current connection's advertised sessionId; stale messages cannot execute after replacement. Plugins and device managers initialize once per process, including across reconnects.

/mcp rejects duplicate in-flight request IDs and repeated IDs within a batch before dispatch (HTTP 400, JSON-RPC -32600), so a conflicting request cannot release another tool's protection against expiry or reconnect. Rejected batches execute no partial work.

DA_TOOL_PROFILE=full preserves the full catalog and existing plugins. DA_TOOL_PROFILE=inspect exposes only adb_devices, adb_device_info and adb_getprop. Excluded tools cannot be called directly; plugins, workflows, resources and prompts are unavailable, and configuring GraphQL fails startup. See Local LLM clients for setup and session behavior.

Test Session Management

Structured test workflows with numbered steps. Each step captures a screenshot and logcat snapshot into an organized directory with a Markdown manifest. Designed for reproducible test documentation.

AT Command Interface

Direct AT command passthrough to the modem via root access, enabling raw interrogation beyond the Android telephony framework. Multi-chipset support auto-detects device nodes for Samsung Shannon/Exynos, Qualcomm Snapdragon, MediaTek, Unisoc/Spreadtrum, and generic USB modems. Input validation rejects shell metacharacters from both AT command strings and device node paths before root shell interpolation. A safety blocklist prevents accidental execution of dangerous commands (AT+CFUN=0, AT+EGMR, etc.) with an explicit force override.

Screenshot Diffing

True pixel-level visual regression detection. Captures named screenshot baselines and compares the current screen state by decoding PNG pixel data (IHDR parsing, IDAT decompression, all 5 PNG filter types) and comparing actual RGB values. Reports changed pixel count and percentage, bounding box of the changed region with vertical screen position, and dimension/size deltas. Supports a tolerancePercent parameter (0–100) that absorbs minor dynamic changes like clock displays or notification badges — a 1% tolerance reliably absorbs nav bar clock changes (~0.5% of pixels) while catching any real UI regression. SHA-256 fast-path for exact matches. Zero external dependencies.

Workflow Orchestration

Declarative JSON workflow engine for repeatable multi-step device operations. Supports variable substitution ({{pkg}}), conditional steps (if expressions with ==, !=, contains), loops (repeat, capped at 100 iterations), and result capture into variables for downstream steps. Actions map directly to ADB bridge operations with full security middleware enforcement. Workflow validation enforces a 200-step maximum and 5-minute sleep cap per step to prevent resource exhaustion from malicious or malformed workflow definitions.

Split APK Management

Support for modern Android delivery formats. Install app bundles via install-multiple, inspect split APK structure (base + config splits for language, density, ABI), extract all splits locally for analysis, and list APEX modules.

Device Mirroring

Live screen mirroring via scrcpy integration. Supports windowed mode for visual feedback and headless mode for recording-only workflows. Per-device session tracking enables simultaneous mirroring of multiple connected devices. Process cleanup handlers prevent orphaned scrcpy processes.

Automated Test Generation

Analyzes live UI hierarchy and package intent registrations to auto-generate test workflow JSON compatible with the workflow orchestration engine. UI-based generation taps each interactive element, screenshots, and checks for crashes. Intent-based generation launches each exported activity with crash detection.

OTA Update Monitoring

Tracks comprehensive system fingerprint (build ID, Android version, security patch, bootloader, baseband firmware, kernel version, A/B partition slot) across sessions. Compares current state against saved fingerprints to detect OTA updates. Identifies exactly which fields changed and recommends re-baselining performance metrics and screenshots after updates.

RIL Message Interception

Persistent Radio Interface Layer message capture from the Android radio logcat buffer. Spawns a background process that accumulates and categorizes RIL messages into: registration, cell_info, signal, network, security, handover, data, radio_state, sms, and NAS events. Poll-based retrieval with category filtering. Useful for passive monitoring of baseband-framework communication for radio diagnostics and cellular network research. Session limit (5) and process cleanup handlers prevent resource exhaustion.

Device Profile Library

Device-specific knowledge base containing hardware identification, chipset family, known modem device nodes, AT command compatibility, root requirements, dual SIM slot count, and quirks. Auto-detects profiles from connected devices and matches against a built-in library of known devices. Saved profiles persist across sessions and improve auto-detection accuracy for tools like adb_at_detect. Community-extensible through saved profile files.

WebSocket Transport

Alternative to stdio and HTTP for native clients that support WebSocket. Requires the optional ws npm package. Set DA_WS_PORT to enable. Authentication and Origin checks run before upgrade; a second active client receives HTTP 409. Browser clients needing bearer headers should use Streamable HTTP or legacy SSE because the native browser WebSocket API cannot set arbitrary Authorization headers.

Modem Firmware Analysis

Comprehensive multi-component firmware identification, diffing, and history tracking. Parses baseband version strings for 6 chipset families: Shannon/Exynos (including Google Pixel/Tensor g5123b-* format and classic Samsung S5123AP_CL* format), Qualcomm MPSS branch/version/build, MediaTek MOLY branch/release/milestone, Unisoc/Spreadtrum SoC model/version, HiSilicon/Kirin model/carrier code, and Intel XMM model/branch. Also parses bootloader versions (Pixel codename/version/build, Samsung model/carrier/revision) and RIL implementation strings (Samsung S.LSI vendor/id/API/build date, Qualcomm, MediaTek). The firmware probe reports 8 sections: baseband, bootloader, RIL, kernel, security/build, partition/boot (A/B slot, secure boot, verified boot, flash lock), VBMeta integrity, and OTA partition inventory. The diff tool compares all firmware components between saved fingerprints or live device state, with deep parsed sub-diffs for baseband and bootloader. The history tool tracks multi-component firmware progression across OTA fingerprints.

Workflow Marketplace

Community sharing layer for the workflow orchestration engine. DeepADB ships no default marketplace; configure a trusted manifest with DA_WORKFLOW_REGISTRY_URL, or derive it from DA_REGISTRY_URL by replacing registry.json with workflows.json. Search for shared test workflows, diagnostic sequences, and audit procedures. Download and install workflows for execution with adb_workflow_run; installation requires a matching SHA-256 hash in the manifest. Export local workflows with marketplace metadata and auto-generated registry manifest entries for submission. Review the source and workflow actions before running them.

GraphQL API

Optional HTTP endpoint serving a GraphQL API for composed device queries. Enables clients to fetch device info, battery, network, and arbitrary properties in a single request instead of multiple MCP tool calls. POST body size limited to 1 MiB. Device properties are pre-fetched once per resolution to minimize subprocess calls. Requires the optional graphql npm package. Set DA_GRAPHQL_PORT to enable in the full profile; query and work budgets are documented in SECURITY.md.

Request validation and known limit errors remain actionable. Unexpected request/resolver failures return generic errors, with backend diagnostics kept on server stderr. GraphQL execution errors retain the normal errors[]/data shape with HTTP 200; unexpected request-handler failures use HTTP 500. See SECURITY.md for the error boundary.

SELinux & Permission Auditing

Inspects SELinux enforcement mode, queries AVC denials from logcat and kernel audit logs, and audits runtime permission grants per package. Groups granted permissions by dangerous category (Camera, Location, Phone, SMS, etc.) and flags high-sensitivity grants like background location and manage-external-storage. Extends the security auditing surface to the OS permission layer.

Thermal & Power Profiling

Captures thermal zone temperatures from sysfs, per-CPU frequency scaling states and governors, cooling device activity, and battery drain rates. Complements regression detection with thermal/power baselines for issues that manifest as heat or battery drain rather than frame drops. Includes timed drain measurement with mA/mW/estimated-%per-hour calculations.

Network Device Discovery

Scans the local network for ADB-enabled devices via ARP table queries and optional IP range sweeps. Probes common ADB ports (5555-5558) with batched parallel TCP connection attempts. Extracts device WiFi IPs via multiple methods. Auto-connect mode discovers and connects to devices in one step. Streamlines wireless debugging workflows.

QEMU/KVM Virtualization

On-device virtual machine management using QEMU with KVM hardware acceleration. Enables running guest Android VMs directly on the physical device — a capability unique to DeepADB. Dynamic resource allocation auto-detects host CPU cores and physical RAM, reserving 1 core and 35% of memory for the host OS to prevent starvation. Multi-VM support tracks resource consumption across concurrent VMs, refusing new VMs when the pool is exhausted rather than degrading host performance. Disk image management with qcow2 (sparse, snapshot-capable) and raw formats. ADB port forwarding to guest VMs enables DeepADB's full tool suite to target both host and guest devices simultaneously. Process lifecycle tracked via the centralized cleanup registry with SIGTERM/SIGKILL shutdown. Path containment verification on all image operations prevents directory traversal.

ToolContext Architecture

All 49 built-in tool modules receive a unified BuiltinToolContext dependency bundle containing server, bridge, deviceManager, logger, security, and config. Adding new cross-cutting dependencies requires no module signature changes.

Environment Variables

Variable

Default

Description

ADB_PATH

Auto-detect

Path to ADB binary (ignored in on-device mode)

DA_LOCAL

Auto-detect

true/1 forces LocalBridge; false/0 forces ADB. Otherwise detect Android through /system/build.prop.

DA_TIMEOUT

30000

Default command timeout in milliseconds

DA_MAX_OUTPUT

50000

Max output characters before truncation

DA_MAX_LOGCAT

500

Max logcat lines per snapshot

DA_DEVICE

(auto)

Default device serial (auto-selects if single device)

DA_TEMP_DIR

Windows: %TEMP%/deepadb; POSIX host: /tmp/deepadb; Android: $HOME/.deepadb

Working directory for screenshots, pulled files, bug reports, test sessions and snapshots. On-device falls back to /data/local/tmp/.deepadb when HOME is unset.

DA_CACHE_TTL

5000

Device list cache TTL in milliseconds (0 = disabled)

DA_RETRY_COUNT

1

Number of retries for transient ADB failures

DA_RETRY_DELAY

500

Base retry delay in ms (doubles each attempt)

DA_LOG_LEVEL

info

Log level: debug, info, warn, error

DA_ASCII_ONLY

(auto-detect)

Set to 1 to force ASCII-only output in the startup warning banner. Default auto-detects via WT_SESSION/TERM_PROGRAM/TERM for Unicode-capable terminals; falls back to ASCII on legacy cmd.exe.

DA_RESOURCE_CACHE_TTL_MS

0 (disabled)

MCP Resource cache TTL in ms. Set to a positive value to cache resource reads (device://info, device://battery, etc.) for that duration.

DA_RESULT_HANDLE_DIR

{tempDir}/result-handles

Storage root for tempdir-backed tool result handles. Override to relocate the store off the default temp directory.

DA_RESULT_HANDLE_TTL

43200 (12h)

Per-handle TTL in seconds. Handles older than this are evicted on startup sweep and during periodic eviction. Bounded to [60, 7 days].

DA_RESULT_HANDLE_MAX_BYTES

5242880 (5 MiB)

Cap on the serialized content blocks stored in one handle. If exceeded, storage is refused; the original tool output is preserved with a not-stored warning.

DA_RESULT_HANDLE_TOTAL_BYTES

104857600 (100 MB)

Total result-handle store size cap across all handles. Triggers LRU eviction when exceeded.

DA_RESULT_HANDLE_MAX_COUNT

100

Maximum number of active handles. Triggers LRU eviction when exceeded.

DA_SECURITY

false

Enable filtering/rate limits on middleware-checked command paths; not a global tool policy

DA_BLOCKED_COMMANDS

(none)

Blocked substrings on middleware-checked command paths

DA_ALLOWED_COMMANDS

(none)

Allowed substrings on checked command paths; does not make the full catalog read-only

DA_RATE_LIMIT

0

Max middleware-checked commands per minute; not an HTTP/global tool limit (0 = unlimited)

DA_CI_PING_TARGET

1.1.1.1

Network reachability target used by adb_ci_device_ready (network reachability is one of the readiness checks alongside boot completion, ADB authorization, and package manager availability). Override to point at an internal target if 1.1.1.1 is firewalled.

DA_AUDIT_LOG

true

Log middleware-checked commands with credential redaction; not a complete per-tool audit

DA_PLUGIN_DIR

{tempDir}/plugins

Directory to scan for plugin .js modules at startup

DA_REGISTRY_URL

(not configured)

Trusted plugin registry manifest URL; no default registry is shipped. Installation requires a matching SHA-256 hash in the manifest.

DA_HTTP_PORT

(disabled)

Enable HTTP transport: /mcp plus legacy /sse and /message

DA_HTTP_SESSION_TTL_MS

1800000

/mcp idle-session timeout; integer 1000–3600000 ms

DA_TOOL_PROFILE

full

full preserves all tools/plugins; inspect exposes three device/property tools and disables alternate interfaces

DA_HTTP_HOST

127.0.0.1

Bind address for HTTP/SSE, WebSocket, and GraphQL servers

DA_AUTH_TOKEN

(none — open)

When set, MCP/GraphQL requests and WebSocket upgrades require Authorization: Bearer <token>. Health endpoints and validated CORS preflights are token-free; Origin checks still apply.

DA_HTTP_CORS_ORIGIN

(none — deny Origins)

Exact HTTP(S) origins for HTTP/SSE; comma-separated; no paths or wildcards

DA_WS_PORT

(disabled)

Set to a port number to enable WebSocket transport mode (requires npm install ws)

DA_WS_CORS_ORIGIN

(none — deny Origins)

Exact HTTP(S) origins for WebSocket upgrades and health endpoint; comma-separated

DA_GRAPHQL_PORT

(disabled)

Set to a port number to enable the GraphQL API endpoint (requires npm install graphql)

DA_GRAPHQL_CORS_ORIGIN

(none — deny Origins)

Exact HTTP(S) origins for GraphQL; comma-separated; no paths or wildcards

DA_WORKFLOW_REGISTRY_URL

(not configured)

Trusted workflow manifest URL. Falls back to DA_REGISTRY_URL with registry.json replaced by workflows.json when that variable is set. Installation requires a matching SHA-256 hash.

DA_TEST_PIN

(none)

Numeric PIN used by tests/test-ui-control.mjs to exercise screen-lock/unlock tests. Without it, the 4 lock-state tests skip. Format: DA_TEST_PIN=0000 npm test.

Project Structure

DeepADB/
├── src/
│   ├── index.ts                # Entry point — stdio, HTTP, WebSocket, plus optional GraphQL
│   ├── server.ts               # MCP server wiring, config, module registration (exports CreateServerResult)
│   ├── http-transport.ts       # Shared HTTP router, Origin/auth checks and legacy SSE
│   ├── streamable-http.ts      # Bounded /mcp session and Streamable HTTP lifecycle
│   ├── tool-profile.ts         # Startup profile validation and tool admission guards
│   ├── plugin-compat.ts        # Legacy plugin APIs adapted to the v2 server
│   ├── ws-transport.ts         # WebSocket transport (optional `ws` package)
│   ├── graphql-api.ts          # GraphQL API endpoint (optional `graphql` package)
│   ├── tool-context.ts         # Unified dependency bundle (ToolContext interface)
│   ├── bridge/
│   │   ├── adb-bridge.ts       # Core ADB subprocess wrapper, retry logic, error types
│   │   ├── local-bridge.ts     # On-device direct execution bridge with privilege escalation (Termux/local mode)
│   │   └── device-manager.ts   # Device discovery, TTL cache, serial routing
│   ├── tools/
│   │   ├── health.ts           # Toolchain health check (1 tool)
│   │   ├── runtime-audit.ts    # Unified read-only runtime readiness audit (1 tool)
│   │   ├── device.ts           # Device info and properties (3 tools)
│   │   ├── shell.ts            # Shell and root command execution (2 tools)
│   │   ├── packages.ts         # App lifecycle, install, permissions, intents (12 tools)
│   │   ├── database-inspector.ts # Package-scoped read-only Room/SQLite inspection (1 tool)
│   │   ├── files.ts            # File operations — push, pull, write, find, grep, replace, stat, checksum, chmod, chown, touch, fsinfo (18 tools)
│   │   ├── logs.ts             # Logcat snapshots — filtered (3 tools)
│   │   ├── logcat-watch.ts     # Persistent logcat with ring buffer and poll (4 tools)
│   │   ├── diagnostics.ts      # dumpsys, telephony, battery, network, perf, bugreport, crash logs, heap dump (9 tools)
│   │   ├── ui.ts               # Screenshots, input, activity, UI hierarchy, annotated screencap, screen state (8 tools)
│   │   ├── input-gestures.ts   # Drag, long press, double tap, text, URL, orientation, clipboard, tap-element, wait-element, wait-stable, scroll-until, compressed screenshot, batch actions, fling, pinch, screen size, device state, notifications (18 tools)
│   │   ├── screen-record.ts    # Screen video recording start/stop (2 tools)
│   │   ├── control.ts          # Airplane, WiFi, data, location, screen, settings, reboot (9 tools)
│   │   ├── wireless.ts         # WiFi pairing, connect, disconnect, TCP/IP (4 tools)
│   │   ├── forwarding.ts       # Port forwarding — forward, reverse, list, remove, managed tunnels with auto-port-pick (8 tools)
│   │   ├── emulator.ts         # AVD list, start, stop with on-device KVM/QEMU detection (3 tools)
│   │   ├── qemu.ts             # QEMU/KVM VM management — setup, images, start, stop, status, guest ADB connect/disconnect/shell (8 tools)
│   │   ├── testing.ts          # Structured test sessions with numbered steps (3 tools)
│   │   ├── multi-device.ts     # Multi-device shell, install, compare, comparative testing (4 tools)
│   │   ├── snapshot.ts         # Device state capture, compare, restore (3 tools)
│   │   ├── network-capture.ts  # tcpdump start/stop, network connections (3 tools)
│   │   ├── ci.ts               # CI wait-boot, device-ready, run-tests (3 tools)
│   │   ├── plugins.ts          # Plugin loader, info, and dynamic tool loading (2 tools)
│   │   ├── baseband.ts         # Modem/baseband inspection and radio diagnostics (6 tools)
│   │   ├── accessibility.ts    # Targeted Android UI accessibility checks (3 tools)
│   │   ├── regression.ts       # Performance baseline and regression detection (3 tools)
│   │   ├── device-farm.ts      # Firebase Test Lab integration via gcloud (3 tools)
│   │   ├── registry.ts         # Community plugin registry search/install (3 tools)
│   │   ├── at-commands.ts      # AT command modem interface, Shannon session, cross-validation (6 tools)
│   │   ├── screenshot-diff.ts  # Visual regression — screenshot baseline/diff (3 tools)
│   │   ├── workflow.ts         # Declarative workflow orchestration engine (3 tools)
│   │   ├── split-apk.ts        # App bundles, split APKs, APEX modules (4 tools)
│   │   ├── mirroring.ts        # Live screen mirroring via scrcpy (3 tools)
│   │   ├── test-gen.ts         # Automated test workflow generation (3 tools)
│   │   ├── ota-monitor.ts      # OTA update monitoring and fingerprinting (3 tools)
│   │   ├── ril-intercept.ts    # RIL message interception from radio buffer (3 tools)
│   │   ├── device-profiles.ts  # Device profile library with built-in entries (3 tools)
│   │   ├── firmware-analysis.ts # Modem firmware version parsing and diffing (3 tools)
│   │   ├── workflow-market.ts  # Workflow marketplace — search, install, export (3 tools)
│   │   ├── selinux-audit.ts    # SELinux status, AVC denials, permission auditing (3 tools)
│   │   ├── thermal-power.ts    # Thermal zones, CPU frequency, battery drain (3 tools)
│   │   ├── network-discovery.ts # ADB-over-network scanning and auto-connect (3 tools)
│   │   ├── app-network.ts      # Per-app UID routing and network-policy context (1 tool)
│   │   ├── wear.ts             # Wear OS Data Layer phone/watch preflight (1 tool)
│   │   ├── sensors.ts          # Hardware sensor enumeration, IIO power monitor reading (2 tools)
│   │   ├── result-handles.ts   # Tempdir-backed result handles — list, get, drop (3 tools) + the result://{tool}/{name} resource
│   │   ├── wireless-firmware.ts # WiFi, Bluetooth, NFC, GPS firmware identification (4 tools)
│   │   ├── build.ts            # Gradle build and install (2 tools)
│   │   ├── resources.ts        # MCP Resources — 4 device-state surfaces: device://info|battery|telephony|list (5th, result://, lives in result-handles.ts)
│   │   └── prompts.ts          # MCP Prompts — workflow templates (4 prompts)
│   ├── middleware/
│   │   ├── auth.ts             # Bearer token authentication for network transports (DA_AUTH_TOKEN)
│   │   ├── origin.ts           # Exact browser Origin and preflight checks
│   │   ├── http-url.ts         # HTTP URL authority formatting, including IPv6 hosts
│   │   ├── graphql-budget.ts   # GraphQL complexity limits and device-operation budgets
│   │   ├── graphql-errors.ts   # Safe public GraphQL errors and internal error masking
│   │   ├── output-processor.ts # Contextual truncation, structured parsers, settledValue helper
│   │   ├── security.ts         # Command filtering, rate limiting, audit logging with redaction
│   │   ├── sanitize.ts         # Shell injection prevention — validateShellArg/validateShellArgs/shellEscape
│   │   ├── chipset.ts          # Shared chipset family detection, modem path mapping, SIM config detection
│   │   ├── fetch-utils.ts      # Shared HTTP helpers with 5 MB streaming response size limit
│   │   ├── png-utils.ts        # Zero-dependency PNG decode/encode/draw primitives for screenshot annotation and diffing
│   │   ├── ui-dump.ts          # Shared uiautomator XML capture with concurrent-safe paths, on-device /data/local/tmp routing, and cleanup
│   │   ├── cleanup.ts          # Centralized process cleanup registry for SIGINT/SIGTERM/exit
│   │   ├── logger.ts           # stderr-safe logging (MCP-compliant)
│   │   ├── fs-utils.ts         # Filename sanitization, atomic write, private-dir helpers, within-dir containment check
│   │   ├── sqlite-path.ts      # Package/database path containment and symlink guards
│   │   ├── sqlite-query.ts     # Bounded, cancellable SQLite query subprocess management
│   │   ├── sqlite-worker.ts    # Read-only host SQLite worker with memory and output limits
│   │   ├── parse-utils.ts      # Shared parseIntSafe for env-var numeric parsing (single source of truth)
│   │   └── result-handle.ts    # Tempdir-backed tool result content cache with TTL, LRU, and token-hash isolation
│   └── config/
│       └── config.ts           # Configuration, env vars, startup validation
├── package.json
├── tsconfig.json
├── server.json                  # MCP Registry metadata (io.github.fullread/deepadb)
├── .gitignore
├── README.md
├── LOCAL_LLMS.md                # stdio/browser setup, tool profiles and session behavior
├── SECURITY.md                  # Threat model, security architecture, deployment hardening, vulnerability reporting
├── CHANGELOG.md                 # Version history from v0.1.0 to current
├── LICENSE                      # Apache 2.0 license
└── tests/
    ├── run-all.mjs              # Run all test suites sequentially with summary (tracks skipped counts)
    ├── test-hw.mjs              # Hardware core: health, identity, baseband, thermal, profiles, wireless firmware, crash analysis (34 tests)
    ├── test-shell-files.mjs     # Shell, filesystem, packages, diagnostics (24 tests)
    ├── test-ui-control.mjs      # UI hierarchy, screenshots, settings, input gestures, UI automation, device awareness, accessibility, screen lock/unlock, multi-touch (46 tests)
    ├── test-monitoring.mjs      # Logcat watchers, snapshots, OTA, regression, workflows (43 tests)
    ├── test-security.mjs        # Input sanitization, shell injection, AT command safety, QEMU shell escaping, heap-dump validation (116 on-device, 105 host)
    ├── test-lifecycle.mjs       # App lifecycle, file push/pull, input, port forwarding, screen recording, test sessions (24 tests)
    ├── test-analysis.mjs        # Thermal/snapshot/regression comparison, firmware diff, screenshot diff, test gen, RIL intercept, AT cross-validation, permission management (23 tests)
    ├── test-boundaries.mjs      # Zod bounds enforcement, input injection, error paths, sensitive data protection, wireless ADB coverage, multi-device basics, tunnel automation, device-free coverage boundaries (78 tests)
    ├── test-sensors.mjs         # HAL sensors, IIO power monitors, category filters, formatting, wake-up, rate display (30 tests)
    ├── test-files-extended.mjs  # File tool coverage — write, find, stat, checksum, mkdir, rm, move, copy, chmod, touch, fsinfo, chown, grep, replace; push safety; sed-escape regression (95 tests)
    ├── test-result-handles.mjs # Result handle store — listing, retrieval, drop, isolation, eviction (19 tests)
    ├── test-qemu.mjs            # QEMU/KVM setup, image management, VM status, guest connectivity errors (13 on-device tests)
    ├── test-qemu-boot.mjs       # QEMU Alpine VM boot with auto-fetch of kernel/initrd, KVM acceleration, topology detection, guest ADB connectivity (17 on-device tests)
    ├── test-supply-chain.mjs    # Supply-chain hardening checks for fetch and network paths (24 tests)
    ├── test-sanitize-fuzz.mjs   # Property-based fuzzing of shell sanitizers — shellQuote/shellEscape round-trip, validateShellArg rejection (19 tests)
    ├── test-transports.mjs      # Transport smoke — HTTP/SSE + WebSocket MCP round-trip, GraphQL devices query and introspection (8 tests)
    ├── test-sdk-compat.mjs      # SDK v1/v2 clients, plugin compatibility, auth and reconnects (37 tests)
    ├── test-browser-access.mjs  # Origin, CORS, auth and WebSocket upgrade checks (14 tests)
    ├── test-local-llm.mjs       # Streamable HTTP lifecycle, clients, plugins and profile restrictions (34 tests)
    ├── test-next-version.mjs    # Focused diagnostic validation and device-free boundaries
    ├── test-runtime-audit.mjs   # Partial failures, backend readiness and retained results (28 checks)
    ├── test-next-version-device.mjs # Live runtime, SQLite, route, Wear and Shannon checks
    ├── test-audit-hardening.mjs # SQLite isolation, path guards, GraphQL budgets and runner failures
    ├── test-code-scanning.mjs   # Bounded auth, safe GraphQL errors and split-APK quoting
    ├── browser/cors.mjs         # Separate real Chromium HTTP/SSE checks (8 tests)
    └── lib/
        └── harness.mjs          # Shared test harness (stdio JSON-RPC transport, assertion primitives)

Tech Stack

  • Runtime: Node.js ≥22 (ES2024, ESM)

  • Development: a supported LTS Node release, at least 22.16 on the Node 22 line or Node 24+, for the full toolchain and SQLite regression tests. c8 coverage alone requires Node 22.12+ on the Node 22 line.

  • Language: TypeScript 6.0 (strict mode, NodeNext module resolution)

  • MCP SDK: @modelcontextprotocol/server ^2.4.0 (resolves to 2.4.0); server-legacy 2.4.0 and SDK v1 1.32.2 retained for existing SSE clients and plugins

  • Validation: Zod ^4.6.7

  • Transport: stdio (JSON-RPC), Streamable HTTP and legacy HTTP/SSE (Node adapter 2.1.2), WebSocket (optional ws), GraphQL API (optional graphql, full profile only)

License

Apache License 2.0 — see LICENSE and NOTICE. The v1.1.2 release migrated from MIT to Apache 2.0 for the explicit patent grant and contributor attribution requirements; existing forks/installs remain valid under the prior MIT terms.

Available Tools

209 tools
adb_a11y_auditA

Run an automated accessibility audit on the current screen. Checks for: missing labels on interactive elements, undersized touch targets (<48dp), images without content-descriptions, clickable elements missing focusability, and duplicate descriptions. Returns a structured report with severity and rule violations.

NameRequiredDescriptionDefault
deviceNoDevice serial

TDQS

A3.5/5.0
Behavior3/5

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

With no annotations, the description bears the full behavioral burden, and it does disclose the five rule categories and the shape of the result (severity plus rule violations). It omits other relevant traits: that the operation is non-destructive/read-only, what happens if the screen is mid-transition, and how large the report can get on a dense screen with many violations.

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, front-loaded with the action, and the rule list is compact and scannable rather than prose. There is no filler, though the closing sentence about the return value is slightly generic ("structured report") where a concrete field hint would have earned the space.

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 single-optional-parameter, non-destructive audit with no output schema, the description covers what is checked and roughly what comes back, which is enough to invoke it confidently. The residual gap is that without an output schema, the report's actual structure and severity levels remain underspecified.

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 there is only one optional parameter (device serial), so the schema already carries the semantics and the baseline of 3 applies. The description adds no meaning beyond it, not even clarifying which device is audited when the serial is omitted.

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 and resource ("Run an automated accessibility audit on the current screen") and itemizes the exact rule categories checked, so the agent knows precisely which capability this is. It falls short of a 5 because two sibling tools in the same family (adb_a11y_touch_targets, adb_a11y_tree) overlap in scope and are never named or differentiated.

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?

Scope is implied ("on the current screen"), which tells the agent the audit applies to the foreground UI rather than the whole app. However, there is no explicit guidance on when to choose this composite audit over adb_a11y_touch_targets or adb_a11y_tree, nor any stated prerequisites such as a connected device or a screen that has finished rendering.

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

adb_a11y_touch_targetsB

List all interactive elements with their touch target dimensions in dp. Highlights elements below the 48dp minimum. Useful for quickly identifying cramped UI layouts.

NameRequiredDescriptionDefault
deviceNoDevice serial
belowMinOnlyNoOnly show elements below the 48dp minimum

TDQS

B3.4/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 behavioral burden: it discloses that elements below 48dp are highlighted and that values are in dp, which implies a read-only listing. It omits prerequisites (screen state, foreground app), whether it triggers a UI dump, and what the response looks like, so the disclosure is partial.

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

Conciseness4/5

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

Three short sentences with the core capability front-loaded and the filtering/interpretation context following. No redundant or filler wording; the only minor inefficiency is that the last sentence restates the purpose already implied by the second.

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 two-parameter read tool with no output schema, the description covers what the tool does and the 48dp rule, but leaves out return structure and device-state prerequisites. Adequate but not complete for an agent calling it blind.

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 both `device` and `belowMinOnly` are already documented and the baseline is 3. The description does reinforce the 48dp threshold that gives `belowMinOnly` meaning, but adds no format or default detail beyond the schema.

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

Purpose4/5

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

The description states a specific verb and resource: list interactive elements with touch target dimensions in dp, plus the 48dp threshold that defines a violation. This is enough to distinguish it from adb_a11y_tree (raw hierarchy) and adb_a11y_audit (broader audit), though it never names those siblings explicitly.

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

Usage Guidelines3/5

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

"Useful for quickly identifying cramped UI layouts" implies the usage context, but there is no explicit when-to-use versus adb_a11y_audit or adb_ui_find, and no statement of preconditions such as the target app needing to be in the foreground. Usage is inferred rather than directed.

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

adb_a11y_treeA

Dump the accessibility-focused view of the UI hierarchy. Shows only elements relevant to screen readers: their roles, labels, states, and navigation order. Filters out decorative/layout containers.

NameRequiredDescriptionDefault
deviceNoDevice serial

TDQS

A3.5/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 behavioral burden. It does disclose meaningful traits — the filtering of decorative containers and the returned fields (roles, labels, states, navigation order) — but says nothing about prerequisites (foreground app, unlocked screen, accessibility service enabled), output format, or the underlying uiautomator cost.

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

Conciseness4/5

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

Three short sentences, front-loaded with the core action and immediately followed by scope and filtering behavior. No filler, though the third sentence could have been merged into the second without loss.

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 one-parameter read tool with no output schema, the description covers what is returned and what is excluded, which is most of what an agent needs. The remaining gap is prerequisite/environment context rather than anything structural.

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 optional parameter 'device' is fully documented in the schema ('Device serial') at 100% coverage, so the schema already does the work. The description adds no semantics about device selection, defaulting, or behavior when omitted.

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

Purpose4/5

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

States a specific verb ('Dump') and resource ('accessibility-focused view of the UI hierarchy'), and the second sentence clarifies exactly what subset is returned. It implicitly separates itself from the full-hierarchy sibling adb_ui_dump by saying it filters out decorative/layout containers, but it never names that sibling explicitly.

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

Usage Guidelines3/5

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

Usage is only implied: 'elements relevant to screen readers' suggests accessibility testing, but there is no explicit when-to-use, when-not-to-use, or pointer to alternatives like adb_ui_dump, adb_a11y_audit, or adb_a11y_touch_targets, all of which sit close to this tool in the sibling list.

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

adb_airplane_cycleA

Cycle airplane mode on then off after a delay. Forces cellular re-registration — useful for radio diagnostics and network testing.

NameRequiredDescriptionDefault
deviceNoDevice serial
delaySecondsNoSeconds to keep airplane mode on (1-60, default 3)

TDQS

A3.5/5.0
Behavior3/5

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

No annotations are supplied, so the description carries the full burden. It usefully discloses the key behavioral trait that connectivity is dropped and the radio re-registers, but it does not say whether the prior radio state is restored, what happens if the device is offline or the toggle fails, or whether it blocks for the full delay.

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 tight sentences, front-loaded with the action and followed by the rationale. Nothing is padded, though the purpose clause could be slightly tighter.

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 two-parameter, no-output-schema device action, the description covers what it does, why, and the timing control via the schema. The main gap is the post-condition after the cycle (whether airplane mode is guaranteed off and the radio restored), which matters for a connectivity-disrupting tool.

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

Parameters3/5

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

Schema description coverage is 100%, with both device and delaySeconds documented including bounds and default. The description only echoes the delay notion ('after a delay'), adding no syntax or device-selection guidance beyond the schema, so the baseline 3 applies.

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

Purpose4/5

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

The description gives a specific verb and resource (cycle airplane mode on then off) plus the mechanism (delay) and effect (forces cellular re-registration). It is clearly distinct from the sibling adb_airplane_mode in practice, though it never names that sibling or states the contrast explicitly.

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

Usage Guidelines3/5

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

It names two use cases (radio diagnostics, network testing), which implies when to reach for it. However, with siblings like adb_airplane_mode, adb_mobile_data and adb_network_scan in the same family, it gives no explicit guidance on when this cycler is preferred over setting airplane mode directly, and no prerequisites or exclusions.

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

adb_airplane_modeB

Toggle airplane mode on/off. Useful for resetting cellular registration during radio testing.

NameRequiredDescriptionDefault
deviceNoDevice serial
enabledYestrue = enable airplane mode, false = disable

TDQS

B3.2/5.0
Behavior2/5

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

No annotations are supplied, so the description carries the full burden. It doesn't disclose whether airplane mode also disables Wi-Fi/Bluetooth, whether root or permissions are required, whether the change persists across reboots, or any error behavior — significant gaps for a device-mutating radio 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?

Two short sentences with the purpose front-loaded and no filler. It could be marginally tighter given the second sentence is context rather than instruction.

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 two-parameter tool with a fully described schema and no output schema, the definition is close to adequate. It is nonetheless thin for a state-changing device tool with zero annotations, leaving modem/connectivity side effects and the cycle alternative unexplained.

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 `device` and `enabled` fully documented, so the schema does the heavy lifting. The description adds no semantics beyond it, and its word "toggle" slightly conflicts with the explicit boolean `enabled` parameter, which sets state rather than flipping it.

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

Purpose4/5

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

States a specific verb and resource ("Toggle airplane mode on/off") and adds a scoping note about radio testing. It is cleanly distinguishable from most siblings, though it never mentions adb_airplane_cycle, the nearest alternative, so differentiation is only partial.

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?

"Useful for resetting cellular registration during radio testing" implies a usage context but is not an explicit when-to-use rule. It gives no exclusion or pointer to adb_airplane_cycle, adb_wifi, or adb_mobile_data, which an agent would need to choose correctly.

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

adb_apex_listA

List installed APEX modules on the device. APEX (Android Pony EXpress) modules deliver updatable system components. Shows module name, version, and active/staged status.

NameRequiredDescriptionDefault
deviceNoDevice serial

TDQS

A3.5/5.0
Behavior3/5

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

No annotations are supplied, so the description carries the full burden; it does say the operation is a listing and specifies the returned fields (name, version, active/staged status), which is useful behavioral context. It does not state whether this is strictly read-only, whether any privilege/root level is required, or how staged-but-inactive modules are represented.

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

Conciseness5/5

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

Three short sentences, front-loaded with the action and resource, followed by just enough disambiguation and return-value detail. No sentence is redundant or padded.

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 small inspection tool the definition is nearly complete, and listing the return fields compensates for the missing output schema. The notable gap is the optional device parameter: with zero required parameters, the description never explains default-device selection or behavior 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?

Schema description coverage is 100% for the single 'device' parameter, so the schema already documents it. The description adds nothing about what happens when device is omitted (it is not required) or how a device serial is resolved, so the baseline 3 applies.

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

Purpose4/5

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

The description gives a specific verb and resource ('List installed APEX modules on the device') and the parenthetical expansion of APEX makes the subject unambiguous. It does not explicitly contrast itself with nearby siblings such as adb_list_packages or adb_package_info, so an agent must infer that this covers system-level APEX containers rather than regular apps.

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

Usage Guidelines3/5

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

Usage is only implied: explaining that APEX modules 'deliver updatable system components' helps an agent decide relevance, but there is no explicit when-to-use or when-not-to-use statement and no pointer to adb_list_packages / adb_package_info as the alternative for normal app inventory.

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

adb_app_route_contextA

Show the effective Android routing context for one installed app by correlating its UID with ip rules, route tables, network policy, VPN, and default-network state. Read-only; does not alter routes or app policy.

NameRequiredDescriptionDefault
deviceNoDevice serial
packageNameYesInstalled Android package to inspect
includeConnectivitySummaryNoInclude a privacy-conscious connectivity/VPN/default-network summary

TDQS

A3.9/5.0
Behavior3/5

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

With no annotations supplied, the description must carry the full behavioral burden, and it does disclose that the operation is read-only and non-mutating plus the cross-domain data it inspects. It omits operationally relevant traits: whether elevated privileges are required, how the preflight behaves on unsupported Android versions, and roughly what the result contains.

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

Conciseness5/5

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

Two sentences, the scope and correlated resources are front-loaded, and the read-only guarantee closes it out. No filler and nothing repeated from the schema.

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 diagnostic tool with three parameters, no output schema, and no annotations, the definition covers what it inspects and that it is safe, but leaves the agent guessing on prerequisites (root, supported API levels) and on the shape of the returned routing data. Adequate but with clear 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 coverage is 100%, so the baseline is 3, but the description adds real meaning by framing packageName as the pivot for UID correlation and by hinting that VPN/default-network state is part of the correlated output, matching the includeConnectivitySummary toggle. It still doesn't clarify the device parameter's selection behavior when multiple devices are attached.

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

Purpose5/5

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

States a specific verb ('Show the effective Android routing context') with an explicit scope ('for one installed app') and enumerates the exact data correlated: UID, ip rules, route tables, network policy, VPN, default-network state. This is clearly distinguishable from broad siblings like adb_network or adb_network_connections without opening their schemas.

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

Usage Guidelines3/5

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

The clause 'Read-only; does not alter routes or app policy' functions as a mild exclusion, telling the agent this isn't for changing policy. However, it names no alternative tools, no prerequisites (root vs non-root, device selection), and no failure conditions such as an uninstalled package, so usage is only implied.

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

adb_at_batchB

Send multiple AT commands sequentially and capture all responses. Useful for running a diagnostic sequence. Requires root.

NameRequiredDescriptionDefault
portNoModem device node (auto-detects if omitted)
forceNoBypass dangerous command safety checks
deviceNoDevice serial
delayMsNoDelay between commands in ms (0-10000, default 500)
timeoutNoTimeout per command in ms
commandsYesArray of AT commands to send in order (max 50)

TDQS

B3.4/5.0
Behavior3/5

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

With no annotations, the description does useful work by disclosing "Requires root," a prerequisite the schema does not carry. However, it omits key behaviors for a potentially risky tool: whether execution aborts on the first failed command, that the force flag bypasses dangerous-command safety checks, and how per-command responses are delineated in the output.

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

Conciseness4/5

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

Three short sentences with the core action front-loaded and the root prerequisite surfaced immediately. "Useful for running a diagnostic sequence" is the softest sentence but still earns its place as a usage cue.

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 6-parameter, mutation-capable tool with no annotations and no output schema, the definition covers the essentials (root requirement, sequential execution) but leaves gaps around failure handling and response format. An agent could invoke it correctly but cannot predict behavior when a mid-sequence command fails.

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 all six parameters are already documented in the schema, including ranges and defaults for delayMs and timeout. The description only reinforces ordering ("in order"/"sequentially") and adds no format or content detail beyond it, so the baseline of 3 applies.

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

Purpose4/5

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

"Send multiple AT commands sequentially and capture all responses" gives a specific verb (send), resource (AT commands), and cardinality (multiple/batch), which cleanly separates it from a single-command tool. It stops short of naming the obvious sibling adb_at_send, so differentiation relies on the agent inferring it from the name.

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?

"Useful for running a diagnostic sequence" implies the batching use case but never states when to pick this over adb_at_send, adb_at_probe, or adb_at_cross_validate. There are no explicit exclusions or conditions for choosing batch versus single sends.

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

adb_at_cross_validateA

Cross-validate baseband firmware by comparing AT command responses (direct modem interrogation) against Android system properties (getprop). Discrepancies may indicate firmware tampering, incomplete OTA updates, or property spoofing. Sends ATI (identification), AT+CGMR (firmware revision), and AT+CGMM (model) to the modem and compares with gsm.version.baseband, ro.hardware.chipname, and related properties. Requires root.

NameRequiredDescriptionDefault
portNoModem device node (auto-detects if omitted)
deviceNoDevice serial
timeoutNoResponse timeout per command in ms

TDQS

A3.9/5.0
Behavior4/5

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

With no annotations supplied, the description carries the full burden and handles most of it: it discloses the root requirement, the exact modem commands issued, the properties read, and that a per-command timeout applies. It implicitly conveys this is a read/compare operation with no mutation. What it omits is failure behavior (no modem node found, non-root, AT non-responsive) and whether the two sources are queried sequentially.

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 tight sentences: purpose first, then interpretation of results, then the concrete mechanism, then the prerequisite. Every sentence contributes information and nothing is repeated from the schema or title.

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 moderately complex, root-requiring cross-validation tool with no output schema, the description explains inputs and mechanism well but never describes what comes back — no mention of a per-field comparison result, a mismatch report, or a verdict flag. An agent knows what the tool does but not what to expect in the response, and it lacks guidance on partial failures.

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 port, device, and timeout are already fully documented in the schema, including the auto-detect default for port and the 1000-30000 ms bounds for timeout. The description adds no parameter-level detail beyond that, which is acceptable but not additive. Baseline 3 applies when the schema does the heavy lifting.

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

Purpose4/5

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

The description states a specific verb and resource ('Cross-validate baseband firmware') and explains the mechanism: comparing AT command responses against Android system properties. It names the exact AT commands (ATI, AT+CGMR, AT+CGMM) and properties (gsm.version.baseband, ro.hardware.chipname), which makes the purpose unmistakable. It stops short of naming siblings like adb_baseband_info or adb_at_send, so an agent must infer the distinction from the description alone.

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

Usage Guidelines4/5

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

It gives clear context for when this tool is appropriate by explaining what discrepancies indicate (firmware tampering, incomplete OTA updates, property spoofing) — that is the use case. It also states a hard prerequisite ('Requires root'). However, there are no exclusions and no explicit routing to alternatives such as adb_at_probe for single-command interrogation or adb_firmware_probe for broader firmware inspection.

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

adb_at_detectA

Auto-detect the modem AT command device node. Identifies the chipset family (Shannon, Qualcomm, MediaTek, Unisoc) and probes known device node paths. Requires root. Returns the first responding node.

NameRequiredDescriptionDefault
deviceNoDevice serial

TDQS

A3.6/5.0
Behavior3/5

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

With no annotations supplied, the description carries the full disclosure burden, and it does deliver real value: root requirement, the probing strategy across known node paths, and the 'first responding node' selection rule. It leaves out what happens when nothing responds (error vs empty), whether probing has side effects on the modem, and any timeout/latency expectations.

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 short sentences, front-loaded with the action and resource, then capability, then prerequisite, then return behavior. No filler or restatement 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?

No output schema exists, and the description compensates by stating the return value ('the first responding node'). For a single-parameter detection tool this is largely sufficient; the only material gap is the no-match/failure outcome and whether device selection falls back to the sole connected device.

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?

Only one optional parameter and schema description coverage is 100%, so the schema already documents 'device' as the serial. The description never mentions the device parameter or whether omitting it defaults to a single connected device, which is the one ambiguity an agent would want resolved here. Baseline 3 applies.

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

Purpose4/5

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

States a specific verb and resource: 'Auto-detect the modem AT command device node', plus the chipset families it can identify. An agent can tell this is a discovery/lookup tool rather than a command sender. It does not, however, distinguish itself from the closely related siblings adb_at_probe and adb_at_send, which is the only thing keeping it from a 5.

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?

Gives one concrete prerequisite ('Requires root') and implies the usage context (find the node before issuing AT commands), but never explicitly says when to pick this over adb_at_probe or adb_at_cross_validate. There are no exclusions or failure-path guidance, so the agent must infer the workflow position from sibling names.

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

adb_at_probeA

Run a standard AT diagnostic probe: modem identification, signal quality, network registration, SIM status, and supported bands. Requires root.

NameRequiredDescriptionDefault
portNoModem device node (auto-detects if omitted)
deviceNoDevice serial

TDQS

A3.5/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 usefully discloses the root prerequisite and implies a read-only diagnostic operation, but it does not explicitly state that the probe does not modify modem state, does not describe return content, or mention timeouts or failure 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 front-loaded sentence that names the operation, lists its scope, and ends with the root prerequisite. There is no filler or redundancy.

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

Completeness3/5

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

For a two-parameter, no-annotation, no-output-schema tool, the description covers scope and the root requirement but omits return-value expectations and explicit safety/idempotency context. It is minimally adequate but leaves gaps an agent would want to know before invoking a modem diagnostic.

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 documents both optional parameters at 100% coverage: port is a modem device node with auto-detection, and device is a serial. The description adds no additional parameter meaning, so the 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 states a specific verb and resource: "Run a standard AT diagnostic probe," then enumerates exactly what is collected (modem identification, signal quality, registration, SIM status, bands). This is clear enough to distinguish it from a generic AT send or detect tool, though it does not explicitly name sibling alternatives.

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

Usage Guidelines3/5

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

Usage is implied by "standard AT diagnostic probe" and "Requires root," but there is no explicit when-to-use guidance, no exclusions, and no stated alternative such as adb_at_send for arbitrary commands or adb_at_cross_validate for validation.

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

adb_at_sendA

Send a single AT command to the modem and capture the response. Requires root. Use adb_at_detect to find the correct port, or specify it manually.

NameRequiredDescriptionDefault
portNoModem device node (e.g., '/dev/umts_router'). If omitted, auto-detects.
forceNoBypass dangerous command safety check
deviceNoDevice serial
commandYesAT command to send (e.g., 'AT+CSQ', 'ATI', 'AT+COPS?')
timeoutNoResponse timeout in ms (1000-30000, default 5000)

TDQS

A3.7/5.0
Behavior3/5

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

With no annotations, the description must carry the behavioral load. It discloses the root requirement and that a response is captured, but says nothing about the dangerous-command safety check, what happens when it blocks a command, timeout behavior, or whether the command has device-side side effects.

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

Conciseness5/5

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

Two sentences, zero filler, and the core action is front-loaded ahead of the prerequisite and the port guidance. Nothing could be removed without losing 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?

There is no output schema and no annotations, so the description should say more about what 'capture the response' yields and how the safety check/force interaction behaves. It is adequate for invocation but leaves real gaps for a root-level modem mutation tool.

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

Parameters3/5

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

Schema description coverage is 100%, so all five parameters are already documented, including the port/force/timeout semantics. The description adds only the pointer to adb_at_detect for port discovery, which is marginal beyond the schema's 'If omitted, auto-detects.' Baseline 3 applies.

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

Purpose4/5

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

States a specific verb and resource ('Send a single AT command to the modem') and implies scope via 'single', which distinguishes it from adb_at_batch without naming it. The sibling of closest contrast (adb_at_batch) is never named explicitly, so it falls short of a 5.

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 routes the agent to adb_at_detect to locate the port, and offers the manual-port alternative. Prerequisite ('Requires root') is stated. It gives clear context but no when-not guidance (e.g., use adb_at_batch for multiple commands, adb_at_cross_validate for verification).

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

adb_avd_listB

List all available Android Virtual Devices (AVDs) that can be started.

NameRequiredDescriptionDefault

No parameters

TDQS

B3.4/5.0
Behavior2/5

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

No annotations are supplied, so the description carries the full disclosure burden. It hints that results are filtered to startable AVDs, but says nothing about whether it requires a running emulator or SDK, whether it reads local config only, or what each returned entry contains. For a zero-annotation tool this is thin.

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 front-loaded sentence with no filler; the scope qualifier ('that can be started') arrives before any trailing detail, so the agent reads the key constraint immediately.

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 zero-parameter list tool with no output schema, the description covers what is enumerated but not what an entry looks like (name vs. ID vs. target API) or how to act on the result. Adequate at minimum, but an agent would need to inspect output to know next steps.

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

Parameters4/5

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

The tool takes zero parameters, so the baseline is 4. Nothing in the description is needed to explain inputs, and it introduces no misleading parameter expectations.

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?

Uses a specific verb (List) and resource (Android Virtual Devices / AVDs) with a qualifying clause ('that can be started') that narrows scope to launchable images. It does not, however, name a sibling such as adb_emulator_start or adb_qemu_images to distinguish this lookup from the act of starting one.

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

Usage Guidelines3/5

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

Usage is only implied: an agent can infer this is the discovery step before starting an emulator. There is no explicit when-to-use statement, no exclusion of related tools (adb_qemu_images, adb_emulator_start, adb_qemu_list-style siblings), and no prerequisites noted.

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

adb_baseband_infoC

Get comprehensive modem/baseband identification: firmware version, RIL implementation, chipset, IMEI, SIM state, and radio capabilities.

NameRequiredDescriptionDefault
deviceNoDevice serial
includeImeiNoInclude IMEI in output (sensitive permanent device identifier — opt-in only)
result_handleNoOptional. If provided, store this tool's result under `result://<tool>/<name>` for retrieval after compaction. Name must be 1-32 chars, [a-zA-Z0-9_-]. Existing handles with the same tool+name are overwritten. Use adb_result_list to see active handles, adb_result_get or the MCP Resource URI to retrieve.
result_handle_ttlNoOptional. TTL in seconds for the result handle (60 to 604800). Default 43200 (12 hours). Ignored if result_handle is not provided.

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are supplied, so the description carries the full behavioral burden and does not meet it. It never states that this is a read-only query, whether radio/chipset fields require root or a specific RIL state, whether the call can fail or hang on some devices, or what the response looks like. Listing IMEI as a standard returned field also sits awkwardly against the schema's opt-in, sensitivity-gated includeImei flag — a caller could reasonably expect IMEI by default.

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

Conciseness4/5

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

A single front-loaded sentence with a clear verb and an enumerated payload; nothing is redundant. It is dense but readable, and the field list earns its space by telling the agent what to expect.

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

Completeness3/5

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

There is no output schema and no annotations, so the description is the only source of behavioral context, and it covers only what is collected, not how it is returned or what constraints apply. For a read-only diagnostic tool with fully documented parameters this is minimally adequate, but a mutation-adjacent, permission-sensitive telephony probe warrants 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 description coverage is 100%, so device, includeImei, result_handle, and result_handle_ttl are all documented in the schema. The description adds no mapping between the enumerated fields and includeImei's opt-in behavior, so it does not meaningfully exceed the schema baseline.

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 gives a specific verb ('Get') plus the resource ('modem/baseband identification') and enumerates the exact fields returned: firmware version, RIL implementation, chipset, IMEI, SIM state, radio capabilities. An agent can tell this is a broad baseband read. It stops short of differentiating itself from near-neighbors like adb_telephony, adb_firmware_probe, or adb_ril_start, so a 4 rather than a 5.

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?

There is no when-to-use guidance, no prerequisites, and no named alternative. The word 'comprehensive' hints at a broad diagnostic sweep, but nothing tells the agent whether to prefer this over adb_device_info, adb_telephony, or adb_firmware_probe for overlapping data.

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

adb_batch_actionsB

Execute multiple input actions in a single tool call. Reduces ADB round-trips for multi-step UI interactions. Each action runs sequentially with an optional delay between them. Supported action types: tap, swipe, fling, long_press, double_tap, keyevent, text, drag, pinch, back, home, sleep.

NameRequiredDescriptionDefault
deviceNoDevice serial
actionsYesArray of actions to execute (1-50)
delayMsNoDelay between actions in ms (0-5000, default 100)
stopOnErrorNoStop execution if any action fails (default true)

TDQS

B3.4/5.0
Behavior3/5

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

With no annotations supplied, the description carries the full burden, and it does disclose useful behavior: sequential execution and an optional inter-action delay. It does not state what a failed batch returns, whether partial execution leaves the UI in a mutated state, or what the response looks like, which matters for a multi-step input tool with no safety annotations.

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

Conciseness4/5

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

Three short sentences, front-loaded with the core purpose, then the benefit, then the execution semantics. The trailing enumeration of action types largely duplicates the schema enum, which is the only 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?

For a four-parameter mutation tool with no annotations and no output schema, the description covers purpose, sequencing, and action vocabulary well. It leaves the return value and failure/partial-execution semantics unexplained, which is the main gap for an agent deciding whether to batch a fragile UI flow.

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 every parameter (device, actions, delayMs, stopOnError) is documented inline with bounds and defaults, so the schema does the heavy lifting. The description adds only the sequencing concept ('optional delay between them'), which is already implied by delayMs; it adds no new meaning about the args string format.

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 and resource ('Execute multiple input actions in a single tool call') and enumerates the supported action types, which lets an agent distinguish this batching tool from single-action siblings like adb_input or adb_input_text. It never names a sibling explicitly, so differentiation is inferential rather than stated.

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

Usage Guidelines3/5

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

'Reduces ADB round-trips for multi-step UI interactions' implies the use case (chained gestures) without ever saying when to prefer this over adb_input, adb_input_drag, or adb_tap_element. There are no exclusions and no prerequisites, so the agent must infer the selection rule.

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

adb_batteryB

Get battery status, level, temperature, and charging info

NameRequiredDescriptionDefault
deviceNoDevice serial

TDQS

B3.2/5.0
Behavior3/5

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

No annotations are supplied, so the description carries the full burden; it does signal a read-only snapshot and names the returned fields, which is meaningful disclosure. It omits how the data is sourced, whether the device parameter defaults when 0 required params are given, and whether the call fails on a disconnected device.

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?

One front-loaded phrase with no wasted words; the resource and returned fields come first. It is arguably under-specified rather than padded, but as a sentence it is efficient.

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, single-optional-parameter read tool with no annotations or output schema, the description covers what is returned at a high level. It leaves gaps around default device behavior and return format, which matter because no output schema exists to fill them.

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 'device' parameter, so the baseline is 3. The description adds nothing about the parameter and does not state what happens when it is omitted, leaving default-device resolution undocumented.

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

Purpose4/5

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

The description uses a specific verb ('Get') and resource ('battery') and enumerates the data returned: status, level, temperature, and charging info. An agent can tell this is a read of current battery state. It does not, however, distinguish itself from the sibling adb_battery_drain, which an agent choosing between the two would want.

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?

There is no explicit when-to-use guidance, no prerequisites, and no mention of alternatives such as adb_battery_drain for drain analysis or adb_thermal_snapshot for thermal trends. Usage must be inferred entirely from the name and the listed fields.

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

adb_battery_drainA

Measure battery drain rate over a specified duration. Takes initial and final readings and calculates mA draw, mW power consumption, and estimated percentage per hour. Useful for profiling power impact of specific operations.

NameRequiredDescriptionDefault
deviceNoDevice serial
durationMsNoMeasurement duration in ms (3s-60s, default 10s)
packageNameNoIf specified, show battery stats for this package (requires root for detailed stats)

TDQS

A3.5/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 usefully discloses the measurement mechanism (initial and final readings, then calculation), which implies the call blocks for the sampling duration, but it never says the call is read-only, that the device must remain idle for accurate results, or that packageName detailed stats require root (only the schema mentions root).

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

Conciseness4/5

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

Three short sentences: purpose, outputs, use case — well front-loaded with no filler. The closing sentence is slightly generic but still informative rather than redundant.

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?

There is no output schema, and the description compensates by naming the returned metrics. For a zero-required-param, moderately complex sampling tool, the main missing element is the blocking/idle-device caveat rather than anything about inputs or returns.

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 all three parameters are already documented with ranges and defaults. The description references duration and implicitly the target of profiling, but adds no syntax or format detail beyond the schema, so the baseline of 3 applies.

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

Purpose4/5

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

States a specific verb and resource ('Measure battery drain rate') and further specifies the computed metrics (mA draw, mW power, %/hour). An agent can distinguish this from adb_battery, which returns instantaneous battery state, though the description never names that sibling explicitly.

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

Usage Guidelines3/5

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

'Useful for profiling power impact of specific operations' implies when to reach for it, but there are no explicit exclusions or pointers to alternatives like adb_battery, adb_top, or adb_perf_snapshot for lighter-weight sampling. Usage context is implied rather than stated.

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

adb_bluetooth_firmwareA

Bluetooth firmware and chipset identification. Reports firmware version, BT version (4.x/5.x), chipset model, adapter state, supported profiles, LE capabilities, and bonded device count. MAC address and device name are opt-in only (permanent identifiers).

NameRequiredDescriptionDefault
deviceNoDevice serial
maxLinesNoLines of dumpsys output to inspect (50-2000, default 300). Raise for verbose vendor builds.
includeIdentifiersNoInclude Bluetooth MAC address and device name (permanent identifiers — opt-in only)

TDQS

A3.8/5.0
Behavior3/5

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

No annotations are supplied, so the description carries the full behavioral burden. It does well to disclose the sensitive-identifier handling ('MAC address and device name are opt-in only') and implies a read-only probe by using 'Reports', but never states whether Bluetooth must be enabled, whether privileged/root access is required, or what happens on failure.

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

Conciseness5/5

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

Three short sentences, zero filler, with the capability list front-loaded and the privacy caveat placed last where it belongs. Every sentence contributes something an agent would otherwise have to guess.

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?

With no output schema, the enumeration of returned fields substitutes well and tells the agent what it will get back. Three all-optional parameters keep the call surface simple; the only real gap is preconditions (adapter off, permission requirements) for a probe that reads dumpsys-level state.

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%, including the maxLines range/default and the includeIdentifiers privacy note, so the schema already does this work. The description restates the identifier opt-in rule but adds nothing about when to raise maxLines or what device selection means.

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?

Names a specific resource (Bluetooth firmware and chipset) and enumerates exactly what is reported: firmware version, BT version, chipset model, adapter state, profiles, LE capabilities, bonded device count. The Bluetooth qualifier cleanly separates it from the analogous siblings adb_wifi_firmware, adb_nfc_firmware, adb_gps_firmware and adb_firmware_probe without needing to name them.

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

Usage Guidelines3/5

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

Usage context is only implied by the content of the report; there is no explicit 'use this when you need X, use adb_firmware_probe instead when you need Y'. The opt-in identifier note is a useful conditional but is a privacy rule, not a when-to-use rule.

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

adb_bugreportA

Capture a full bug report zip (device state, logs, dumpsys, system info). Returns the local file path.

NameRequiredDescriptionDefault
deviceNoDevice serial

TDQS

A3.5/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 usefully discloses that the artifact is written to a local file path rather than returned inline, but omits important behavior: bugreport capture is long-running (minutes), produces a large zip, may require specific permissions/root, and may affect device responsiveness. These omissions matter for a heavyweight 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?

Two short sentences, zero filler, with the resource and its scope front-loaded and the return artifact stated second. Every clause earns its place.

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 one-parameter tool with no output schema, the description covers what it produces and where it lands, which is adequate. However, given no annotations and the fact this is an expensive, long-duration capture, the absence of any runtime, size, or permission expectations leaves an agent underprepared to call it well.

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

Parameters3/5

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

There is a single 'device' parameter with 100% schema description coverage, so the schema already documents it as a device serial. The description adds nothing about the parameter, such as whether omitting the optional device falls back to a default or single connected device. Baseline 3 applies when the schema does the work.

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

Purpose4/5

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

States a specific verb ('Capture') and resource ('full bug report zip') and enumerates the contents (device state, logs, dumpsys, system info), which distinguishes it from point tools like adb_logcat or adb_dumpsys. It does not explicitly name those siblings as alternatives, so the differentiation is implied rather than stated.

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

Usage Guidelines3/5

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

Usage is only implied by the word 'full' – an agent can infer this is the comprehensive diagnostic snapshot rather than a targeted log/dumpsys call. There is no explicit when-to-use, when-not-to-use, or named alternative, so the agent must reason from the sibling list.

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

adb_build_and_installB

Build a debug APK and install it on the connected device (convenience wrapper)

NameRequiredDescriptionDefault
deviceNoDevice serial
timeoutNoBuild+install timeout in milliseconds (30s-30min, default 5min). V5 fix.
projectPathYesPath to the Android project root

TDQS

B3.2/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 behavioral burden. It reveals the build variant (debug) and that it targets a connected device, but says nothing about whether an existing installed app is replaced or its data cleared, whether the build runs offline, what permissions or gradle state are required, or what the result reports on build failure versus install failure.

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

Conciseness4/5

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

A single front-loaded sentence with no filler, stating the action and its scope. It is lean, but the brevity is partly the cause of the missing behavioral detail rather than a model of tightness.

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 three-parameter convenience tool with no output schema and no annotations, the description omits the two things an agent most needs: what the call returns (build output, APK path, install status) and the side effects of reinstalling over an existing app. Adequate but clearly 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%, so projectPath, device serial, and the timeout range are already fully documented in the schema. The description adds no parameter-level meaning beyond that baseline.

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

Purpose4/5

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

The description states a concrete compound verb+resource: build a debug APK and install it on the connected device. An agent can distinguish it from adb_install (install only) and adb_gradle (arbitrary gradle task) without opening a schema, though neither sibling is named explicitly.

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

Usage Guidelines3/5

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

The parenthetical '(convenience wrapper)' implies this bundles build+install for the common single-device debug flow, which is weak when-to-use guidance. It does not say when to prefer adb_gradle plus adb_install separately, nor what prerequisites exist (connected device, gradle wrapper present).

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

adb_carrier_configB

Dump carrier configuration values. Useful for verifying carrier settings, detecting configuration anomalies, and inspecting APN configurations.

NameRequiredDescriptionDefault
deviceNoDevice serial

TDQS

B3.2/5.0
Behavior2/5

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

No annotations exist, so the description carries the full burden. "Dump" implies a read-only operation but that is never stated, and nothing is said about required privileges (e.g. root), whether this works on all devices/Android versions, or roughly what the dump contains or how large it is.

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

Conciseness4/5

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

Two short sentences, purpose first, use cases second – no waste or filler. The use-case list is slightly generic but still front-loads the key 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 simple single-parameter read tool with no output schema, the definition conveys the domain (carrier config, APNs) adequately. It stops short of describing the returned structure or preconditions, which would matter for an agent trying to interpret or act on the output.

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

Parameters3/5

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

With one parameter at 100% schema description coverage, the schema already documents the optional "device" serial, and the description adds no further meaning such as default-target behavior when device is omitted. Baseline 3 applies when the schema does the heavy lifting.

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

Purpose4/5

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

"Dump carrier configuration values" names a specific verb (dump) and resource (carrier configuration), so the agent knows exactly what is retrieved. It does not, however, distinguish this from nearby siblings such as adb_telephony, adb_baseband_info, or adb_settings_get, which could plausibly return overlapping data.

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 second sentence lists motivating scenarios (verifying carrier settings, detecting anomalies, inspecting APNs), which implies when to reach for the tool. There is no explicit when-not guidance and no named alternative for overlapping needs like telephony or baseband inspection.

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

adb_catC

Read a text file from the device

NameRequiredDescriptionDefault
pathYesFile path on device
deviceNoDevice serial
maxLinesNoMaximum lines to return (1-10000)

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations, the description carries the full behavioral burden and says almost nothing: not whether truncation occurs by default, what happens with binary files, how errors surface, or whether the device parameter is required when multiple devices are attached. The only behavioral hint is the implicit assumption that the target is a text file.

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

Conciseness4/5

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

A single front-loaded sentence with no wasted words. It is arguably too spare rather than bloated, and offers no structural aids, but nothing in it is redundant.

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

Completeness2/5

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

For a three-parameter file-read tool with no annotations and no output schema, the agent is left unaware of return shape, truncation defaults, or error behavior. The definition is technically correct but too thin to call the tool confidently in ambiguous cases.

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 path, device, and maxLines (with its 1-10000 bounds) are already fully documented in the schema. The description adds no additional meaning about parameter interaction, such as how maxLines truncation affects output or what device resolution happens when device is omitted.

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

Purpose4/5

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

States a specific verb and resource ("Read a text file from the device"), which is clearly distinct from siblings like adb_ls, adb_file_stat, or adb_pull. The word "text" usefully narrows the scope, though no sibling is named to reinforce the distinction.

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

Usage Guidelines2/5

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

There is no guidance on when to use this versus adb_pull (copy to host), adb_grep (search contents), or adb_file_stat (metadata), and no mention of prerequisites such as read permissions or root. An agent must infer applicability from the tool name alone.

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

adb_cell_identityB

Extract detailed cell identity information: Cell ID (CID), TAC/LAC, EARFCN/ARFCN, Physical Cell ID (PCI), PLMN, and network type. Parses structured data from dumpsys for cellular network analysis.

NameRequiredDescriptionDefault
deviceNoDevice serial

TDQS

B3.3/5.0
Behavior2/5

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

No annotations are supplied, so the description carries the full behavioral burden. It discloses the data source ('parses structured data from dumpsys') and implies a read-only extraction, but says nothing about failure modes (Wi-Fi-only device, no SIM, airplane mode), permissions, or whether the result is a single cell or a list — all material for a telephony probe.

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 compact sentences, front-loaded with the field list, with no filler. The phrase 'detailed cell identity information' is slightly redundant with the field enumeration that follows, but nothing else wastes space.

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?

With no output schema, the field enumeration effectively serves as a return-value description, which is a genuine strength. The remaining gap is environmental preconditions and the list-vs-scalar shape of the result, which an agent would need before relying on it.

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?

There is a single parameter ('device') with 100% schema description coverage, so the schema already documents it. The description adds no meaning about the parameter, such as whether the device is optional or what happens when it is omitted; baseline 3 is appropriate when the schema does the work.

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

Purpose4/5

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

The description opens with a specific verb and resource ('Extract detailed cell identity information') and enumerates the exact data points returned (CID, TAC/LAC, EARFCN/ARFCN, PCI, PLMN, network type), so an agent knows precisely what this produces. It does not, however, distinguish itself from close telephony siblings such as adb_signal_detail, adb_neighboring_cells, or adb_telephony.

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

Usage Guidelines3/5

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

Usage is only implied by the closing clause 'for cellular network analysis', which signals the general context. There is no explicit when-to-use statement, no prerequisites (e.g. active SIM, cellular-capable device), and no pointer to the sibling tools that handle signal strength or neighbor measurements instead.

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

adb_ci_device_readyA

Comprehensive CI readiness check. Verifies: device online, booted, package manager ready, screen unlocked, network available. Returns structured pass/fail results.

NameRequiredDescriptionDefault
deviceNoDevice serial

TDQS

A3.5/5.0
Behavior3/5

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

No annotations are supplied, so the description carries the full burden. It usefully discloses the five checks performed and that results are structured pass/fail, but it omits whether the tool waits/retries for boot, what its timeout behavior is, and whether any check mutates device state (e.g., unlocking the screen).

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

Conciseness4/5

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

Two short sentences, front-loaded with the purpose and followed by the concrete checks; every phrase carries information. The final sentence about structured pass/fail results is justified because no output schema exists.

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 single-optional-parameter, no-annotation, no-output-schema tool, the description is nearly sufficient: it names the checks and the return shape. Remaining gaps are failure granularity (does it report which check failed?) and timing/blocking semantics, which matter for a CI gate but are secondary.

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 there is only one optional parameter ('device': Device serial), so the baseline of 3 applies. The description adds no meaning about what happens when 'device' is omitted (default device? error? first connected?), which is the one genuinely useful semantic it could have supplied.

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

Purpose4/5

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

States a specific verb and resource ('Comprehensive CI readiness check') and enumerates the five conditions verified (online, booted, package manager, screen unlocked, network), so the agent knows exactly what the tool inspects. It does not, however, distinguish itself from close siblings such as adb_health_check or adb_ci_wait_boot, leaving overlap ambiguous.

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 'CI' framing implies the intended context (pre-flight before running tests) but there is no explicit when-to-use statement, no exclusions, and no pointer to the sibling checks that overlap with it. An agent must infer the routing decision from the name alone.

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

adb_ci_run_testsA

Run Android instrumented tests (androidTest) via am instrument and capture results. Returns structured pass/fail output.

NameRequiredDescriptionDefault
deviceNoDevice serial
runnerNoTest runner class (default: AndroidX JUnit runner)androidx.test.runner.AndroidJUnitRunner
timeoutNoTimeout in ms (10s-10min, default 5 min)
testClassNoSpecific test class to run (optional)
testMethodNoSpecific test method (requires testClass)
testPackageYesTest package (e.g., 'com.example.app.test')

TDQS

A3.5/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 usefully discloses that results are captured and returned as 'structured pass/fail output', but omits key behavior for a test runner: whether it blocks until completion (only implied by the timeout param), what happens on device disconnect or runner crash, and whether the test package must already be installed.

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 mechanism, followed by the return-value note. Nothing is repeated or wasted.

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

Completeness3/5

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

For a six-parameter execution tool with no annotations and no output schema, the description covers what it does and roughly what it returns but leaves operational gaps: prerequisites, blocking semantics, and failure reporting. Adequate minimum viable, not complete.

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

Parameters3/5

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

Schema description coverage is 100%, so every parameter (device, runner, timeout, testClass, testMethod, testPackage) is already documented with defaults and ranges. The description adds no parameter-level meaning beyond the schema, so the baseline 3 applies.

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

Purpose4/5

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

States a specific verb ('Run') plus resource ('Android instrumented tests (androidTest)') and even names the underlying mechanism ('am instrument'), which separates it from Gradle-driven siblings like adb_gradle or adb_build_and_install. It does not explicitly name a competing sibling (adb_farm_run, adb_multi_test, adb_test_session_start), so it stops short of a 5.

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 mechanism mention implies context: use this to execute already-built instrumented tests on a connected device rather than rebuilding. But there is no explicit when-to-use/when-not-to-use statement and no mention of prerequisites (test APK installed, device booted) or alternatives such as adb_farm_run or adb_test_session_start for multi-device/stepwise flows.

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

adb_ci_wait_bootB

Wait for a device or emulator to fully boot. Polls sys.boot_completed and waits for the launcher to be ready. Essential for CI pipelines.

NameRequiredDescriptionDefault
deviceNoDevice serial
timeoutSecondsNoMaximum time to wait for boot in seconds (default 120)

TDQS

B3.4/5.0
Behavior3/5

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

No annotations are supplied, so the description carries the full behavioral burden. It usefully discloses the polling mechanism and the two conditions being awaited (boot_completed and launcher ready), but says nothing about what happens on timeout, whether the call blocks until failure, or what is returned on success versus timeout — a meaningful gap for a wait 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?

Three short sentences, front-loaded with the primary action and followed by the mechanism and the target scenario; nothing is redundant. It stops short of the top mark only because a sentence on timeout/return behavior would have been a better use of the space than the somewhat promotional 'Essential for CI pipelines.'

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 two-optional-parameter, no-annotation, no-output-schema tool, the description covers purpose and mechanism adequately. What is missing is failure semantics on timeout and the expected result shape, both of which the agent needs because no structured field supplies them.

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 'device' and 'timeoutSeconds' (including default 120 and 10–300 bounds) already documented in the schema, so the baseline of 3 applies. The description adds no extra meaning about device selection (e.g., behavior when omitted) or how the timeout interacts with the two polling conditions.

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

Purpose4/5

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

States a specific verb and resource ('Wait for a device or emulator to fully boot') and adds the mechanism (polls sys.boot_completed, waits for launcher readiness), which lets an agent understand exactly what state change is being observed. It does not, however, distinguish itself from nearby siblings such as adb_ci_device_ready, adb_device_state, or adb_wait_stable, so an agent still has to infer which readiness check applies.

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?

'Essential for CI pipelines' gives a clear usage context but no explicit when-to-use/when-not or named alternative among the several readiness siblings. The agent gets a hint about the scenario, not a decision rule.

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

adb_clear_dataA

Clear all data for a package (equivalent to clearing storage in settings). DESTRUCTIVE — irreversibly wipes all app data, cache, databases, shared preferences, and login state. AP5 fix: requires confirm: <packageName> to proceed.

NameRequiredDescriptionDefault
deviceNoDevice serial
confirmNoMust equal packageName to confirm the destructive operation. AP5 fix: prevents accidental data loss from misclicks/mistyped invocations.
packageNameYesPackage name (e.g., 'com.example.app')

TDQS

A3.9/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 burden and does most of it well: it flags irreversibility, enumerates what is wiped (data, cache, databases, shared preferences, login state), and documents the confirm gate. Gaps remain on side effects such as whether the app is force-stopped or runtime permissions revoked, and how the device parameter is resolved when omitted.

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

Conciseness4/5

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

Front-loaded with the destructive warning and what gets destroyed, then the safety gate — a good order with almost no waste. The 'AP5 fix:' tag is internal jargon that costs a few tokens without informing the agent.

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 destructive, annotation-free mutation with three params and no output schema, the description covers the essentials: destructiveness, scope of loss, and the confirmation requirement. It falls short only on device targeting and post-clear app state.

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 explains all three parameters including the confirm-equals-packageName rule. The description only restates the confirm requirement, adding emphasis rather than new semantics, which matches 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?

States a specific verb and resource ('Clear all data for a package') and anchors it to a familiar operation ('equivalent to clearing storage in settings'), which cleanly separates it from siblings like adb_uninstall, adb_force_stop, or adb_rm.

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 settings analogy implies the scenario (resetting an app to first-run state), but there is no explicit when-to-use/when-not guidance and no mention of the obvious alternatives such as uninstall/reinstall or force-stop for less drastic resets.

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

adb_clipboardA

Read or write the device clipboard. Write mode sets the clipboard content; read mode retrieves it. Clipboard access requires Android 10+ and may need the app to be in foreground on Android 12+.

NameRequiredDescriptionDefault
textNoText to write to clipboard (required when action='write')
actionYes'read' to get clipboard, 'write' to set it
deviceNoDevice serial

TDQS

A3.6/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 behavioral burden, and it does disclose the Android 10+ requirement plus a possible foreground requirement on Android 12+. It omits permission prompts, overwrite behavior, failure modes, and the return/format semantics for read mode.

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?

It is three short sentences with no filler, front-loading the core purpose and then adding mode and compatibility details. Every sentence contributes useful 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 simple three-parameter tool with complete schema descriptions and no output schema, the description covers purpose and platform constraints adequately. It leaves minor gaps around what read mode returns and how write failures surface.

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

Parameters3/5

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

Schema description coverage is 100%, with action, text, and device all documented, including that text is required for write. The description adds only a restatement of read/write behavior and no additional parameter constraints or formats, so the baseline 3 applies.

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

Purpose4/5

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

The opening sentence gives a specific verb pair and resource: read/write the device clipboard, and the second sentence disambiguates the two modes. No sibling tool is explicitly named or contrasted, such as adb_input_text, so it stops short of a 5.

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 action enum and mode explanation make the basic use case clear, and the Android 10+/foreground constraint helps the agent anticipate conditions. However, it gives no explicit when-to-use versus alternatives or when-not guidance, so usage is mostly implied.

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

adb_connectA

Connect to a device over WiFi/TCP. Device must be paired first or have TCP/IP enabled.

NameRequiredDescriptionDefault
hostYesDevice IP and port (e.g., '192.168.1.100:5555' or '192.168.1.100:41567')

TDQS

A3.7/5.0
Behavior3/5

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

No annotations are supplied, so the description carries the full disclosure burden. It usefully adds the pairing/TCP/IP prerequisite, but says nothing about connection timeout, whether an existing connection is replaced, or whether the tool blocks until the device is reachable — all of which matter for a stateful connect 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?

Two short sentences with the action front-loaded and the prerequisite second. Nothing is redundant and nothing could be trimmed without losing 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?

The tool is simple (one required parameter, no nesting), and the description covers what it does and the precondition. With no output schema and no annotations, it leaves the return value and failure behavior undocumented, which an agent needs to chain this call 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% and the single 'host' parameter already documents the IP:port format with two concrete examples and a strict pattern. The description adds no syntax or format detail beyond that, so the baseline of 3 applies.

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

Purpose4/5

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

States a specific verb and transport ('Connect to a device over WiFi/TCP'), which is clearly distinct from siblings like adb_pair, adb_tcpip, adb_disconnect and adb_network_auto_connect. It does not name those siblings explicitly, so the agent must infer the boundary, but the resource and mode are 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?

'Device must be paired first or have TCP/IP enabled' gives a concrete precondition that implicitly routes the agent to adb_pair or adb_tcpip when unmet. It stops short of naming those alternatives or saying what to do when connection fails, so it is strong context rather than full 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.

adb_crash_logsA

Read ANR (Application Not Responding) traces and tombstone crash dumps from the device. Requires root access for /data/anr/ and /data/tombstones/. Returns the most recent entries.

NameRequiredDescriptionDefault
typeNoType of crash data to retrieve (default: both)both
deviceNoDevice serial
maxEntriesNoMaximum entries to return per type (1-20, default 5)

TDQS

A3.6/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 root prerequisite and the paths read, plus that only the most recent entries are returned. It does not say whether the tool attempts to acquire root itself, how it fails on an unrooted device, or the format of the returned traces — meaningful gaps for an unannotated 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 short sentences, each earning its place: what is read, the root prerequisite, and the recency/shape of the result. Front-loaded with the resource and free of 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?

For a 3-parameter read tool with no output schema and no annotations, the description covers the essentials: data source, permission requirement, and result recency. The remaining gap — failure behavior without root and the structure of returned trace text — is modest but real.

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 the enum on "type" plus the maxEntries bounds are already fully documented in the schema. The description's phrase "most recent entries" loosely reinforces maxEntries but adds no syntax, format, or per-type behavior beyond what the schema states.

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

Purpose4/5

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

Uses a specific verb ("Read") with two concrete resources (ANR traces and tombstone crash dumps) and even expands the ANR acronym, so the agent knows exactly what data this yields. It does not, however, differentiate itself from nearby siblings such as adb_logcat_crash, adb_bugreport, or adb_dumpsys, which an agent could reasonably confuse it with.

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

Usage Guidelines3/5

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

Usage is only implied by the resource type: reach for this when diagnosing ANRs or native crashes. The description states a hard prerequisite (root access for /data/anr/ and /data/tombstones/), which is genuinely useful context, but it never says when to prefer this over adb_logcat_crash or adb_bugreport, nor what to do if the device is not rooted.

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

adb_current_activityB

Get the currently focused activity and window stack

NameRequiredDescriptionDefault
deviceNoDevice serial

TDQS

B3.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 the burden alone. It does say exactly what is retrieved (focused activity plus the window stack), which is the key behavioral trait for a read-only diagnostic query, but it says nothing about failure modes (no device connected, ambiguous device when omitted), required permissions, or whether the output is truncated.

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?

One short, front-loaded sentence with zero filler; the core resource is stated immediately. It is a bit thin rather than bloated, which is a completeness issue rather than a conciseness flaw.

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

Completeness3/5

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

With no annotations and no output schema, the description is the only source of return-shape information, and it only gestures at 'window stack' without saying what structure or fields come back. For a simple one-parameter read tool this is minimally adequate but leaves real gaps.

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

Parameters3/5

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

There is a single optional parameter (device) and the schema already documents it at 100% coverage, so the baseline of 3 applies. The description adds no meaning beyond the schema, e.g. what happens when device is omitted and multiple devices are attached.

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 gives a specific verb ("Get") and a specific resource ("currently focused activity and window stack"), which is concrete enough to distinguish it from generic siblings like adb_shell or adb_dumpsys. It stops short of naming the closest alternatives (adb_ui_dump, adb_screen_state, adb_top), so an agent still has to infer the boundary.

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

Usage Guidelines2/5

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

There is no when-to-use or when-not-to-use guidance, and no mention of the sibling tools that report overlapping UI state (adb_ui_dump, adb_ui_find, adb_screen_state, adb_dumpsys). The agent must guess whether this is the right tool for 'what screen am I on' questions.

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

adb_device_infoB

Get detailed properties for a connected device (model, OS version, build, etc.)

NameRequiredDescriptionDefault
deviceNoDevice serial (auto-selects if only one connected)

TDQS

B3.2/5.0
Behavior3/5

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

With no annotations supplied, the description carries the full burden. It implies a read-only operation and names example fields, but it does not explain behavior when multiple or no devices are connected, nor does it describe response format or edge cases.

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 definition is a single front-loaded sentence with no wasted wording. The 'etc.' is slightly vague, but overall the size is appropriate for a simple information-retrieval tool.

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 one-parameter read tool with no output schema and no annotations, the description is minimally adequate. It explains the kind of data returned but leaves out device-selection behavior and sibling differentiation that would help an agent call it confidently.

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

Parameters3/5

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

The tool has one optional parameter with 100% schema description coverage, so the schema already fully documents device serial selection. The description adds only the phrase 'connected device' and no additional semantics beyond the schema.

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

Purpose4/5

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

The description states a specific verb and resource ('Get detailed properties for a connected device') and gives examples of returned fields. It is clear what the tool does, but it does not explicitly distinguish itself from siblings like adb_devices, adb_getprop, or adb_device_state.

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?

There is no explicit guidance on when to use this tool versus alternatives such as adb_devices for listing devices or adb_getprop for individual properties. Usage is only weakly implied by 'connected device'.

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

adb_devicesA

List all connected Android devices with their state, model, and product info

NameRequiredDescriptionDefault

No parameters

TDQS

A3.5/5.0
Behavior2/5

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

With no annotations, the description carries the full burden, and it only adds that each row includes state, model and product info. It does not state that the operation is read-only/safe, whether offline or unauthorized devices appear in the list ("connected" vs the reported "state" is ambiguous), or whether it triggers an adb server start.

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 front-loaded sentence with no filler; the scope ("all connected") and the returned fields are packed into one clause that survives skimming.

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

Completeness4/5

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

For a zero-parameter listing tool with no output schema, the description names the three fields an agent will need, which is close to sufficient. The remaining gap is device-state nuance (offline/unauthorized/emulator entries) that would affect how an agent branches after the call.

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

Parameters4/5

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

The tool takes no parameters, so the baseline is 4; there is nothing the description needs to disambiguate and it correctly focuses on the returned per-device fields instead.

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

Purpose4/5

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

States a specific verb and resource ("List all connected Android devices") plus what each entry carries (state, model, product info), which is more than a restatement of the name. It implies scope (all connected devices, not one) versus siblings like adb_device_info, but never names that sibling or states the distinction explicitly.

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

Usage Guidelines3/5

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

Usage is only implied — an agent can infer this is the discovery/enumeration step before per-device calls such as adb_device_info. There is no explicit guidance on when to prefer this over adb_device_info, adb_device_state, or adb_avd_list, and no mention of what to do when zero devices are returned.

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

adb_device_stateA

Get a combined device state snapshot in one call: battery level/status, network connectivity, screen on/off, foreground activity, and orientation. Useful as a pre-check before UI automation or as a quick device health summary.

NameRequiredDescriptionDefault
deviceNoDevice serial

TDQS

A3.8/5.0
Behavior3/5

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

No annotations are supplied, so the description carries the full behavioral burden. "Get ... snapshot" establishes a read-only, point-in-time operation, but the description does not state prerequisites (e.g., an attached/authorized device), what happens when `device` is omitted and multiple devices are connected, or whether the call is fast/rate-limited. For a no-annotation read tool that is adequate but thin.

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 filler: the first front-loads the action and lists the returned components; the second gives the use case. Every clause earns its place and nothing is repeated from the schema.

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

Completeness4/5

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

With no output schema, the description usefully acts as a return-value sketch by enumerating the five state components, which is what an agent needs to know before deciding to call it. The remaining gap is only the no-annotation behavioral detail (device resolution, failure modes), which is minor for a read-only snapshot 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?

Only one parameter (`device`, "Device serial") with 100% schema description coverage, so the schema already documents it fully. The description adds no meaning about device selection or default behavior when the parameter is omitted, which is the one ambiguity that matters given required=0. Baseline 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?

"Get a combined device state snapshot in one call" gives a specific verb plus an aggregation resource, and the description enumerates exactly what is bundled: battery level/status, network connectivity, screen on/off, foreground activity, orientation. The phrase "in one call" implicitly distinguishes it from the granular siblings (adb_battery, adb_network, adb_screen_state, adb_current_activity, adb_orientation), though it never names them.

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?

"Useful as a pre-check before UI automation or as a quick device health summary" gives two concrete usage contexts, which is more than most definitions offer. It stops short of explicit routing advice such as "use adb_battery when you only need battery detail" or an exclusion against adb_health_check/adb_device_info, so the agent must infer the aggregation-vs-single-metric tradeoff.

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

adb_disconnectA

Disconnect from a wireless device, or all wireless devices if no host specified

NameRequiredDescriptionDefault
hostNoDevice IP:port to disconnect (omit for all)

TDQS

A3.6/5.0
Behavior3/5

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

No annotations are supplied, so the description carries the full behavioral burden. It does disclose the most important trait — that with no host argument the operation fans out to ALL wireless devices — but it says nothing about prerequisites (wireless debugging enabled), failure behavior when no device is connected, or whether 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?

A single sentence with zero waste; the scope-of-effect clause is attached directly to the action so the agent reads the conditional behavior up front.

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 one-optional-parameter, no-output-schema tool, the definition covers the essentials: action, target format via schema, and the all-devices fallback. The remaining gap is lack of sibling disambiguation (notably adb_qemu_disconnect) and any error/permission expectations.

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 the schema's own text ('Device IP:port to disconnect (omit for all)') already conveys the omit-for-all semantics. The description restates that fact rather than adding format detail, so the baseline 3 applies.

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

Purpose4/5

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

States a specific verb+resource ('Disconnect from a wireless device') plus the scope of effect when the target is omitted. An agent knows exactly what the tool does, though it does not distinguish itself from the similarly-named sibling adb_qemu_disconnect, which also disconnects but for QEMU guests.

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

Usage Guidelines3/5

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

The clause 'or all wireless devices if no host specified' implicitly tells the agent that omitting the parameter is a valid, deliberately broad mode, which is useful. However, there is no explicit routing guidance: nothing points to adb_connect for the inverse operation, to adb_devices for discovering connected hosts, or explains how this differs from adb_qemu_disconnect.

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

adb_dumpsysB

Run dumpsys for a specific service. Use 'list' as the service to see all available services.

NameRequiredDescriptionDefault
argsNoAdditional arguments passed to dumpsys
deviceNoDevice serial
serviceYesService name (e.g., 'battery', 'telephony.registry', 'activity') or 'list'
result_handleNoOptional. If provided, store this tool's result under `result://<tool>/<name>` for retrieval after compaction. Name must be 1-32 chars, [a-zA-Z0-9_-]. Existing handles with the same tool+name are overwritten. Use adb_result_list to see active handles, adb_result_get or the MCP Resource URI to retrieve.
result_handle_ttlNoOptional. TTL in seconds for the result handle (60 to 604800). Default 43200 (12 hours). Ignored if result_handle is not provided.

TDQS

B3.2/5.0
Behavior2/5

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

No annotations are supplied, so the description carries the full burden, and it discloses nothing about behavior beyond the bare verb. It does not state that dumpsys is read-only and safe, that output is typically very large and verbose, or how device selection works when multiple devices are connected; the result-handle plumbing is documented only 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?

Two short sentences, zero filler, with the core action first and the 'list' discovery tip second. Nothing is repeated and nothing could be cut without loss.

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

Completeness2/5

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

For a five-parameter tool with no annotations and no output schema, the description is thin: it explains service values but leaves args semantics, multi-device behavior, and the character of the output (verbose, read-only, potentially huge) entirely undiscussed.

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 does add one piece of meaning beyond the schema: that the literal value 'list' enumerates all available services rather than naming a service, which the schema only hints at by listing 'list' as an example.

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

Purpose4/5

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

States a specific verb and resource: run dumpsys for a given service. An agent can tell it is an arbitrary-service diagnostic passthrough, though the description never distinguishes it from sibling specializations like adb_battery, adb_telephony, or from adb_shell which could issue the same command.

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 only guidance is the discovery tip: pass 'list' to enumerate available services, which is genuinely useful for a first call. It gives no when-to-use/when-not guidance relative to adb_shell or the curated diagnostic tools, and no prerequisites such as whether a device serial is needed when several devices are attached.

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

adb_emulator_startB

Launch an Android Virtual Device (AVD) emulator. Returns once the emulator process has started.

NameRequiredDescriptionDefault
avdNameYesAVD name (from adb_avd_list)
gpuModeNoGPU acceleration modeauto
coldBootNoForce cold boot (-no-snapshot-load)
headlessNoRun without GUI window (-no-window)

TDQS

B3.3/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, and it does disclose one important behavior: it returns as soon as the process starts, not when the device is booted, which warns the agent that follow-up readiness checks are needed. It says nothing about resource consumption, whether the emulator persists in the background, what happens if an AVD is already running, or failure conditions.

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, purpose first, with the practically important return-timing caveat second. No filler or restated title text.

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

Completeness3/5

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

For a process-launching tool with no annotations and no output schema, the definition covers what it does and when it returns, but omits prerequisites (emulator SDK availability), pre-conditions (AVD already running), and the expected follow-up of waiting for boot. Adequate but with clear gaps for a state-changing launch operation.

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

Parameters3/5

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

Schema description coverage is 100%, so every parameter including the gpuMode enum and the coldBoot/headless flags is already documented in the schema with their underlying emulator flags. The description adds no additional parameter meaning, so the baseline of 3 applies.

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

Purpose4/5

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

States a specific verb and resource: "Launch an Android Virtual Device (AVD) emulator." This clearly separates it from adb_emulator_stop and adb_avd_list, though it does not explicitly distinguish it from the nearby adb_qemu_start / adb_ci_wait_boot siblings.

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?

There is no explicit when-to-use or when-not-to-use guidance. The description never says to call this before wait/boot-check tools or that a running emulator should be stopped first, leaving the agent to infer sequencing from sibling names alone.

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

adb_emulator_stopB

Stop a running emulator. Uses 'adb emu kill' for graceful shutdown.

NameRequiredDescriptionDefault
deviceNoEmulator device serial (e.g., 'emulator-5554') — alternative to avdName
avdNameNoAVD name to stop. If omitted, lists running emulators.

TDQS

B3.2/5.0
Behavior3/5

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

With no annotations, the description carries full behavioral burden; it does disclose the underlying mechanism ('adb emu kill') and that the shutdown is graceful, which is real added context. It is silent on what happens to AVD state/snapshots, whether in-flight work is interrupted, and failure behavior when no emulator matches.

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

Conciseness4/5

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

Two short sentences, front-loaded with the action and followed by the implementation detail. No wasted wording, though the second sentence could have been spent on differentiation instead of mechanism alone.

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

Completeness4/5

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

For a zero-required-parameter, fully documented tool with no output schema, this is nearly complete; the agent knows what it does and how. The missing piece is disambiguation from other stop/restart siblings in a very large tool set.

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 both optional parameters (device, avdName) and their alternatives are already documented in the schema. The description adds no additional meaning about how the parameters interact or what happens when both are given.

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

Purpose4/5

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

States a specific verb and resource: 'Stop a running emulator,' which tells an agent exactly what the tool does. It does not distinguish itself from nearby siblings such as adb_qemu_stop or adb_reboot, so the agent must infer which stop mechanism applies.

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?

There is no explicit guidance on when to use this instead of adb_qemu_stop, adb_reboot, or adb_force_stop, nor on preconditions (emulator must be running, one vs. multiple emulators). The only routing hint — that omitting avdName lists running emulators — lives in the schema, not the description.

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

adb_extract_apksB

Pull all APK splits for a package from the device to a local directory. Useful for analysis, backup, or transfer to another device.

NameRequiredDescriptionDefault
deviceNoDevice serial
outputDirNoLocal output directory (default: temp dir)
packageNameYesPackage name to extract

TDQS

B3.4/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 behavioral burden; it does disclose the key trait that this writes files to the local filesystem and retrieves all splits rather than just the base APK. However, it says nothing about overwrite behavior for existing files, required permissions, or what happens if the package has no splits or is not installed.

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 compact sentences with the action stated first and the rationale second; nothing is redundant. The second sentence is somewhat generic but still earns its place by orienting the agent toward use cases.

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 three-parameter tool with no annotations and no output schema, the definition is adequate but thin: it never indicates what the tool returns (file paths? count?) or how partial failures are reported, which an agent needs to chain calls 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 device, outputDir, and packageName are already documented, including the temp-dir default. The description reinforces 'all APK splits' semantics for packageName but adds no format or constraint detail beyond the schema, so the baseline of 3 applies.

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

Purpose4/5

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

States a specific verb and resource: pulling all APK splits for a named package from the device to a local directory. This is clearly distinguishable from adb_list_splits or adb_pull in intent, though the description never names those siblings to reinforce the distinction.

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 second sentence lists intended use cases (analysis, backup, transfer) which implies when to reach for it, but there is no explicit when-not guidance and no pointer to alternatives such as adb_list_splits for enumeration-only or adb_pull for single-file retrieval.

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

adb_farm_matrixA

List available device models and API levels on Firebase Test Lab. Use to plan test matrices.

NameRequiredDescriptionDefault
typeNoList available device models or Android API versionsmodels

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 carry the behavioral burden. 'List' implies a read-only operation against Firebase Test Lab, but the description does not disclose authentication requirements, whether results are live or cached, pagination, or the returned shape.

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, with the core listing capability front-loaded and the planning use case immediately after. There is no redundant or wasted wording.

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 one-parameter list tool, the description covers purpose and a practical use case. However, with no annotations and no output schema, it leaves out return format, authentication expectations, and result granularity, which would help an agent call it with confidence.

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 optional 'type' parameter has 100% schema description coverage and an enum, so the schema already explains it. The description mentions models and API levels but adds no format, default, or enum guidance beyond what the schema provides; baseline 3 applies.

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

Purpose4/5

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

The description names a specific verb ('List') and resource ('available device models and API levels on Firebase Test Lab'), making the scope clear. It implicitly separates planning from running tests but does not explicitly name sibling alternatives like adb_farm_run or adb_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?

It gives a clear use case ('Use to plan test matrices'), which tells the agent when this tool is appropriate. It lacks explicit exclusions or guidance on when to use adb_farm_run/adb_farm_results instead, so it falls short of a 5.

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

adb_farm_resultsA

Retrieve results from the most recent Firebase Test Lab run, or a specific test matrix ID. Shows pass/fail status, device results, and links to logs and artifacts.

NameRequiredDescriptionDefault
matrixIdNoTest matrix ID (from adb_farm_run output). Omit to list recent matrices.

TDQS

A3.5/5.0
Behavior3/5

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

No annotations are supplied, so the description carries the burden. 'Retrieve' and 'Shows' imply a non-mutating read, and the description usefully discloses the return contents (status, device results, links). It does not confirm read-only/no-side-effects or state what happens when no matrices exist.

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

Conciseness4/5

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

A single well-formed sentence, front-loaded with the core action and followed by the return contents. Nothing extraneous, though it is on the terse side for a tool with no annotations.

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?

Low complexity, one optional parameter, no output schema, and the description already characterizes the returned payload. Only gap is the absence of any behavioral/permission context, which matters slightly since annotations are absent entirely.

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?

Only one optional parameter with 100% schema coverage; the schema already explains matrixId and that omitting it lists recent matrices. The description adds no format, ID syntax, or fallback behavior beyond the schema, so baseline 3 applies.

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

Purpose4/5

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

States a specific verb (Retrieve) and resource (results from a Firebase Test Lab run / test matrix ID) and enumerates the payload (pass/fail, device results, log and artifact links). It is clearly distinct from adb_farm_run (which produces runs) though it never names a sibling explicitly.

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

Usage Guidelines3/5

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

Implies usage via 'most recent run' vs 'specific test matrix ID', and the schema cross-references adb_farm_run output. However it never states when to prefer this over adb_farm_matrix or the adb_result_* family, so routing between the farm and result tools is left to inference.

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

adb_farm_runB

Run tests on Firebase Test Lab. Uploads an APK and test APK, executes instrumented tests across specified device models and API levels. Requires gcloud CLI authenticated with a Firebase project.

NameRequiredDescriptionDefault
appApkYesPath to the app APK file
devicesNoDevice specs as 'model=DEVICE,version=API' (e.g., 'model=bluejay,version=33'). Omit for default device.
testApkYesPath to the test/instrumentation APK file
timeoutNoTest timeout passed to gcloud --timeout (e.g., '300s', '10m'). This is the LAB-side timeout.300s
testTargetsNoSpecific test class or method (e.g., 'class com.example.MyTest')
execTimeoutMsNoLocal execFile timeout for the gcloud invocation in ms (1min-60min, default 10min). Y4 fix: bigger device matrices or larger APKs can plausibly exceed the previous hardcoded 10min.
resultsBucketNoGCS bucket for results (omit for default)

TDQS

B3.4/5.0
Behavior3/5

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

With no annotations, the description must carry the behavioral load. It correctly discloses that this is a remote cloud-lab execution that uploads artifacts and requires authenticated gcloud, which is valuable context. It omits whether the call blocks until the matrix finishes, whether it returns a run ID for later retrieval via adb_farm_results/adb_farm_matrix, and what happens to uploaded APKs.

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

Conciseness4/5

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

Three short sentences, front-loaded with the action and then the mechanism and prerequisite; no filler or restatement of the tool name. It could be marginally tighter by folding the prerequisite into the first sentence, but every sentence earns its place.

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

Completeness3/5

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

For a 7-parameter remote-execution tool with no annotations and no output schema, the definition covers what is run and what credentials are needed but leaves the result lifecycle underspecified. An agent cannot tell from this description how to fetch results afterward or how long a run may take, both of which matter for a cloud matrix job.

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 every parameter including devices syntax, timeout vs execTimeoutMs distinction, and testTargets is already documented in the schema. The description only restates that device models and API levels are configurable, adding no meaning beyond the structured fields, so the baseline of 3 applies.

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

Purpose4/5

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

"Run tests on Firebase Test Lab" names a specific verb and resource, and the follow-up sentence clarifies the mechanism (upload app APK + test APK, execute instrumented tests across device models and API levels). This distinguishes it from local-execution siblings like adb_shell or adb_ci_run_tests, though it never names an alternative explicitly.

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

Usage Guidelines3/5

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

The description gives a real prerequisite (gcloud CLI authenticated against a Firebase project), which is the main barrier to using this tool. It does not say when to prefer it over sibling runners such as adb_ci_run_tests, adb_multi_test, or adb_test_session_start, so selection between them is left to inference.

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

adb_file_checksumA

Compute SHA-256 hash of a file on the device. Critical for firmware integrity verification, tamper detection, and comparing files across devices. Read-only operation. Reports file size alongside the hash.

NameRequiredDescriptionDefault
pathYesFile path on device
rootNoUse root shell for protected paths
deviceNoDevice serial
algorithmNoHash algorithm (default: sha256)sha256

TDQS

A3.5/5.0
Behavior3/5

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

With no annotations supplied, the description carries the full disclosure burden. It does state "Read-only operation" and that file size is reported alongside the hash, which is genuinely useful. It omits what happens for missing/unreadable files, the overhead of hashing large files, or what the root flag changes operationally.

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

Conciseness4/5

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

Three short sentences, front-loaded with the operation and followed by use cases and the read-only/side-output facts. The phrase "Critical for..." is mildly promotional but still conveys intent, so only minor trimming is possible.

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 4-parameter, 100%-covered schema with no output schema, the description covers the operation, safety profile, and return content (hash plus file size), which is what an agent needs to invoke it. Only error behavior and the operational effect of the root flag remain unstated.

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 all four parameters (path, root, device, algorithm) are already documented, establishing a baseline of 3. The description adds no parameter-level meaning beyond the schema and even implies SHA-256 only, while the schema allows sha1/md5 selection.

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

Purpose4/5

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

The description names a specific verb and resource ("Compute SHA-256 hash of a file on the device") and is easily separable from siblings like adb_file_stat or adb_cat. It is slightly narrower than the actual tool, since the schema's algorithm enum also permits sha1 and md5, but the core purpose is 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?

It gives use-case contexts (firmware integrity verification, tamper detection, cross-device comparison), which implies when to reach for it. However, it never explicitly says when to use adb_file_stat or adb_cat instead, nor does it state prerequisites or exclusions, so the agent must infer the routing.

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

adb_file_chmodA

Change file permissions on the device. Mode must be a valid octal string (e.g., '755', '644', '600'). Recursive mode uses depth-based protection: refuses at depth ≤ 2 from root. Note: sdcardfs/FUSE ignores Unix permissions — file access on /sdcard is controlled by Android's package ownership model.

NameRequiredDescriptionDefault
modeYesOctal permission mode (e.g., '755', '644', '0600')
pathYesFile or directory path
rootNoUse root shell (typically required for chmod)
deviceNoDevice serial
recursiveNoApply recursively to directory contents. Depth-protected.

TDQS

A4/5.0
Behavior4/5

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

No annotations exist, so the description carries the full behavioral burden and does meaningful work: it discloses a safety guard ('refuses at depth ≤ 2 from root') and a silent-failure filesystem caveat (/sdcard, sdcardfs/FUSE). It doesn't describe the failure/return shape on permission errors or that root is typically required, leaving some behavioral gaps.

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

Conciseness4/5

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

Three sentences, front-loaded with the core action, then the mode constraint, then the recursive guard and the filesystem caveat. The mode sentence duplicates the schema pattern/examples and is the one line that doesn't fully earn 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 mutating 5-parameter tool with no annotations and no output schema, the description covers the format constraint, recursive safety semantics, and the environment caveat where the operation silently does nothing. Remaining gaps — root requirement and error behavior — are either in the schema or minor for a chmod operation.

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 the baseline is 3; the description earns an extra point by supplying concrete octal examples and, more importantly, explaining that `recursive` triggers a depth-based refusal at depth ≤ 2 from root — a constraint the schema only hints at with 'Depth-protected.'

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

Purpose4/5

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

The description opens with a specific verb+resource ('Change file permissions on the device') that clearly distinguishes it from siblings like adb_file_chown, adb_file_stat, and adb_file_touch. It never names an alternative explicitly, but the operation is unambiguous.

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

Usage Guidelines4/5

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

It implicitly tells the agent when NOT to bother: on /sdcard the chmod is a no-op because sdcardfs/FUSE ignores Unix permissions. It also warns that recursive mode is depth-protected. It stops short of naming alternatives (e.g., adb_file_chown for ownership) or stating the root prerequisite, which the schema carries instead.

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

adb_file_chownA

Change file ownership on the device. Requires root. Supports both numeric UID:GID (e.g., '10150:10150') and symbolic user:group (e.g., 'system:system'). Recursive mode uses depth-based protection: refuses at depth ≤ 2 from root. Note: sdcardfs/FAT32 ignore ownership changes.

NameRequiredDescriptionDefault
pathYesFile or directory path
ownerYesOwner in user:group format (e.g., '0:0', 'system:system', '10150:10150')
deviceNoDevice serial
recursiveNoApply recursively to directory contents. Depth-protected.

TDQS

A4.1/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 substantial work: root requirement, a concrete recursive guard threshold, and a filesystem caveat where the operation silently does nothing. It does not say what is returned or whether a refusal raises an error versus a partial success, which is the main remaining gap for a mutation tool.

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

Conciseness5/5

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

Four short sentences, each carrying a distinct fact (purpose, prerequisite, input formats, guard rail, caveat), with the purpose front-loaded and zero 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?

For a mutating file operation with no annotations and no output schema, the description covers prerequisites, accepted input forms, safety limits, and known no-op filesystems. Only failure/return semantics remain unaddressed.

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, but the description adds genuine meaning beyond it by confirming both numeric and symbolic owner formats are accepted and by spelling out the depth-protection rule that the schema only labels as "Depth-protected." The device parameter is left entirely to the schema.

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

Purpose4/5

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

"Change file ownership on the device" is a specific verb+resource pair, and the owner-format detail makes it clearly the chown counterpart to adb_file_chmod. It never names adb_file_chmod explicitly, so sibling differentiation is implied by resource semantics rather than stated.

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

Usage Guidelines4/5

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

It states the key precondition ("Requires root") and two conditions under which the call is pointless or blocked (sdcardfs/FAT32, depth ≤ 2 in recursive mode). It stops short of pointing to adb_file_chmod or adb_shell as the alternative when root is unavailable.

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

adb_file_copyB

Copy a file or directory on the device. Pre-flight checks source size against destination available space. Post-verifies the copy by comparing file sizes. For recursive directory copies, use -r flag.

NameRequiredDescriptionDefault
rootNoUse root shell for protected paths
deviceNoDevice serial
sourceYesSource file or directory path
recursiveNoCopy directories recursively (-r)
destinationYesDestination path

TDQS

B3.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 behavioral burden, and it does disclose two non-obvious traits: a pre-flight free-space check and a post-copy size verification. It still omits critical mutation semantics — whether an existing destination is overwritten, what happens to a partial copy on failure, and whether verification failure raises an error or merely reports it.

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

Conciseness4/5

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

Three short sentences, front-loaded with the core action, then the safety behaviors, then the recursive note. The final sentence is largely redundant with the `recursive` schema property, but overall there is little waste.

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 mutation tool with no annotations and no output schema, the description should say more about results and failure modes — particularly since it advertises post-copy verification whose outcome an agent would need to interpret. Overwrite behavior and the shape of the verification result are the notable 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%, so all five parameters (including `root` for protected paths and `recursive`) are already documented in the schema. The description only echoes the `-r` mapping for recursion and adds no meaning beyond that, so the baseline of 3 applies.

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

Purpose4/5

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

The description gives a specific verb and resource ('Copy a file or directory on the device') and mentions recursive directory handling. However, in a sibling set containing adb_push, adb_pull, and adb_file_move, it never states how this on-device copy differs from those, leaving the agent to infer the distinction.

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

Usage Guidelines2/5

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

The only usage-like statement is 'For recursive directory copies, use -r flag,' which merely restates the `recursive` parameter. There is no guidance on when to prefer this over adb_push (host-to-device), adb_pull, or adb_file_move, and no stated preconditions such as root requirements for protected paths.

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

adb_file_fsinfoA

Report filesystem details for any path: filesystem type, mount point, mount options, capacity, usage, read-only status, permission support, symlink support, max file size, timestamp resolution, encryption status, and SELinux context. Essential for understanding what operations are possible before attempting them.

NameRequiredDescriptionDefault
pathYesFile or directory path to inspect
rootNoUse root shell for system paths
deviceNoDevice serial

TDQS

A3.6/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, and 'Report' plus the attribute list implies a safe read-only inspection. However, it never states that it is non-mutating, whether elevated permissions are needed for system paths, or what happens on unsupported/inaccessible paths, so meaningful behavioral gaps remain.

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: the first front-loads the purpose and the return contents, the second the motivation. The long field enumeration is dense but each item conveys a distinct capability the caller may depend on.

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?

There is no output schema, so the description usefully compensates by listing the returned fields, which is what an agent needs to decide whether this tool answers its question. Only error/permission failure behavior is left unexplained for a 3-parameter inspection 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 path, root, and device are all documented in the schema itself. The description adds no extra meaning about path formats (e.g., device-absolute paths) or when to set root, so the baseline of 3 applies.

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

Purpose4/5

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

The description names a specific verb and resource ('Report filesystem details for any path') and then enumerates the reported attributes (fs type, mount point, capacity, SELinux context, etc.), which makes it unmistakable against siblings like adb_file_stat or adb_ls. It stops short of explicitly naming the nearest sibling to contrast with, so it is clear but not fully differentiated.

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

Usage Guidelines4/5

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

It gives a concrete usage context: 'Essential for understanding what operations are possible before attempting them', telling the agent to call this as a pre-flight check before write/mutation operations. It provides no exclusions or named alternatives, so it lands at clear-context-without-routing.

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

adb_file_moveA

Move or rename a file/directory on the device. Moving FROM a system path is destructive — source depth protection refuses if source is at depth ≤ 1 from root. Symlinks resolved before checks. Cross-filesystem moves (e.g., /data → /sdcard) do a copy+delete internally and can be slow for large files.

NameRequiredDescriptionDefault
rootNoUse root shell for protected paths
deviceNoDevice serial
sourceYesSource file or directory path
destinationYesDestination path

TDQS

A3.9/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 burden and does substantial work: it flags destructiveness, the source-depth protection rule (depth ≤ 1 from root), pre-check symlink resolution, and the copy+delete fallback with a performance warning for cross-filesystem moves. It still omits whether an existing destination is overwritten and whether root is required for protected paths.

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

Conciseness4/5

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

Four dense sentences, front-loaded with the core action, and each subsequent sentence adds a distinct hazard or behavior. Slight density in the depth-protection clause costs it the top mark, but there is 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?

For a mutation tool with no annotations and no output schema, the description covers the important failure and performance characteristics an agent needs before calling it. The remaining gaps — destination overwrite semantics and explicit root prerequisite — are minor but real.

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 source, destination, device and root are already documented, and the baseline is 3. The description adds indirect meaning (system paths tie to the root flag, symlink resolution affects how source is interpreted), but it never explicitly explains the root or device parameters.

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

Purpose5/5

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

States a specific verb pair (move/rename) and resource (file/directory on the device), which cleanly separates it from sibling tools like adb_file_copy, adb_rm, adb_push and adb_pull. The rename capability is called out explicitly, so an agent knows this is not just a path-to-path transfer.

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

Usage Guidelines3/5

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

Usage is implied rather than stated: an agent infers 'use this to relocate or rename a path' but no alternative is named and no explicit when-not guidance is given. The source-depth refusal rule is operation-time behavior, not selection guidance, though it does hint at when the call will fail.

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

adb_file_replaceB

Find and replace text in a file on the device. Uses sed internally with proper escaping — exposes a safe interface without requiring sed syntax knowledge. Supports global replacement, line-targeted edits, and optional backup creation. Reports match count.

NameRequiredDescriptionDefault
findYesText to find (literal string, not regex)
pathYesFile path on device
rootNoUse root shell for protected paths
backupNoCreate a .bak backup before modifying
deviceNoDevice serial
globalNoReplace all occurrences (default: true). Set false for first-only.
replaceYesReplacement text
lineNumberNoRestrict replacement to a specific line number

TDQS

B3.4/5.0
Behavior3/5

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

No annotations are supplied, so the description carries the full burden. It does disclose real behavior: sed-based in-place editing with escaping, global vs first-only, line targeting, an optional .bak backup, and a returned match count. It stays silent on what happens on zero matches, whether a missing file errors, permission failures, and whether edits are atomic, which are material for a mutation tool.

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

Conciseness4/5

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

Three short sentences, front-loaded with the action and followed by capabilities. The sed-internals clause is useful for trust but borders on implementation trivia; nothing else is wasted.

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

Completeness3/5

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

For an 8-parameter mutation tool with no annotations and no output schema, the description covers the core mechanics and the match-count return, but omits failure modes and permission behavior. It is adequate, not complete.

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

Parameters3/5

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

Schema coverage is 100%, so the baseline is 3. The description adds modest value by mapping its three feature phrases onto the global, lineNumber and backup parameters, but it adds nothing for root or device beyond what the schema already states.

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

Purpose4/5

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

"Find and replace text in a file on the device" gives a specific verb and resource, and the sed note implicitly separates it from raw adb_shell usage and from adb_file_write (whole-file writes). It never names a sibling tool explicitly, so an agent still has to infer the boundary against adb_shell or adb_grep on its own.

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

Usage Guidelines3/5

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

Usage is only implied: you call it when you want to edit file contents in place. There is no statement of when to prefer it over adb_shell sed, adb_push of a rewritten file, or adb_grep plus adb_file_write, and no mention of prerequisites such as write permissions or the file existing.

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

adb_file_statA

Get detailed file metadata: size, permissions, ownership, timestamps (access/modify/change), SELinux security context, and file type. Read-only operation.

NameRequiredDescriptionDefault
pathYesFile or directory path on device
rootNoUse root shell for protected paths
deviceNoDevice serial

TDQS

A4/5.0
Behavior4/5

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

The description clearly states it is a 'read-only operation,' which is a critical behavioral constraint absent in the annotations. It also informs the user of complex data points like SELinux context, adding behavioral 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?

The description is extremely concise, front-loading the function and listing all major return types in a single, dense statement with no unnecessary fluff.

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

Completeness4/5

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

Given the complexity (SELinux, multiple timestamps) and the lack of an output schema, the description is highly complete. It provides all the necessary high-level information for the agent to identify the correct tool for the job.

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

Parameters3/5

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

Since the schema provides 100% coverage, the baseline score is 3. The description does not add specific semantic meaning to the parameters (path, root, device) beyond what is already defined in the schema.

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

Purpose5/5

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

The description uses a specific verb ('Get') and clearly defines the resource (detailed file metadata). By listing specific fields like SELinux context and timestamps, it differentiates this tool from basic file listing tools (like adb_ls).

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 defines what the tool captures (the positive use case) but does not explicitly guide the user on when to use it versus a similar tool. It implies usage but lacks explicit 'when/when-not' comparisons with siblings.

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

adb_file_touchA

Create an empty file or update timestamps. Three modes: create (touch non-existent path), update (set atime/mtime to now), or set explicit timestamp. On FAT32, timestamps have 2-second resolution. On tmpfs, timestamps are volatile.

NameRequiredDescriptionDefault
pathYesFile path on device
rootNoUse root shell for protected paths
deviceNoDevice serial
timestampNoExplicit timestamp in 'YYYY-MM-DD HH:MM:SS' format. Omit to use current time.

TDQS

A3.9/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 burden and does deliver real behavioral context that structured fields lack: FAT32's 2-second timestamp resolution and tmpfs volatility are exactly the kind of environment-dependent quirks an agent needs. It omits failure behavior (missing parent directory, permission denial) and any mention that this is a write/mutation on the device filesystem.

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

Conciseness5/5

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

Three short sentences, front-loaded with the core action, then the mode enumeration, then the environment caveats. Nothing is padded and no sentence could be removed without losing 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 4-parameter, no-annotation, no-output-schema mutation tool, the description covers modes and filesystem-specific timestamp behavior well. It leaves gaps around error conditions and permission/root escalation, which matter for a write operation against protected paths.

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 the baseline is 3. The description does add a little semantic framing by tying the timestamp parameter to the 'set explicit timestamp' mode and noting that omitting it means 'now', but the schema's own parameter text already says 'Omit to use current time', making most of this redundant.

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

Purpose4/5

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

States a specific verb and resource ("Create an empty file or update timestamps") and immediately enumerates the three operational modes, which lets an agent distinguish it from adb_file_write (content writing) and adb_mkdir (directory creation). It stops short of naming any sibling explicitly, so the differentiation is inferred rather than stated.

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

Usage Guidelines3/5

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

The three modes (create/update/set timestamp) give implied selection guidance, but the description never says when to pick this over adb_file_write, adb_file_stat, or adb_mkdir. There are no exclusions, no prerequisites (e.g. parent directory must exist), and no note on when the root flag is needed beyond what the schema already says.

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

adb_file_writeA

Create or overwrite a text file on the device. Content is delivered via shell heredoc — suitable for config files, scripts, test fixtures, and small data files. For large or binary files, use adb_push instead. Shell buffer limits content to approximately 128KB.

NameRequiredDescriptionDefault
pathYesDestination file path on device
rootNoUse root shell for protected paths
appendNoAppend to existing file instead of overwriting
deviceNoDevice serial
contentYesFile content to write

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 behavioral burden and discloses key traits: it overwrites existing files, uses shell heredoc delivery, and is limited to about 128KB. It does not cover error behavior, permissions, or whether parent directories must exist, but the essential mutation and size constraints are stated.

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 compact and front-loaded, immediately stating the primary action. Every sentence adds value: use cases, the large/binary alternative, and the size limit.

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 text file write tool with no output schema and no annotations, the description covers the main operational concerns: overwrite behavior, text suitability, heredoc delivery, and size limits. Minor gaps remain around permissions, parent-directory requirements, and append-mode interaction, but the definition is largely complete for correct invocation.

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 path, root, append, device, and content are already documented in the schema. The description adds useful meaning about content delivery via heredoc and the 128KB buffer limit, but it does not explain the other parameters beyond what the schema provides, matching the baseline for high schema coverage.

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: create or overwrite a text file on the device. It also distinguishes the tool from adb_push for large or binary files, so an agent can identify its niche among many adb file 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?

It gives concrete use cases such as config files, scripts, test fixtures, and small data files. It also explicitly names the alternative adb_push for large or binary files, making the when-to-use and when-not-to-use boundary clear.

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

adb_findA

Search for files on the device by name or pattern. Uses the find command with glob matching. Results are capped at maxResults to prevent unbounded output. Reports whether results were truncated.

NameRequiredDescriptionDefault
nameYesFilename pattern (glob: *.apk, config.*, *test*)
rootNoUse root shell for system paths
typeNoFilter by type: file, directory, or anyany
deviceNoDevice serial
maxDepthNoMaximum directory depth to search (1-50, default 10)
maxResultsNoMaximum results to return (1-10000, default 500)
searchPathNoStarting directory for search/sdcard
result_handleNoOptional. If provided, store this tool's result under `result://<tool>/<name>` for retrieval after compaction. Name must be 1-32 chars, [a-zA-Z0-9_-]. Existing handles with the same tool+name are overwritten. Use adb_result_list to see active handles, adb_result_get or the MCP Resource URI to retrieve.
result_handle_ttlNoOptional. TTL in seconds for the result handle (60 to 604800). Default 43200 (12 hours). Ignored if result_handle is not provided.

TDQS

A3.6/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 and does deliver real value: it discloses the maxResults cap and that truncation is reported, which tells the agent output can be incomplete. It omits other behavioral facts that matter here — that root may be needed for system paths, that the search is scoped to searchPath (default /sdcard) and maxDepth, and roughly what a result entry looks like.

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

Conciseness5/5

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

Four short sentences, each carrying distinct information (purpose, mechanism, output bound, truncation reporting), with purpose front-loaded and zero 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?

For a 9-parameter, no-output-schema, no-annotation tool, the description covers the essentials an agent needs to call it correctly: the glob matching model and the bounded-output contract. Remaining gaps — default search scope, depth limiting, root requirement — are all documented in the schema, so completeness is only marginally short.

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 reinforces two parameters (maxResults cap and its truncation consequence) and the glob semantics of 'name', but adds nothing for root, device, maxDepth, searchPath, or the result_handle pair beyond what the schema already documents.

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

Purpose4/5

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

States a specific verb and resource ('Search for files on the device by name or pattern') and adds the implementation basis ('find command with glob matching'), which distinguishes it from content searches and simple listings. It never names the closest siblings (adb_ls, adb_grep, adb_file_stat, adb_ui_find), so differentiation must be inferred from the verb.

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 glob-pattern framing implies when to reach for this tool (name-pattern lookups across a tree), but there is no explicit when-to-use/when-not guidance and no mention of adb_ls for single-directory listing or adb_grep for contents. An agent must infer the boundary from the sibling names alone.

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

adb_firmware_diffA

Compare all firmware components between two saved OTA fingerprints, or between the current device state and a saved fingerprint. Compares baseband (with chipset-specific parsed component diffs), bootloader, kernel, security patch, build ID, and Android version.

NameRequiredDescriptionDefault
toNoPath to 'to' fingerprint JSON (or 'current' to use live device state). Defaults to the most recent fingerprint.
fromNoPath to 'from' fingerprint JSON (or 'current' to use live device state). Defaults to the second-most-recent fingerprint.
deviceNoDevice serial (used when 'from' or 'to' is 'current', or for auto-selecting fingerprints)
result_handleNoOptional. If provided, store this tool's result under `result://<tool>/<name>` for retrieval after compaction. Name must be 1-32 chars, [a-zA-Z0-9_-]. Existing handles with the same tool+name are overwritten. Use adb_result_list to see active handles, adb_result_get or the MCP Resource URI to retrieve.
result_handle_ttlNoOptional. TTL in seconds for the result handle (60 to 604800). Default 43200 (12 hours). Ignored if result_handle is not provided.

TDQS

A4/5.0
Behavior3/5

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

No annotations are supplied, so the description carries the burden. The word "Compare" and the use of saved fingerprints imply a read-only analysis, and it discloses that baseband diffs are chipset-specific parsed diffs. However, it never states that no device modification occurs, what permissions/live-device requirements exist when 'current' is used, or what the diff output looks like when components match or are missing.

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

Conciseness5/5

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

Two sentences, zero filler, with the primary action and comparison modes front-loaded and the compared component list following. Nothing is redundant with the tool name or title.

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

Completeness4/5

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

There is no output schema, and the enumerated components effectively tell the agent what the result covers. What is missing is how differences are presented (per-field old/new values, severity, absent-component handling), which would matter for an agent planning to parse the output, but the core capability is fully conveyed.

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 defaults for 'from'/'to', the 'current' sentinel, the device serial semantics, and the result_handle/TTL contract are all already documented in the schema. The description adds no parameter-level meaning beyond that, which meets the baseline of 3 for fully covered schemas.

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 ("Compare") with a specific resource ("all firmware components") and enumerates the compared fields: baseband, bootloader, kernel, security patch, build ID, and Android version. It also distinguishes the two operating modes (fingerprint-vs-fingerprint, or live device vs fingerprint), which separates it from siblings like adb_firmware_probe and adb_firmware_history.

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 clearly establishes the context in which the tool is used: comparing two saved OTA fingerprints or the current device state against a saved one. It does not explicitly name alternatives (e.g., prefer adb_firmware_probe to capture a fingerprint first) or state when not to use it, so it stops short of a full routing statement.

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

adb_firmware_historyB

Show firmware version progression across all saved OTA fingerprints for a device. Tracks baseband, bootloader, kernel, security patch, and build ID changes between consecutive snapshots with parsed component diffs.

NameRequiredDescriptionDefault
deviceNoDevice serial (filters fingerprints to this device)

TDQS

B3.3/5.0
Behavior2/5

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

With no annotations, the description carries the full behavioral burden. It discloses that results are derived from previously saved fingerprints and are expressed as parsed per-component diffs, which is useful, but says nothing about prerequisites (must fingerprints be captured first?), how fewer than two snapshots are handled, ordering, or whether the call is read-only.

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

Conciseness5/5

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

Two sentences, no filler, with the core purpose front-loaded and the component list following as supporting detail. Every clause contributes and nothing is repeated from structured fields.

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 one-parameter read tool with no output schema, the description conveys what is compared and which components appear in the diffs. It leaves open prerequisites around saved fingerprints and the empty/insufficient-data case, which matter for correct invocation of a history-style 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 the single 'device' parameter is fully documented, so the baseline is 3. The description only echoes the filtering idea with 'for a device' and adds no format, default, or behavior detail beyond the schema.

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

Purpose4/5

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

Names a specific verb and resource: showing firmware version progression across saved OTA fingerprints, and enumerates the tracked components (baseband, bootloader, kernel, security patch, build ID). It is clearly a historical comparison tool rather than a probe, but it never explicitly distinguishes itself from near neighbors like adb_ota_history, adb_firmware_probe, or adb_firmware_diff.

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

Usage Guidelines3/5

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

Usage is implied by the phrasing 'across all saved OTA fingerprints' and 'between consecutive snapshots', which tells the agent this is for retrospective comparison rather than live probing. There is no explicit when-to-use statement, no exclusion, and no named alternative, so the agent must infer the choice among the OTA/firmware siblings.

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

adb_firmware_probeA

Comprehensive firmware identification for the connected device. Reports all firmware components: baseband (parsed by chipset family — Shannon, Qualcomm, MediaTek, Unisoc, HiSilicon, Intel), bootloader, RIL implementation, kernel, security patch, A/B slot, verified boot state, and OTA-updatable partitions.

NameRequiredDescriptionDefault
deviceNoDevice serial

TDQS

A3.6/5.0
Behavior3/5

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

With no annotations, the description must carry the behavioral burden; 'reports' strongly implies a read-only inspection of the connected device, and the component list clarifies output scope. However, it does not disclose prerequisites such as root or auth requirements, latency, or behavior when components are unavailable.

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 main purpose and then efficiently enumerates the reported firmware components. There is no filler or redundant wording.

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

Completeness4/5

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

Although there is no output schema, the description identifies the return contents in detail, including chipset-family parsing for baseband. It is complete enough for an agent to know what the probe returns, though it could say more about prerequisites and sibling selection.

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

Parameters3/5

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

Schema coverage is 100% and the sole parameter is already documented as a device serial. The description does not add any further meaning about that parameter, so the schema fully handles it.

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

Purpose4/5

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

The description states a specific operation — comprehensive firmware identification for the connected device — and enumerates the components it reports. It is clear about scope without explicitly differentiating itself from closely related siblings such as adb_baseband_info or adb_ota_fingerprint.

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 word 'comprehensive' implies this is the tool for a full firmware snapshot, but the description never states when to use it instead of targeted siblings. It gives useful implied context but no explicit alternatives or exclusions.

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

adb_force_stopB

Force-stop an app immediately. The most common debugging action.

NameRequiredDescriptionDefault
deviceNoDevice serial
packageNameYesPackage name (e.g., 'com.example.app')

TDQS

B3.3/5.0
Behavior2/5

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

No annotations are supplied, so the description carries the full behavioral burden. 'Immediately' hints at non-graceful termination, but it does not state whether app data and settings are preserved, what happens if the package is not running or does not exist, whether root or elevated privileges are needed, or whether the call is synchronous.

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 no wasted wording. The second sentence adds contextual value rather than repeating the name.

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 two-parameter mutation with no output schema and no annotations, the description covers the core action but leaves out the state side effects an agent should know before killing an app. Adequate as a minimum viable definition, but thin for a destructive operation.

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

Parameters3/5

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

Schema coverage is 100%, with both device and packageName documented in the schema with examples. The description adds no additional parameter meaning, so baseline 3 applies because the schema already does the work.

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 ('force-stop') against a specific resource ('an app'), so the agent knows the operation. It stops short of naming the closely related siblings (adb_restart_app, adb_start_app, adb_clear_data, adb_kill/uninstall style tools), which is exactly where confusion is most likely in this crowded toolset.

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 most common debugging action' implies the context in which to reach for it (debugging a hung or misbehaving app), but there is no explicit when-to-use, when-not-to-use, or alternative such as restarting or clearing app data. Usage is inferred rather than stated.

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

adb_forwardB

Forward a local port to a port on the device (host → device). Use for connecting to services running on the device.

NameRequiredDescriptionDefault
localYesLocal (host) spec, e.g., 'tcp:8080'. AF2 fix: format-validated.
deviceNoDevice serial
remoteYesRemote (device) spec, e.g., 'tcp:8080' or 'localabstract:app_socket'. AF2 fix: format-validated.

TDQS

B3.2/5.0
Behavior2/5

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

No annotations are supplied, so the description carries the full behavioral burden. It does not say whether the forward persists across adb disconnects, what happens if the local port is already claimed, whether the call errors or overwrites, or that a forwarding rule is being created that must be cleaned up with adb_forward_remove.

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

Conciseness4/5

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

Two short sentences with the action and direction front-loaded; nothing is padded. The second sentence is mildly redundant with the first but does add the practical use case.

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 three-parameter mutation tool with no annotations and no output schema, the description is minimally adequate. It omits lifecycle details an agent needs — persistence of the rule, error behavior on port conflicts, and the existence of adb_forward_remove for teardown.

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 '(host → device)' note usefully reinforces that 'local' is the host spec and 'remote' is the device spec, but that mapping is already stated in the individual property descriptions, so the added meaning is marginal.

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

Purpose4/5

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

States a specific verb and resource ('Forward a local port to a port on the device') and pins the direction with '(host → device)'. That direction marker implicitly separates it from adb_reverse and the adb_forward_list/remove siblings, though none are named explicitly.

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

Usage Guidelines3/5

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

'Use for connecting to services running on the device' gives a positive use case, but there is no guidance on when to prefer this over adb_reverse, adb_tunnel_open, or adb_forward_list, and no mention that adb_forward_remove is needed afterwards.

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

adb_forward_listB

List all active port forwards and reverse forwards

NameRequiredDescriptionDefault
deviceNoDevice serial (omit for all devices)

TDQS

B3.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 behavioral burden; it implies a read-only enumeration via 'List ... active', which is useful. However it says nothing about whether the device must be online, whether it errors when no forwards exist, or what the entries contain, leaving meaningful gaps for an unannotated 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?

One short sentence, front-loaded with the verb and covering both forward directions without wasted words. It is perhaps slightly too terse given the absence of annotations, but nothing is redundant.

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 is simple (one optional parameter, no output schema, no annotations), and the description covers the core action. It still omits the return shape and error behavior, which the absent output schema and annotations would otherwise have to supply.

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 'device' parameter already has a schema description ('Device serial (omit for all devices)') at 100% coverage, so the baseline is 3. The description adds no interpretation of the parameter, such as whether reverse forwards from other devices are included or how results are grouped per device.

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

Purpose4/5

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

States a specific verb ('List') and resource ('port forwards and reverse forwards') with scope qualifier 'all active'. An agent can distinguish it from adb_forward/adb_reverse, which create forwards, though it never names those siblings explicitly.

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 gives no when-to-use guidance, no mention of prerequisites (device must be connected), and no routing away from similar siblings such as adb_tunnel_list or adb_devices. Usage is only implied by the fact that it is a listing operation.

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

adb_forward_removeA

Remove a port forward (host → device), or all forwards. Use after testing to clean up.

NameRequiredDescriptionDefault
localNoLocal spec to remove (e.g., 'tcp:8080'). Omit to remove all forwards. AF2 fix: format-validated.
deviceNoDevice serial

TDQS

A4/5.0
Behavior3/5

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

With no annotations, the description carries the behavioral burden and does disclose destructive removal plus the potentially broad 'all forwards' scope. It provides little further operational context, such as no-match handling, error behavior, or how device selection limits the removal.

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

Conciseness5/5

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

Two compact clauses front-load the operation and scope, then give a practical cleanup use case. There is no redundant or unnecessary wording.

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

Completeness4/5

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

For a simple two-parameter operation with a fully described schema, the direction, scope, and cleanup context are nearly sufficient for correct invocation. Missing no-match/error behavior and clarification of optional device targeting prevent full completeness, particularly without annotations or 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 description coverage is 100%, including the local-spec formats and the fact that omitting local removes all forwards. The description reinforces the scope but adds no parameter syntax, targeting, or validation details 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 gives a specific verb and resource—removing ADB port forwards—and states both the direction (host → device) and the single-versus-all scope. The direction helps distinguish it from reverse-forward removal, while 'remove' separates it from creating or listing forwards.

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 after testing to clean up' supplies a concrete invocation context. It does not explain when removing all forwards is inappropriate or route related cases to siblings such as adb_forward_list or adb_reverse_remove.

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

adb_getpropA

Get a specific Android system property, or all properties if no key given

NameRequiredDescriptionDefault
keyNoProperty key (e.g., 'ro.build.version.sdk'). Omit for all.
deviceNoDevice serial

TDQS

A3.8/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 behavioral burden; 'Get' implies a non-mutating read, and the no-key dump behavior is explicit. It does not confirm read-only behavior or describe the output shape and potentially large result when retrieving all properties.

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 front-loaded sentence communicates both operating modes without filler or redundancy. Its brevity is appropriate for this simple getter.

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

Completeness4/5

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

For a simple two-parameter getter with fully documented inputs, the description supplies enough information to understand and invoke the core operation. Return format and default-device behavior remain undocumented, which matters slightly more because there is no 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 description coverage is 100%, including an example property key and the instruction to omit it for all properties, so the baseline is 3. The description reinforces the optional-key behavior but adds no detail about device serial selection or the default when device is omitted.

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 and resource: getting an Android system property, with the useful distinction that omitting the key retrieves all properties. It does not differentiate the tool from siblings such as adb_settings_get or adb_shell.

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 Android-system-property scope and optional all-properties mode provide clear usage context. There are no exclusions or alternative-tool recommendations, such as using adb_settings_get for Android settings rather than system properties.

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

adb_gps_firmwareB

GNSS/GPS chipset and firmware identification. Reports GNSS hardware model (manufacturer, chip, firmware version), supported constellations (GPS, GLONASS, Galileo, BeiDou, QZSS, NavIC, SBAS), signal types with frequencies, dual-frequency (L1+L5) support, raw measurement capabilities (pseudorange access for spoofing detection), A-GPS modes (MSB/MSA — cellular-routed assisted GPS relevant to IMSI catcher research), carrier phase measurements, navigation message decoding, and SUPL server configuration.

NameRequiredDescriptionDefault
deviceNoDevice serial

TDQS

B3.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 behavioral burden, and it does disclose a rich set of returned attributes (constellations, frequencies, A-GPS modes, carrier phase, SUPL config), which implies a passive read. It never explicitly states read-only semantics, whether root/privileged access is needed, or what happens on devices with no GNSS hardware.

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?

Purpose is front-loaded in the first clause, which is good, but the remainder is a long comma-separated enumeration of reportable fields that reads as a feature dump rather than prioritized guidance. Most items are informative, though parenthetical asides like the IMSI-catcher note add length without helping invocation.

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

Completeness3/5

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

With no output schema, the description correctly compensates by describing return contents in detail, which is the main completeness requirement here. It is still missing invocation-relevant context: how it differs from sibling probe tools and any device/privilege constraints, leaving gaps for a tool in a very crowded firmware/telephony family.

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?

There is a single optional 'device' parameter and schema description coverage is 100%, so the schema already fully documents it. The description adds nothing about the parameter (e.g., defaulting to the single connected device), so baseline 3 applies.

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

Purpose4/5

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

The description opens with a specific verb+resource pair ('GNSS/GPS chipset and firmware identification') and then enumerates exactly what is reported, so an agent knows this is a read-only probe of GNSS hardware/firmware. It does not, however, distinguish itself from related siblings such as adb_firmware_probe, adb_baseband_info, or adb_wifi_firmware.

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?

There is no when-to-use guidance at all: nothing says when to reach for this instead of adb_firmware_probe, adb_baseband_info, adb_location, or adb_signal_detail, nor are prerequisites or failure conditions mentioned. The agent must infer usage purely from the tool name.

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

adb_gradleC

Run a Gradle task in an Android project directory

NameRequiredDescriptionDefault
argsNoAdditional Gradle arguments as an array of strings (e.g., ['-Pversion=1.0', '--info']). Use an array — not a space-separated string — so arguments containing quoted values are preserved as single tokens.
taskYesGradle task (e.g., 'assembleDebug', 'installDebug', 'clean')
timeoutNoBuild timeout in milliseconds (30s-30min, default 5min). V5 fix: large multi-module Android projects (60+ modules) routinely exceed the default; raise this for clean builds of bigger projects.
projectPathYesPath to the Android project root (containing gradlew)

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations, the description carries the full behavioral burden, yet it discloses nothing about the fact that this is a long-running, potentially destructive build operation (timeout parameter implies it, but that lives in the schema). It does not say whether output is streamed or returned, whether failures surface as errors, or whether APKs/artifacts are written to disk.

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

Conciseness4/5

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

A single front-loaded sentence with zero filler. It is efficient, though its brevity borders on under-specification for a build-execution tool with four parameters and no annotations.

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

Completeness2/5

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

For a long-running build tool with no annotations and no output schema, the description is too thin: it does not state what the call returns, how to interpret build failures, or that the project root must contain gradlew (only the schema says that). The single sentence leaves significant gaps an agent would need to call it confidently.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already explains projectPath, task, args, and timeout, including the rationale for array-form args and the timeout range. The description adds no semantics beyond that, which is the expected baseline when the schema does the heavy lifting.

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

Purpose4/5

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

States a specific verb ('Run') and resource ('Gradle task') with a clear scope ('in an Android project directory'). However, it does not distinguish itself from the sibling adb_build_and_install, which plausibly wraps a similar Gradle invocation, leaving the agent to guess which one to pick.

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

Usage Guidelines2/5

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

No when-to-use guidance at all: nothing says whether to prefer this over adb_build_and_install, whether the project must already be configured, or whether it targets a connected device. The agent must infer all routing from the name alone.

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

adb_grant_permissionC

Grant a runtime permission to a package

NameRequiredDescriptionDefault
deviceNoDevice serial
permissionYesFull permission string (e.g., 'android.permission.READ_PHONE_STATE')
packageNameYesPackage name (e.g., 'com.example.app')

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are supplied, so the description carries the full behavioral burden, yet it discloses nothing about side effects, required privileges (root/shell), whether the grant persists across reboots, or what happens on failure for an undeclared permission. The phrase 'runtime permission' adds a small hint about Android permission classes, but that is the only behavioral signal.

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

Conciseness4/5

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

A single front-loaded clause with zero filler and no repetition of the tool name. It is efficient, though the extreme terseness leaves no room for the operational caveats this mutation tool needs.

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 parameters are fully covered by the schema and there is no output schema to explain, so the definition is minimally complete for invocation. However, for an unannotated destructive-adjacent mutation tool it omits prerequisites and failure behavior that an agent would need to call it safely and 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 all three parameters including the full permission string format and package name examples. The description adds no extra meaning such as device-selection behavior when 'device' is omitted, so the baseline of 3 applies.

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

Purpose4/5

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

The description states a specific verb ('Grant') and resource ('runtime permission') applied to a target ('a package'), so an agent immediately knows this is a permission-mutation tool. It does not, however, name or distinguish itself from close siblings such as adb_revoke_permission, adb_list_permissions, or adb_permission_audit.

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?

There is no guidance on when to use this instead of adb_revoke_permission, adb_list_permissions, or adb_shell with pm grant, and no prerequisites are stated (app must be installed, permission must be declared in the manifest, Android 6+ runtime semantics, possible root requirement). The agent must infer all selection context.

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

adb_grepA

Search file contents on the device by text pattern. Uses fixed-string matching by default (no regex injection risk). Supports recursive directory search with depth control and result capping. For filename searches, use adb_find instead.

NameRequiredDescriptionDefault
pathYesFile or directory path to search
rootNoUse root shell for protected paths
deviceNoDevice serial
patternYesText pattern to search for
maxDepthNoMaximum directory depth for recursive search (1-50, default 10)
recursiveNoSearch directories recursively
ignoreCaseNoCase-insensitive search (default: true)
maxResultsNoMaximum matching lines to return (1-10000, default 500)
fixedStringNoUse fixed-string matching (default: true, safer). Set false for regex.
result_handleNoOptional. If provided, store this tool's result under `result://<tool>/<name>` for retrieval after compaction. Name must be 1-32 chars, [a-zA-Z0-9_-]. Existing handles with the same tool+name are overwritten. Use adb_result_list to see active handles, adb_result_get or the MCP Resource URI to retrieve.
filesWithMatchesNoShow only filenames that contain matches, not the matching lines
result_handle_ttlNoOptional. TTL in seconds for the result handle (60 to 604800). Default 43200 (12 hours). Ignored if result_handle is not provided.

TDQS

A3.9/5.0
Behavior3/5

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

With no annotations, the description must carry the whole behavioral burden. It does disclose meaningful traits: fixed-string matching by default with the stated reason (no regex injection risk), recursive search, depth control, and result capping. It does not describe the shape of returned matches (lines vs file-prefixed), whether it is a read-only operation, or how privileged paths behave, leaving real gaps for a 12-parameter 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?

Four short sentences, front-loaded with purpose, then matching semantics, then capabilities, then the sibling handoff. No restatement of the name or title and no filler.

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

Completeness3/5

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

For a 12-parameter tool with no annotations and no output schema, the description covers the core search semantics and the main routing decision but says nothing about return content, error cases, or how result_handle interacts with the returned output. Adequate to invoke, not sufficient to predict results.

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 every parameter including result_handle, fixedString, maxDepth, and maxResults is already documented in the schema. The description's mentions of recursive search, depth control, and result capping merely mirror those fields rather than adding syntax, defaults, or interaction rules. Baseline 3 is appropriate when the schema does the heavy lifting.

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

Purpose5/5

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

States a specific verb and resource ('Search file contents on the device by text pattern') and immediately distinguishes itself from the nearest sibling by naming adb_find for filename searches. An agent can route content-grep vs filename-find without opening either schema.

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 an explicit alternative and the condition that selects it ('For filename searches, use adb_find instead'), which is the main routing ambiguity among these siblings. It does not discuss when to prefer adb_shell with grep, or when root/device targeting is needed, so it stops short of full when/when-not coverage.

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

adb_health_checkA

Run a comprehensive health check of the ADB toolchain. Validates: ADB binary, server, device connection, authorization, and root access.

NameRequiredDescriptionDefault
deviceNoDevice serial to check (optional)

TDQS

A3.6/5.0
Behavior3/5

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

No annotations are supplied, so the description carries the full burden. It usefully discloses the validation scope, but never states that the operation is read-only, whether the root-access probe has side effects, what happens on partial failure, or what the result looks like.

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

Conciseness5/5

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

Two sentences, zero filler, with the purpose front-loaded and the validation list following as concrete detail. Nothing needs trimming.

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 one-optional-parameter diagnostic tool with no output schema, the description covers scope adequately. A brief note on what a failed check reports or whether a device must be pre-connected would close the remaining 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?

There is a single optional parameter with 100% schema description coverage ("Device serial to check (optional)"), so the schema already carries its meaning. The description adds nothing about how omitting the device changes behavior, which is the one piece of semantics that would be valuable here.

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

Purpose4/5

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

The description names a specific verb and resource ("health check of the ADB toolchain") and enumerates the five checks it performs (binary, server, device connection, authorization, root access), so an agent knows exactly what the tool does. It does not, however, distinguish itself from adjacent diagnostics like adb_devices or adb_device_state.

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 word "health check" implies a diagnostic/preflight context, but the description never states when to prefer this over adb_devices or adb_device_state, nor any preconditions such as whether a device must already be connected. Usage is only inferable.

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

adb_heap_dumpA

Capture a heap dump from a running process for memory analysis. Triggers am dumpheap and pulls the resulting .hprof file. Requires the target process PID or package name.

NameRequiredDescriptionDefault
deviceNoDevice serial
targetYesProcess PID (number) or package name (e.g., com.example.app)
filenameNoOutput filename (default: heap_<target>_<timestamp>.hprof)

TDQS

A3.7/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 behavioral burden. It usefully discloses the mechanism ('Triggers `am dumpheap` and pulls the resulting .hprof file'), but it omits important operational details such as whether the app must be debuggable, whether root is required, whether the call blocks, and where the file is written.

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

Conciseness5/5

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

Three short sentences, each carrying distinct information: purpose, mechanism, and required input. The purpose is front-loaded and there is no redundant or filler wording.

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 is adequate for a simple three-parameter tool, but with no output schema and no annotations it should do more to explain return behavior (e.g., the .hprof path) and execution prerequisites such as debuggable apps or root access.

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 explains the device, target, and filename parameters. The description repeats the target requirement but does not add syntax, format, or default behavior beyond what the schema provides, making the baseline 3 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 a specific verb and resource: 'Capture a heap dump from a running process.' It clearly distinguishes this from sibling tools like adb_dumpsys or adb_perf_snapshot by naming the artifact (.hprof) and the underlying command.

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

Usage Guidelines3/5

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

It gives implied usage context ('for memory analysis') and states that a target PID or package is required, but it does not say when to choose this over alternatives such as adb_dumpsys, adb_perf_snapshot, or adb_top, nor does it list exclusions or prerequisites.

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

adb_iio_readA

Read raw hardware data from the Linux IIO (Industrial I/O) subsystem. Discovers all IIO devices and reads their current values. On Tensor/Exynos devices, this exposes per-rail power monitors (ODPM) showing real-time power consumption per SoC subsystem (CPU clusters, GPU, display, memory, TPU, GPS, etc.) — data not available through the Android sensor HAL. On other devices, may expose raw accelerometer, gyroscope, magnetometer, or ADC channels. Root required.

NameRequiredDescriptionDefault
deviceNoDevice serial
listOnlyNoIf true, list available IIO devices without reading values

TDQS

A4.1/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 load and does well: it discloses the root requirement, that it enumerates ALL IIO devices and reads all values (no filtering), and that results vary by SoC. It omits rate/cost implications of dumping every device and says nothing about the shape or volume of returned data.

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

Conciseness4/5

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

Front-loaded with the core action, then device-specific payoff, then the root prerequisite last. The parenthetical subsystem list (CPU clusters, GPU, display, memory, TPU, GPS) is slightly long but genuinely helps an agent judge relevance.

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 two-optional-parameter read tool with no annotations and no output schema, the description covers purpose, hardware variance, and the root prerequisite. The main residual gap is that with no output schema the agent gets no hint of the return structure for IIO device/value pairs.

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 both `device` and `listOnly` documented in the schema itself including the listOnly default and effect. The description adds no parameter-level detail beyond that, so the baseline 3 applies.

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

Purpose5/5

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

States a specific verb and resource ('Read raw hardware data from the Linux IIO subsystem') and immediately scopes what that yields on Tensor/Exynos versus other hardware. The contrast with the Android sensor HAL makes it distinguishable from the similarly-purposed adb_sensor_read sibling.

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 device-conditioned guidance: on Tensor/Exynos it is the way to get per-rail ODPM power data; elsewhere it may surface raw accel/gyro/mag/ADC channels. It stops short of an explicit 'use adb_sensor_read instead when you want HAL-normalized sensors', leaving the alternative routing to inference.

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

adb_inputC

Send input events to the device (tap, swipe, text, keyevent)

NameRequiredDescriptionDefault
argsYesArguments: tap='x y', swipe='x1 y1 x2 y2 [duration_ms]', text='string', keyevent='KEYCODE_HOME'
typeYesInput type — one of: tap (single touch), swipe (drag between two points), text (literal string entry), keyevent (Android key code like KEYCODE_HOME). The args field documents the expected argument format per type.
deviceNoDevice serial

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations supplied, the description carries the full behavioral burden, yet it only says that events are injected. It does not disclose that this mutates live UI state, whether coordinates are pixels relative to the current screen, how special characters in 'text' must be escaped, or how failures/blocking behave.

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 single sentence is front-loaded with the action and immediately scopes it with the supported types; there is no wasted wording. Its brevity is efficient, though it borders on under-specification for a state-mutating tool.

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

Completeness2/5

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

For a parameter-light but side-effecting tool with no annotations and no output schema, the description leaves out what the agent most needs: confirmation of success/failure, device-selection behavior, and overlap with the specialized input siblings. The complete schema partially compensates, but the behavioral picture remains thin.

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 the schema already details the exact argument format per input type and the enum semantics. The description's parenthetical list of types merely repeats the enum values, adding no syntax or format detail beyond what the schema provides.

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

Purpose4/5

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

The description states a concrete verb and resource ('Send input events to the device') and names the four event types, so an agent knows exactly what the tool does. It does not, however, distinguish this general tool from overlapping siblings such as adb_input_text, adb_input_drag, adb_input_long_press, or adb_tap_element, which an agent must choose between.

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?

There is no guidance on when to prefer this generic input tool over the many specialized siblings (adb_input_text for typing, adb_input_drag for swipes, adb_tap_element for UI-element taps). No prerequisites, exclusions, or context about device targeting are given, leaving the choice entirely to inference.

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

adb_input_double_tapA

Double tap at a point on screen. Triggers zoom, text selection, or double-tap gestures. Two rapid taps with a configurable interval.

NameRequiredDescriptionDefault
xYesX coordinate
yYesY coordinate
deviceNoDevice serial
intervalMsNoInterval between taps in ms (20-500, default 80)

TDQS

A3.6/5.0
Behavior3/5

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

With no annotations supplied, the description carries the full behavioral burden. It usefully discloses that two rapid taps are issued with a configurable interval and what UI behaviors that can trigger, but says nothing about required device connectivity, whether coordinate bounds outside the screen are clamped, or any side effects on app state.

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

Conciseness5/5

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

Three short sentences, front-loaded with the core action and effect, with zero filler. Every clause contributes either the operation, its outcome, or the tap timing.

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 four-parameter input-injection tool with a fully documented schema and no output schema, the description covers the action, trigger behaviors, and timing semantics adequately. Only device/coordinate edge-case behavior is left implicit.

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 x, y, device, and intervalMs documented including range and default, so the schema does the heavy lifting. The description's mention of 'a configurable interval' restates intervalMs without adding meaning beyond the schema baseline.

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

Purpose4/5

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

The description names a specific verb and resource ('Double tap at a point on screen') and explains the resulting effect ('Triggers zoom, text selection, or double-tap gestures'). It is clearly distinguishable from gesture siblings like adb_input_long_press or adb_input_drag by implication, though it never names them explicitly.

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

Usage Guidelines3/5

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

Usage is only implied: an agent can infer this is for double-tap interactions (zoom, text selection), but there is no explicit when-to-use/when-not or routing to alternatives such as adb_input, adb_tap_element, or adb_input_long_press. A brief 'use instead of two adb_input taps' note would have closed the gap.

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

adb_input_dragA

Drag from one point to another on screen. Uses Android's draganddrop input command. Useful for drag-and-drop UI elements, sliders, map panning, and reorder operations.

NameRequiredDescriptionDefault
x1YesStart X coordinate
x2YesEnd X coordinate
y1YesStart Y coordinate
y2YesEnd Y coordinate
deviceNoDevice serial
durationMsNoDrag duration in ms (100-10000, default 1000)

TDQS

A4/5.0
Behavior3/5

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

With no annotations, the description carries the behavioral burden. It usefully discloses that the tool performs an Android draganddrop input command, but it does not cover device or screen prerequisites, synchronization and failure behavior, or what happens when the UI does not recognize the gesture.

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

Conciseness5/5

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

Three short sentences front-load the core operation, then add implementation context and practical use cases. Every sentence contributes distinct information without filler or unnecessary repetition.

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, flat six-parameter gesture tool, the description and fully documented schema provide enough information to invoke it correctly. Explicit alternative routing and clarification of device or coordinate assumptions would improve it, but their absence is not a major invocation blocker.

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 all six parameters, including duration bounds and its default. The description reinforces the start-to-end coordinate relationship but adds no further coordinate-system or parameter-specific details, so the baseline score applies.

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

Purpose5/5

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

The opening sentence specifies both the action and target: dragging between two points on the screen. Naming Android's draganddrop command and listing concrete gestures further distinguish it from generic input, taps, long presses, and flings.

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 examples—drag-and-drop elements, sliders, map panning, and reordering—provide clear situations where this tool is appropriate. It does not explicitly explain when to prefer alternatives such as adb_input_fling or adb_input, or when a drag is unsuitable.

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

adb_input_flingA

Perform a high-velocity fling gesture. Like swipe but with a short duration to create scroll momentum on lists, launchers, and paged views. Useful for fast-scrolling through long lists, dismissing notifications, or triggering velocity-sensitive behaviors.

NameRequiredDescriptionDefault
x1YesStart X coordinate
x2YesEnd X coordinate
y1YesStart Y coordinate
y2YesEnd Y coordinate
deviceNoDevice serial
durationMsNoFling duration in ms (20-200, default 50). Shorter = more velocity

TDQS

A3.7/5.0
Behavior3/5

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

With no annotations at all, the description carries the full behavioral burden, and it does usefully explain the physics of the gesture (short duration produces momentum, useful for velocity-sensitive UI). It says nothing about side effects, that the gesture actually mutates device screen state and can trigger unintended actions, nor anything about permissions or 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.

Conciseness5/5

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

Three tight sentences: the core action first, then the differentiation, then use cases. Every clause carries information and nothing is redundant.

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 six-parameter gesture-injection tool with no annotations and no output schema, the description covers intent and use cases but omits return behavior, device targeting, and the fact that this performs a real UI action with side effects. It is adequate to call the tool correctly but leaves behavioral gaps an agent would want filled.

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 coordinates, device, and duration are already fully documented, including 'Shorter = more velocity'. The description's talk of high velocity and momentum reinforces but does not add new semantics beyond the schema, so the baseline 3 applies.

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

Purpose4/5

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

The description gives a specific verb and resource ('Perform a high-velocity fling gesture') and draws a distinction from the nearest concept ('Like swipe but with a short duration to create scroll momentum'). It does not name any actual sibling tool such as adb_input_drag or adb_input, so the differentiation is conceptual rather than tool-directed.

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 clearly states the contexts where this is the right choice: fast-scrolling long lists, dismissing notifications, and velocity-sensitive behaviors. There is no explicit when-not guidance or a named alternative for cases where a slower drag (adb_input_drag) would be correct, so the routing is implied rather than spelled out.

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

adb_input_long_pressA

Long press at a point on screen. Triggers context menus, selection mode, drag handles, and other long-press behaviors. Implemented as a zero-distance swipe with configurable hold duration.

NameRequiredDescriptionDefault
xYesX coordinate
yYesY coordinate
deviceNoDevice serial
durationMsNoHold duration in ms (300-10000, default 1500)

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations supplied, the description carries the full burden, and it discloses a genuinely useful implementation trait: the gesture is a zero-distance swipe with configurable hold duration, which warns the agent that the system may classify it as a swipe. It does not state prerequisites (screen on/unlocked) or whether it waits for the gesture to complete before returning.

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

Conciseness5/5

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

Three short sentences, front-loaded with the action, then the triggering behaviors, then the mechanism. Nothing is redundant or padded.

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 four-parameter input tool with full schema coverage and no output schema, the description covers what the tool does and how it is implemented. The remaining gap is state prerequisites and post-gesture behavior, which an agent would otherwise have to discover through failure.

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 x/y, device serial, and durationMs (300-10000, default 1500) all documented in the schema, so the baseline is 3. The description only adds that the point is the press origin of a zero-distance swipe and that duration is configurable, which is marginal 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+resource ('Long press at a point on screen') and then enumerates the concrete outcomes it produces (context menus, selection mode, drag handles), which distinguishes it from tap, double-tap, and drag siblings. An agent can identify the tool's effect without opening the schema.

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 list of triggered behaviors gives clear context for when to reach for it: use it when a context menu or selection mode is the goal. There is no explicit when-not guidance or named alternative (e.g. adb_input_drag / adb_input_double_tap), so it stops short of full routing guidance.

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

adb_input_pinchA

Perform a multi-touch pinch (zoom out) or spread (zoom in) gesture. Two fingers move symmetrically toward or away from a center point. Uses parallel swipe injection by default (universal, no root); when root is available, can use raw sendevent for true multi-touch MT protocol injection. The 'auto' method selects the best available approach.

NameRequiredDescriptionDefault
cxYesCenter X coordinate of the pinch gesture
cyYesCenter Y coordinate of the pinch gesture
angleNoAngle in degrees for the pinch axis (0=horizontal, 90=vertical, default 90)
stepsNoInterpolation steps for sendevent method (5-60, default 20). More steps = smoother gesture
deviceNoDevice serial
methodNoInjection method: 'auto' (sendevent if root, else swipe), 'swipe' (parallel swipes, universal), 'sendevent' (raw MT protocol, requires root)auto
endRadiusYesEnding distance (px) from center to each finger. Smaller than startRadius = pinch/zoom-out, larger = spread/zoom-in
durationMsNoGesture duration in ms (100-5000, default 500)
startRadiusYesStarting distance (px) from center to each finger

TDQS

A3.9/5.0
Behavior4/5

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

With no annotations supplied, the description carries the full burden and does meaningful work: it discloses the default rootless parallel-swipe mechanism, the root-gated raw sendevent alternative, and how 'auto' resolves between them. Gaps remain around whether the call blocks for durationMs, how failures are surfaced, and which device is targeted when the device parameter is omitted.

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

Conciseness4/5

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

Three tightly packed sentences, front-loaded with the gesture definition before the mechanism details. The final sentence about 'auto' choosing the best approach lightly restates what the method enum already says, but the wording is efficient and free of 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?

For a 9-parameter gesture tool with no annotations and no output schema, the description covers the mechanics and the injection trade-offs well. It leaves a small hole by not indicating what a successful or failed call returns, which matters more given there is no output schema to lean on.

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 cx, cy, startRadius, endRadius, angle, steps, method, durationMs, and device are already documented in the schema, including the smaller-vs-larger radius meaning. The description's 'two fingers move symmetrically toward or away from a center point' adds a useful geometric mental model but no parameter-level detail beyond structured data, so baseline 3 applies.

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

Purpose4/5

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

States a specific verb and resource: a multi-touch pinch (zoom out) or spread (zoom in) built from two symmetric finger paths around a center point. The gesture type inherently separates it from single-pointer siblings like adb_input_drag, adb_input_fling, and adb_input_double_tap, though it never names those alternatives explicitly.

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 operational context for the injection-method choice: swipe-parallel is universal and rootless, sendevent is raw MT and requires root, and 'auto' picks the best available. It stops short of telling the agent when to prefer this tool over adb_input or a generic swipe, and gives no exclusions or preconditions for the gesture itself.

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

adb_input_textA

Type text on the device. Handles special characters by converting spaces to %s and escaping shell metacharacters. For multi-line or complex text, consider using the clipboard tool instead.

NameRequiredDescriptionDefault
textYesText to type on the device
deviceNoDevice serial

TDQS

A3.7/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, and it does disclose a real behavioral trait: the text is transformed (spaces to %s, shell metacharacters escaped), which warns the agent that its input is rewritten. It omits other operationally important facts — that typing targets whatever field currently has focus, that there is no verification the text landed, and how a 5000-char limit or failed escape surfaces as an error.

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

Conciseness5/5

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

Three short sentences, each doing distinct work — capability, transformation caveat, and alternative routing — with the main purpose front-loaded and no filler.

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

Completeness3/5

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

For a simple two-parameter tool with no output schema and no annotations, the definition is nearly adequate but leaves out the focus requirement (text goes to the active editable field) and the fact that success means the input was dispatched, not that the text was verified.

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 both 'text' and 'device' are already documented, and the baseline is 3. The description adds only transformation semantics for 'text' (escaping, space substitution) and nothing about the 'device' serial or default-device behavior.

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

Purpose4/5

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

States a specific verb and resource ('Type text on the device'), which is enough to separate it from the gesture-oriented siblings (adb_input_drag, adb_input_fling, adb_input_long_press). It does not explicitly contrast with the generic adb_input sibling, so the boundary there is left implicit.

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 an explicit alternative and the condition that selects it: multi-line or complex text should go through the clipboard tool instead. It does not say when to prefer the generic adb_input, but the primary routing decision is covered.

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

adb_installB

Install an APK on the device. Provide the full local path to the APK file.

NameRequiredDescriptionDefault
deviceNoDevice serial
apkPathYesLocal filesystem path to the APK file
replaceNoReplace existing app (-r flag)
downgradeNoAllow version downgrade (-d flag)

TDQS

B3.3/5.0
Behavior2/5

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

With no annotations, the description carries the full behavioral burden but only implies a device-mutating installation. It omits useful operational context such as replacement being enabled by default, downgrade behavior, multi-device targeting, and what success or failure looks like.

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

Conciseness5/5

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

Two short sentences front-load the operation and then state the required input. There is no redundant or irrelevant wording.

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 four-parameter install command with a fully documented input schema, this is sufficient for the basic invocation. Missing sibling-selection guidance and behavioral or result context remain notable because neither annotations nor an output schema fill those 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%, so the baseline of 3 applies. The description reinforces that apkPath must be a full local path but adds nothing beyond the schema for device, replace, or downgrade.

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 and resource—"Install an APK on the device"—so the operation and target are immediately clear. It does not explicitly distinguish this local-APK installer from siblings such as adb_build_and_install, adb_install_bundle, or adb_multi_install.

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 full-local-path instruction establishes a basic precondition and implies use when an APK is already available locally. It gives no explicit routing guidance for build-and-install, bundle, market, or multi-device alternatives, and does not explain when the optional device parameter is needed.

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

adb_install_bundleB

Install multiple APK splits (app bundle) on the device using install-multiple. Provide all split APK files — base APK plus config splits (language, density, ABI).

NameRequiredDescriptionDefault
deviceNoDevice serial
replaceNoReplace existing app (-r)
apkPathsYesArray of local paths to split APK files (base + config splits)
allowDowngradeNoAllow version downgrade (-d)

TDQS

B3.4/5.0
Behavior3/5

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

No annotations are supplied, so the description carries the full behavioral burden; it does disclose the underlying 'install-multiple' mechanism and the completeness requirement for split sets, which is genuinely useful. It does not mention failure modes (INSTALL_FAILED_* errors, missing split rejection), overwrite behavior beyond the schema's 'replace' flag, or that the device must be online.

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

Conciseness4/5

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

Two short sentences, front-loaded with the action and mechanism, with no filler. The second sentence is a useful constraint rather than padding.

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 mutating install tool with no annotations and no output schema, the description covers what it does and what inputs must look like, but leaves the agent without error-handling context or safety/permission notes. It is adequate but not complete for a state-changing operation.

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

Parameters3/5

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

Schema description coverage is 100%, so all four parameters are already documented in the schema, establishing a baseline of 3. The description's note about base APK plus config splits (language, density, ABI) restates and slightly enriches the apkPaths semantics, but adds nothing about device, replace, or allowDowngrade.

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 gives a specific verb and resource ('Install multiple APK splits (app bundle)') and names the underlying adb mechanism ('install-multiple'), which clearly separates it from the single-APK adb_install sibling. It stops short of naming that sibling explicitly, so the differentiation is implied rather than stated.

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

Usage Guidelines3/5

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

Usage context is implied by the parenthetical '(app bundle)' and the instruction to supply base plus config splits, which tells an agent this is for split-APK scenarios rather than plain installs. However, there is no explicit when-to-use / when-not guidance and no reference to alternatives such as adb_install or adb_multi_install.

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

adb_list_packagesC

List installed packages. Supports filtering by name.

NameRequiredDescriptionDefault
typeNoShow all, system-only, or third-party-only packagesall
deviceNoDevice serial
filterNoFilter packages containing this string

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations supplied, the description carries the full disclosure burden and largely drops it. It never states what the response looks like (names only versus full package identifiers), whether a device serial is required, or what happens when the filter matches nothing.

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

Conciseness4/5

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

Two short, front-loaded sentences with no filler; the core action leads. The second sentence restates information already in the schema, which is minor redundancy rather than a clarity problem.

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, all-optional list tool with a fully documented schema, this is close to adequate. However, with no output schema and no annotations, the definition should say what the listing returns and whether device defaults are assumed.

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 all three parameters are already documented, including the enum for type and the substring semantics of filter. The description's "filtering by name" merely echoes the filter parameter without adding syntax or behavioral detail, so the baseline 3 applies.

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

Purpose4/5

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

States a specific verb and resource ("List installed packages") that an agent can act on immediately. It does not distinguish itself from adjacent siblings such as adb_package_info, adb_list_splits, or adb_apex_list, so an agent must infer which listing tool applies.

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?

There is no guidance on when to use this versus adb_package_info or adb_apex_list, and no mention of prerequisites such as a connected device or authorization state. Usage is only implied by the tool name and the single filtering sentence.

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

adb_list_permissionsA

List permissions declared and granted for a package. Parses the package dump to show install-time and runtime permissions with their current grant state. Useful for auditing permission state before and after grant/revoke operations.

NameRequiredDescriptionDefault
deviceNoDevice serial
filterNoShow all permissions, only granted, or only denied (default: all)all
packageNameYesPackage name (e.g., 'com.example.app')

TDQS

A3.5/5.0
Behavior3/5

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

No annotations are supplied, so the description carries the full burden. It does disclose the data source (package dump parsing) and the shape of what is reported (install-time vs runtime permissions, grant state), which implies a safe read. It says nothing about failure modes (unknown/uninstalled package), required device state, or output formatting, leaving meaningful gaps for an unannotated 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?

Three short sentences, front-loaded with the core action and ending with the use case. Every sentence carries information; there is no filler, though the second sentence mildly restates the first's 'declared and granted' framing.

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 3-parameter read tool with no annotations and no output schema, the description usefully compensates by naming the returned permission categories and grant state. Edge-case behavior (nonexistent package, behavior when the filter matches nothing) remains undocumented but is a minor gap at this 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?

Schema description coverage is 100%, so all three parameters (device, filter, packageName) are already documented, including the enum values and default for filter. The description adds no parameter-level semantics such as how device defaults are resolved or how filter interacts with the reported classification, so baseline 3 applies.

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

Purpose4/5

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

The description states a specific verb and resource ('List permissions declared and granted for a package') and adds the mechanism ('parses the package dump') plus the data shown ('install-time and runtime permissions with their current grant state'). It does not explicitly distinguish itself from near-neighbors such as adb_permission_audit or adb_grant_permission, so it falls short of a 5.

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?

'Useful for auditing permission state before and after grant/revoke operations' implies the workflow context, which is better than nothing. However, it never names an alternative tool (e.g., adb_permission_audit, adb_grant_permission) or states when not to use this one, so selection among siblings is left to inference.

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

adb_list_splitsA

List all APK split paths installed for a package. Shows the base APK and any configuration splits (language, screen density, ABI).

NameRequiredDescriptionDefault
deviceNoDevice serial
packageNameYesPackage name (e.g., 'com.example.app')

TDQS

A3.6/5.0
Behavior3/5

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

No annotations are supplied, so the description carries the full burden. 'List' strongly implies a read-only, non-destructive operation and the second sentence discloses what the result contains, but nothing is said about behavior when the package is not installed, whether the device parameter defaults to the single connected device, or any 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?

Two short sentences, zero filler, with the core purpose front-loaded and the elaboration of return contents following immediately. Nothing here is redundant or padded.

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

Completeness4/5

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

For a simple two-parameter read-only listing tool with full schema coverage and no output schema, the description covers what it does and roughly what it returns. The only meaningful gap is device-selection behavior when the serial is omitted.

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 both parameters (device serial, packageName) are documented with an example, so the description does not need to compensate. The description adds nothing beyond the schema about parameter behavior — notably it does not say what happens if device is omitted with multiple devices attached.

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

Purpose4/5

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

States a specific verb and resource ('List all APK split paths installed for a package') and clarifies the returned contents: base APK plus configuration splits by language, density, and ABI. That distinguishes it well from adb_list_packages and adb_package_info, though it never names those siblings explicitly.

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

Usage Guidelines3/5

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

Usage is only implied: an agent can infer it is for inspecting split APK structure of an installed package, but there is no explicit when-to-use or when-not-to-use guidance, and no pointer to alternatives such as adb_package_info or adb_extract_apks.

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

adb_locationC

Enable or disable location services

NameRequiredDescriptionDefault
modeYesLocation mode: off, sensors (GPS only), battery (network only), high (GPS + network)
deviceNoDevice serial

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are supplied, so the description carries the full behavioral burden and largely drops it. It does not say whether this mutates a persistent system setting, whether root or special permissions are required, whether running apps are affected, or what the call returns. For a device-state mutation with zero annotation coverage, that is a substantial gap.

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

Conciseness4/5

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

A single front-loaded sentence with no filler, which is appropriate for a simple two-parameter toggle. It is efficient but so terse that useful context was omitted rather than condensed.

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

Completeness2/5

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

For a mutation tool with no annotations and no output schema, the definition is too thin: it omits permission requirements, persistence/reversibility of the setting change, and any indication of success or failure reporting. Complexity is low, but the agent still lacks enough to invoke it confidently alongside the many sibling tools.

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

Parameters3/5

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

Schema description coverage is 100% and the enum already spells out off/sensors/battery/high with their GPS/network meanings, so the description has nothing left to add. It does not explain the optional 'device' serial or default-device behavior, but the schema covers it, so the baseline 3 applies.

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

Purpose4/5

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

States a specific verb pair ('enable or disable') and resource ('location services'), so the agent knows exactly what device setting is touched. It does not distinguish itself from adjacent siblings like adb_airplane_mode, adb_gps_firmware, or adb_settings_put, which an agent could reasonably consider for the same goal.

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?

There is no when-to-use guidance, no prerequisites (root, permissions, device connectivity), and no mention of alternatives. The agent must infer that this is the right tool rather than a settings write or airplane-mode toggle.

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

adb_logcatB

Capture a logcat snapshot. Supports tag filtering, priority levels, and grep patterns.

NameRequiredDescriptionDefault
tagNoFilter by tag (e.g., 'ActivityManager' or 'MyApp')
grepNoGrep filter applied to output (literal string match, case-insensitive)
linesNoNumber of recent lines to capture (1-10000)
bufferNoLogcat buffer to read frommain
deviceNoDevice serial
priorityNoMinimum priority: V(erbose), D(ebug), I(nfo), W(arn), E(rror), F(atal)
result_handleNoOptional. If provided, store this tool's result under `result://<tool>/<name>` for retrieval after compaction. Name must be 1-32 chars, [a-zA-Z0-9_-]. Existing handles with the same tool+name are overwritten. Use adb_result_list to see active handles, adb_result_get or the MCP Resource URI to retrieve.
result_handle_ttlNoOptional. TTL in seconds for the result handle (60 to 604800). Default 43200 (12 hours). Ignored if result_handle is not provided.

TDQS

B3.1/5.0
Behavior2/5

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

No annotations are supplied, so the description carries the full disclosure burden. It does not say this is a read-only, non-destructive operation, does not mention device-selection or permission requirements, and says nothing about what the capture returns. The only behavior-ish hint is the implied snapshot semantics.

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

Conciseness4/5

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

Two short sentences with the core action front-loaded and no filler. The second sentence mildly duplicates the schema, keeping it from a 5.

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

Completeness2/5

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

For an 8-parameter tool with no annotations and no output schema, the description omits too much: neither the shape of the returned data (raw log lines vs. structured entries) nor the combined-filter behavior nor the effect of result_handle/ttl handles is explained. An agent can call it, but must infer return format and filtering interactions.

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 every parameter (tag, grep, lines, buffer, device, priority, result_handle, ttl) is already documented in the schema. The description's mentions of tag, priority, and grep simply restate a subset of that, adding no syntax, defaults, or interaction semantics beyond the schema. Baseline 3 applies.

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

Purpose4/5

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

"Capture a logcat snapshot" gives a specific verb and resource, and the second sentence names the supported filtering dimensions. It is clear what the tool does, but it never distinguishes itself from siblings like adb_logcat_start, adb_logcat_poll, adb_logcat_crash, or adb_logcat_clear, all of which also surface log data.

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 word "snapshot" implies a one-shot capture rather than a streaming session, which hints at when to prefer this over adb_logcat_start/adb_logcat_poll. However, that contrast is never stated, and there are no explicit when-to-use, when-not-to-use, or alternative-tool instructions despite a dense logcat sibling cluster.

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

adb_logcat_clearB

Clear all logcat buffers on the device

NameRequiredDescriptionDefault
deviceNoDevice serial

TDQS

B3.1/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden. It never states that clearing is an irreversible destructive discard of buffered logs, whether root or elevated permissions are required, or what happens to any in-flight adb_logcat_start sessions.

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?

One short sentence with the verb and scope front-loaded and zero filler. Brevity borders on under-specification rather than verbosity, but nothing is wasted.

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

Completeness4/5

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

For a zero-parameter-effect, single-device destructive operation with no output schema, the description covers the essential what. The missing piece is the destructive/irreversible nature and effect on active log sessions, which matters given the absence of annotations.

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

Parameters3/5

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

With a single optional parameter at 100% schema description coverage, the schema already documents the 'device' serial argument. The description adds nothing about what happens when 'device' is omitted (which device is targeted), so it does not compensate beyond the schema baseline.

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

Purpose4/5

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

The description names a specific verb (Clear) and resource (all logcat buffers) plus scope (on the device), so the operation is unambiguous. It does not differentiate itself from nearby siblings such as adb_logcat_stop, adb_logcat_sessions, or adb_logcat, so it falls short of a 5.

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?

There is no when-to-use guidance, no prerequisites, and no mention of the alternative logcat tools (adb_logcat, adb_logcat_start/poll/stop) or when clearing is preferable to just starting a fresh capture. The agent must infer the workflow entirely.

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

adb_logcat_crashC

Get recent crash logs from the crash buffer

NameRequiredDescriptionDefault
linesNoNumber of lines (1-10000)
deviceNoDevice serial

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries the entire burden. It does signal that results are 'recent' (implying a bounded window rather than full history) and scoped to the crash buffer specifically, which is useful. But it says nothing about read-only safety, the default of 50 lines, the maximum of 10000, the behavior when no device is specified, or the 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.

Conciseness4/5

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

A single front-loaded sentence with no filler. It's efficient, though it may be too sparse to earn its place as the sole guidance for an agent choosing among several log tools.

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?

The tool itself is simple (2 optional params, no output schema, no annotations), so not much is required. Still, the description leaves the key decision of 'crash buffer vs. crash_logs vs. logcat' unresolved and never mentions the default device handling or default line count. For a tool in a large family of log/crash siblings, that gap matters.

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 both 'lines' (1-10000, default 50) and 'device' (serial) are fully documented in the schema. The description adds no syntax or semantics beyond that. The baseline 3 is appropriate since the schema already does the work.

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 gives a specific verb and resource: 'Get recent crash logs from the crash buffer'. It's clear what it retrieves and that it targets the dedicated crash buffer. However, it doesn't distinguish this tool from its close siblings 'adb_crash_logs' or the general 'adb_logcat' family, which an agent would need to choose between.

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?

There's no indication of when to use this tool versus 'adb_crash_logs' or 'adb_logcat', or when not to. No prerequisites, no alternates mentioned. The agent has to infer selection from names alone.

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

adb_logcat_pollA

Retrieve new logcat lines since the last poll from a running watcher session.

NameRequiredDescriptionDefault
sessionYesSession ID from adb_logcat_start (e.g., 'watch_1')
maxLinesNoMax lines to return per poll (1-10000)
result_handleNoOptional. If provided, store this tool's result under `result://<tool>/<name>` for retrieval after compaction. Name must be 1-32 chars, [a-zA-Z0-9_-]. Existing handles with the same tool+name are overwritten. Use adb_result_list to see active handles, adb_result_get or the MCP Resource URI to retrieve.
result_handle_ttlNoOptional. TTL in seconds for the result handle (60 to 604800). Default 43200 (12 hours). Ignored if result_handle is not provided.

TDQS

A3.6/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 does disclose the key stateful trait — results are incremental and cursor-based, not a full dump — which is genuinely valuable. It omits whether the call blocks waiting for output, whether polling consumes/advances the cursor, and what an empty result looks like, all of which matter for a polling loop.

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

Conciseness5/5

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

A single sentence with no filler, and the most decision-relevant qualifier ('since the last poll') is placed before the session dependency.

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 poll tool with complete schema coverage and no output schema, the description covers the essentials: what is returned and its incremental nature. The remaining gap is return shape and blocking behavior, which is a modest omission rather than a blocking one.

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 session, maxLines, result_handle and result_handle_ttl are already fully documented in the schema. The description adds only the framing that maxLines caps a per-poll batch of new lines; baseline 3 applies.

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

Purpose4/5

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

Specific verb (Retrieve) plus a precisely scoped resource: only NEW logcat lines, only since the last poll, only from a running watcher session. That distinguishes it from adb_logcat and adb_logcat_start without opening their schemas, though it never names those siblings explicitly.

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

Usage Guidelines3/5

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

The phrase 'from a running watcher session' implies the prerequisite (a session created by adb_logcat_start) and the 'since the last poll' framing implies repeated invocation. However, there is no explicit statement of when to prefer this over adb_logcat or adb_logcat_crash, and no note about what to do when no new lines exist.

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

adb_logcat_sessionsB

List all active logcat watcher sessions

NameRequiredDescriptionDefault

No parameters

TDQS

B3.3/5.0
Behavior2/5

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

No annotations are supplied, so the description carries the full behavioral burden, and it discloses almost nothing beyond the one-line purpose. It does not state that the operation is read-only, whether sessions are per-device, or what identifying information each session exposes for use with poll/stop; with no output schema, that gap matters.

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

Conciseness4/5

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

A single front-loaded sentence with no filler, which is the right shape for a trivial zero-argument lister. It is arguably too terse rather than too long, so the sizing is defensible but leaves the description doing less work than it could.

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

Completeness3/5

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

For a zero-parameter, no-output-schema tool, the minimum needed to invoke it is present, so it is functional. However, given the crowded logcat family, an agent would benefit from knowing that the returned sessions can be fed into adb_logcat_poll or adb_logcat_stop, and that context is absent.

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

Parameters4/5

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

The tool takes zero parameters, so there is no parameter semantics for the description to explain, and the baseline of 4 applies. Nothing in the description misrepresents or obscures the (empty) input contract.

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 plus resource ('List all active logcat watcher sessions'), which is unambiguous about what the tool returns. It implicitly contrasts with the start/poll/stop siblings via the verb 'List' and the qualifier 'active', though it never names them explicitly.

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

Usage Guidelines3/5

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

Usage is only implied: an agent can infer this is the discovery step before calling adb_logcat_poll or adb_logcat_stop, but the description never states that. There are no when-to-use conditions, no exclusions, and no mention of the sibling tools whose session identifiers this presumably yields.

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

adb_logcat_startA

Start a background logcat watcher. Lines accumulate in a ring buffer. Use adb_logcat_poll to retrieve new entries.

NameRequiredDescriptionDefault
tagNoFilter by tag (e.g., 'MyApp'). Must match /^[a-zA-Z0-9_]+$/ — Android tags are identifier-shaped in practice.
deviceNoDevice serial
priorityNoMinimum priority level
bufferSizeNoMax lines to keep in ring buffer (100-50000, default 2000)

TDQS

A4/5.0
Behavior3/5

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

With no annotations at all, the description carries the full burden and does disclose the key non-obvious traits: the watcher runs in the background, output accumulates rather than returning inline, and a ring buffer is involved. It stops short of the operational facts an agent most needs — that old lines are silently dropped when the buffer fills, that adb_logcat_stop is required to release the watcher, and what happens if start is called again while one is already 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?

Three short sentences with the action front-loaded, the buffering behaviour second, and the follow-up tool last. Nothing is redundant and no sentence could be dropped without losing 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?

There is no output schema and all four parameters (none required) are fully described in the schema, so the description only needs to cover lifecycle and it does most of it: start, accumulate, poll. The missing piece is the stop/teardown half of the lifecycle, which matters for a long-running background watcher that consumes device-side resources.

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%: tag, device, priority enum, and bufferSize (with default 2000 and 100–50000 bounds) are all documented in the schema. The description adds no parameter meaning beyond that, so the baseline 3 applies — the schema, not the prose, does the parameter work.

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+resource ('Start a background logcat watcher') and immediately distinguishes this tool from the one-shot sibling adb_logcat by naming adb_logcat_poll as its retrieval counterpart. An agent can tell what this does and which tool continues the workflow without opening any schema.

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 routes the agent to adb_logcat_poll for retrieval, which establishes the start-then-poll pattern. However, it never mentions adb_logcat_stop (the obvious cleanup partner) or says when to prefer this watcher over the plain adb_logcat dump, so the when-to-use vs. alternatives picture is only half-drawn.

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

adb_logcat_stopC

Stop a running logcat watcher session

NameRequiredDescriptionDefault
sessionYesSession ID to stop (e.g., 'watch_1'), or 'all' to stop all

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are supplied, so the description carries the full burden of behavioral disclosure, and it states only 'stop'. It does not say whether the call is idempotent, what happens if the session ID is unknown or already stopped, whether buffered logs are discarded or retained for adb_logcat_poll, or what the response contains.

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

Conciseness4/5

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

One short, front-loaded sentence with no filler or redundant phrasing. It is efficient, though its brevity borders on under-specification rather than tight writing.

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 single-parameter session-stopper with fully documented schema and no output schema, the description is minimally adequate. It omits the post-stop consequences (session cleanup, error behavior, the 'all' bulk effect) that an agent would want before invoking it.

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 the 'session' parameter already documents the 'watch_1' ID format and the 'all' wildcard. The description adds no meaning beyond that, so the baseline 3 applies.

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

Purpose4/5

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

A specific verb ('Stop') plus a specific resource ('a running logcat watcher session') makes the operation unambiguous. It does not distinguish itself from nearby siblings such as adb_logcat_clear, adb_logcat_sessions, or adb_logcat_poll, so an agent must infer the boundary rather than read it.

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 sentence describes only what the tool does, giving no explicit when-to-use guidance. It never mentions that adb_logcat_sessions lists live sessions or that adb_logcat_clear handles buffer clearing, so an agent has no stated rule for choosing among the logcat family.

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

adb_lsC

List files and directories on the device

NameRequiredDescriptionDefault
pathNoDirectory path on device/sdcard
deviceNoDevice serial
detailsNoShow detailed listing (ls -la)

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are supplied, so the description carries the full behavioral burden. It implies a read-only operation but never says so, and it omits error behavior for a nonexistent path, whether the default is /sdcard, what permissions are needed, or what the returned listing looks like.

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

Conciseness4/5

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

A single short, front-loaded sentence with zero filler. It is efficient, though the terseness comes at the cost of the guidance covered in other dimensions rather than being a structural flaw.

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

Completeness3/5

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

With only 3 fully-documented parameters and no output schema, the definition is functional but thin: it never indicates that listing is relative to a device path defaulting to /sdcard, nor how entries are returned. Adequate as a minimum-viable definition, not complete.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents path, device, and the details flag (including the 'ls -la' meaning). The description adds no extra meaning about defaults or format, so baseline 3 applies.

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

Purpose4/5

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

The description gives a specific verb ('List') and resource ('files and directories') plus a scope ('on the device'), so the agent knows exactly what the tool does. It does not, however, distinguish itself from nearby siblings such as adb_find, adb_file_stat, or adb_cat, so it falls short of a 5.

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?

There is no statement of when to use this instead of adb_find (pattern search), adb_file_stat (single-entry metadata), or adb_cat (read contents). The only implied usage is 'you want a directory listing', which the agent must infer from the name alone.

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

adb_market_exportA

Export a local workflow with marketplace metadata for sharing. Produces a JSON file with name, description, version, author, and tags suitable for submission to the marketplace registry.

NameRequiredDescriptionDefault
tagsNoTags for discovery (e.g., ['testing', 'diagnostics'])
authorNoAuthor name to include in metadata
versionNoVersion string (semver-style, e.g., '1.2.3'). Defaults to '1.0.0' if omitted. Increment when publishing an updated workflow so registry consumers can detect changes.1.0.0
workflowYesName of the local workflow to export (from adb_workflow_list)

TDQS

A3.5/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 behavioral burden. It usefully discloses the output shape (a JSON file containing name, description, version, author, tags), but says nothing about where the file is written, whether it overwrites an existing export, or what happens if the named workflow does not exist.

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 tight sentences, front-loaded with the action and followed by the artifact produced. No filler and nothing an agent must scroll past to find the core purpose.

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 four-parameter export tool with no annotations and no output schema, the description covers purpose and the resulting file's contents. It is missing the practical details an agent needs to act on the result, namely the output location and whether the workflow must already exist locally.

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 all four parameters are already documented in the schema, and the description largely restates that field list. It also mentions a 'description' field that has no corresponding parameter in the schema, which adds slight ambiguity rather than meaning.

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 gives a specific verb and resource ('Export a local workflow with marketplace metadata') and states the artifact produced. It is distinguishable from siblings like adb_market_install or adb_market_search, though it never names them explicitly to reinforce the export-vs-install distinction.

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

Usage Guidelines3/5

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

Usage is implied by 'for sharing' and 'suitable for submission to the marketplace registry', which signals the pre-publish step. There is no explicit when-to-use/when-not guidance and no pointer to the complementary tools (adb_workflow_validate, adb_market_install) an agent would pair this with.

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

adb_market_installB

Download and install a workflow from the marketplace. Saves to the workflows directory for immediate use with adb_workflow_run.

NameRequiredDescriptionDefault
nameYesWorkflow name from the marketplace
forceNoOverwrite if a workflow with this name already exists locally

TDQS

B3.2/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 for a tool that mutates local disk state. It does disclose the destination ('workflows directory') and that force controls overwriting, which is useful, but it omits what happens by default when a workflow already exists (error vs. skip), whether anything needs network access or auth, and whether overwriting is recoverable.

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

Conciseness4/5

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

Two short sentences, front-loaded with the action and followed by the practical consequence. Nothing is redundant, though the second sentence could more precisely say why adb_workflow_run matters rather than merely naming it.

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 two-parameter tool with full schema coverage and no output schema, this is close to sufficient: the agent knows the source, destination, and next step. What is missing is conflict behavior when force is false and any indication of what the call returns on success or failure.

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 both 'name' and 'force' are already documented in the schema, including the overwrite semantics. The description adds the useful fact that the install lands in the workflows directory, but contributes no new detail about parameter format or validation; baseline 3 applies.

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

Purpose4/5

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

The description names a specific verb pair and resource: 'Download and install a workflow from the marketplace.' That is clear enough to separate it from adb_market_search (find) and adb_workflow_run (execute). It does not, however, distinguish it from the similarly named adb_registry_install, which an agent could easily confuse for the same operation.

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 second sentence ('for immediate use with adb_workflow_run') implies the follow-up workflow and therefore the reason to call this tool. There is no explicit when-to-use versus adb_market_search or adb_registry_install, and no stated preconditions such as needing a known workflow name.

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

adb_mirror_startB

Start live screen mirroring for a device using scrcpy. Requires scrcpy installed and on PATH. Supports windowed (visual) and headless (no display) modes. One session per device.

NameRequiredDescriptionDefault
deviceNoDevice serial
maxFpsNoMaximum frame rate (1-120, default 30)
recordNoRecord to a local file path (e.g., 'mirror.mp4')
bitrateNoVideo bitrate (e.g., '4M', '8M', '2M'). AK2 fix: format-validated at schema layer.4M
maxSizeNoMax dimension in pixels (0 = no limit, max 4096)
headlessNoNo-display mode — useful with recording. Omits the scrcpy window.
stayAwakeNoKeep device awake while mirroring
turnScreenOffNoTurn device screen off during mirroring (saves battery)

TDQS

B3.2/5.0
Behavior2/5

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

With no annotations, the description carries the full behavioral burden and discloses only the scrcpy dependency, headless support, and a one-session-per-device limit. It does not say whether the call blocks or returns immediately after launching a background session, how the session is terminated (adb_mirror_stop), or what error behavior occurs if a session already exists — critical for a 'start' 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?

Four short sentences, front-loaded with the core action, then prerequisites and constraints — no filler. The mode sentence slightly overlaps the schema's headless/record fields, which keeps it from a 5.

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 an 8-parameter session-launching tool with no annotations and no output schema, the description covers prerequisites and concurrency but omits lifecycle semantics (blocking vs. async, expected response, how to end the session). It is adequate to start the tool but not complete enough to predict its runtime behavior.

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 all eight parameters are already documented with defaults, ranges, and patterns. The description restates mode/recording concepts already present in the schema (headless, record) without adding format or interaction details, so the baseline 3 applies.

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

Purpose4/5

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

States a specific verb and resource ('Start live screen mirroring for a device using scrcpy') and names the underlying mechanism, which distinguishes it from screenshot/screencap siblings. It does not explicitly differentiate from adb_screenrecord_start or reference its lifecycle partners adb_mirror_stop/adb_mirror_status, leaving that inference to the agent.

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?

'Requires scrcpy installed and on PATH' is a genuinely useful prerequisite, and 'One session per device' signals a constraint. However, there is no explicit when-to-use guidance versus alternatives such as adb_screenrecord_start (file-only capture) or adb_screencap, and no statement of 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.

adb_mirror_statusA

Check scrcpy availability and list active mirroring sessions.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.6/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 and does disclose two distinct behaviors (an availability probe and a session listing), implying a non-mutating read. However, it says nothing about what happens when scrcpy is absent, whether a device must be connected, or what the listing contains — meaningful gaps for an unannotated 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?

A single front-loaded sentence with no filler; the availability check leads and the session listing follows. Every clause earns its place.

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

Completeness3/5

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

For a zero-argument read tool with no output schema and no annotations, the description is adequate but thin: it does not hint at the shape of the result (available/not, session count, device bindings) or what an agent should do with a negative availability result. Absent an output schema, a short note on return content would materially help.

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

Parameters4/5

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

The tool takes zero parameters, so there is no parameter semantics to explain and the baseline applies. Nothing in the schema requires compensation by the description.

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

Purpose4/5

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

States a specific verb and resource: checks scrcpy availability and enumerates active mirroring sessions. It is clearly distinct from adb_mirror_start and adb_mirror_stop by virtue of being the status/query counterpart, though it never names those siblings explicitly.

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

Usage Guidelines3/5

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

Usage is only implied: an agent can infer this is the pre-flight/verification check to run before adb_mirror_start or to confirm a session exists before adb_mirror_stop. There is no explicit when-to-use, no exclusions, and no stated prerequisites such as a connected device or a running scrcpy server.

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

adb_mirror_stopA

Stop an active scrcpy mirroring session for a device.

NameRequiredDescriptionDefault
deviceNoDevice serial (stops that device's session). Omit to stop all.

TDQS

A3.8/5.0
Behavior3/5

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

With no annotations, the description still makes the basic mutating behavior clear: an active scrcpy session is stopped for a device. It does not explain what happens when no session is active, whether the operation is idempotent, or whether any device-side state is affected.

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 single sentence is front-loaded with the action and target, with no unnecessary wording. Its brevity is appropriate for a simple lifecycle-stop 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?

Together with the fully documented optional parameter, the description provides enough information for ordinary invocation, including targeted and stop-all operation through the schema. Explicit no-session behavior and brief lifecycle guidance would make it more complete, but these are modest gaps for this simple tool.

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

Parameters3/5

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

Schema description coverage is 100%, and the device parameter already documents both the serial format and the important omit-to-stop-all behavior. The description's phrase "for a device" reinforces targeting but adds little beyond that 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 uses a specific verb and resource: stopping an active scrcpy mirroring session for a device. This clearly distinguishes the tool's lifecycle role from adb_mirror_start and adb_mirror_status.

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 word "active" implies that the tool is intended for an existing mirroring session. However, it gives no explicit guidance about checking adb_mirror_status first, when not to call it, or the stop-all behavior available by omitting device.

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

adb_mkdirC

Create a directory on the device. Supports -p flag for creating parent directories.

NameRequiredDescriptionDefault
pathYesDirectory path to create
rootNoUse root shell for protected paths
deviceNoDevice serial
parentsNoCreate parent directories as needed (-p flag, default true)

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full behavioral burden. It mentions parent-directory creation, but that duplicates the schema's parents parameter and omits key behaviors: what happens if the directory already exists, failure modes, and whether elevated privileges are needed.

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

Conciseness4/5

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

Two short sentences with the main purpose front-loaded and no filler. Slightly more could have been spent on non-redundant behavioral detail rather than restating the -p flag.

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 four-parameter, single-required-field tool with full schema coverage and no output schema, the definition is minimally sufficient. It lacks error/overwrite semantics and privilege notes that would round out a mutation tool with zero annotation coverage.

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

Parameters3/5

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

Schema description coverage is 100%, so all four parameters including root and device are documented in the schema. The description's only parameter reference is the -p flag, which the schema already explains, so it adds no meaning beyond the structured fields.

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

Purpose4/5

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

The description states a specific verb and resource ('Create a directory on the device'), which is clearly distinct from sibling file tools like adb_file_touch or adb_file_move. It does not explicitly name a sibling alternative, but the operation is unambiguous.

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

Usage Guidelines2/5

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

There is no guidance on when to use this versus alternatives such as adb_shell or adb_file_touch, nor any prerequisites or exclusions. Usage is only implied by the verb.

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

adb_mobile_dataC

Enable or disable mobile data

NameRequiredDescriptionDefault
deviceNoDevice serial
enabledYestrue = enable mobile data, false = disable

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are supplied, so the description carries the full behavioral burden, and it discloses almost nothing: not whether root is required, whether the change persists across reboots, whether it disrupts an active connection, or what is returned. Only the direction of the toggle is clear from the parameter name.

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

Conciseness4/5

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

A single six-word phrase with zero filler, and the operative verb leads. It is efficient, though the brevity edges into under-specification rather than true tightness.

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

Completeness2/5

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

For a device-state mutation with no annotations and no output schema, the description should at least mention permission requirements and side effects on connectivity. The schema covers the two simple parameters, but nothing tells the agent what this call actually does to the device or its return value.

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 both parameters ('device' serial and the 'enabled' boolean) are fully documented in the schema, so the baseline of 3 applies. The description adds no format, default, or per-device semantics beyond what the schema already states.

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

Purpose4/5

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

The description states a specific verb pair ('enable or disable') and resource ('mobile data'), so the action is unambiguous. It does not distinguish this from adjacent toggles in the sibling set (adb_wifi, adb_airplane_mode, adb_airplane_cycle), which an agent must resolve on its own.

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?

There is no guidance on when to use this instead of adb_wifi or adb_airplane_mode, nor any stated preconditions such as root or privileged shell access. The agent is left to infer the entire selection context from the name.

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

adb_modem_logsB

Capture modem/baseband-related logs from multiple sources: RIL (Radio Interface Layer) logcat, telephony framework logs, and kernel modem messages via dmesg (root required for dmesg). Useful for radio diagnostics and tracing baseband-framework communication.

NameRequiredDescriptionDefault
grepNoAdditional grep filter applied to all sources
linesNoMax lines per log source (1-5000, default 200)
deviceNoDevice serial

TDQS

B3.2/5.0
Behavior2/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 usefully flags that dmesg requires root, but never says whether this is a one-shot snapshot or a blocking capture, how long it runs, what happens if one source fails (partial results?), or whether root is needed for the other sources. For a multi-source capture tool this leaves significant unknowns.

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, front-loaded with the action and source list, with the root caveat placed inline where it matters. Slightly dense (the RIL parenthetical and the diagnostics rationale could be trimmed) but no wasted framing.

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

Completeness3/5

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

There is no output schema and no annotations, so the description is the only place an agent can learn the shape of the result — yet it never says how the three sources are returned (merged? sectioned?), which matters for a multi-source tool. Adequate on what it captures, incomplete on what comes back.

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% — grep, lines, and device are all documented with defaults and bounds — so the schema does the heavy lifting. The description adds nothing about parameter behavior, such as whether grep applies server-side across all three sources or whether device defaults to the sole connected device. Baseline 3 applies.

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

Purpose4/5

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

Specific verb (capture) plus resource (modem/baseband logs) and an explicit enumeration of the three sources: RIL logcat, telephony framework logs, and kernel modem dmesg. It does not, however, distinguish itself from near siblings such as adb_ril_poll, adb_telephony, adb_logcat, or adb_baseband_info, so an agent must infer the boundary.

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

Usage Guidelines3/5

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

The closing clause ('useful for radio diagnostics and tracing baseband-framework communication') implies the use case but never states when to choose this over adb_ril_poll/adb_ril_start or adb_logcat, nor any prerequisites beyond root for dmesg. Usage is implied rather than prescribed.

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

adb_multi_compareB

Run a command on all devices and compare outputs side by side. Highlights differences across devices.

NameRequiredDescriptionDefault
commandYesShell command to compare across devices
devicesNoDevice serials (omit for all online devices)

TDQS

B3.3/5.0
Behavior2/5

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

No annotations are supplied, so the description carries the full behavioral burden, yet it discloses only the fan-out-and-diff shape. It says nothing about how partial failures (offline or unauthorized devices) are reported, whether execution is parallel or sequential, whether the arbitrary shell command is treated as read-only or potentially destructive, or how the 'highlighted differences' are formatted in the response.

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

Conciseness4/5

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

Two short sentences with the action and its result front-loaded and no filler. It is efficient, though the second sentence largely restates the comparison already implied by 'compare outputs side by side'.

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 two-parameter tool with a fully documented schema and no output schema, the description conveys the essential contract: one command, many devices, diffed results. The gap is behavioral rather than structural — error semantics and output shape of the comparison are unstated, which matters more here because there are no annotations to fall back on.

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 the command and devices parameters are already documented, including the useful note that omitting devices targets all online devices. The description adds no syntax, quoting, or safety guidance for the command string and does not mention the devices subsetting at all, so the baseline of 3 applies.

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

Purpose4/5

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

States a concrete verb pair ('run a command', 'compare outputs') against a clear scope ('all devices'), plus the outcome ('highlights differences'). An agent can distinguish it from adb_shell or adb_multi_shell by the comparison framing, but the description never names those siblings, so differentiation is inferred rather than stated.

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

Usage Guidelines3/5

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

Usage is only implied: the comparison framing suggests you call it when you want cross-device output diffs. There is no explicit when-not guidance, no mention of the closely related adb_multi_shell (fan-out without diffing) or adb_multi_test, and no stated preconditions such as devices needing to be online.

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

adb_multi_installB

Install an APK on multiple (or all) connected devices in parallel.

NameRequiredDescriptionDefault
apkPathYesLocal filesystem path to the APK file
devicesNoDevice serials (omit for all online devices)
replaceNoReplace existing app (-r)

TDQS

B3.1/5.0
Behavior2/5

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

With no annotations, the description carries the full behavioral burden, and its only added trait is 'in parallel'. It does not disclose what happens on partial failure (does one device failing abort the rest?), whether the call blocks until all installs finish, what permissions or device states are required, or how results are aggregated. For a mutating multi-device tool this leaves significant gaps.

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

Conciseness4/5

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

A single front-loaded sentence with no wasted words and the parallel/multi-device qualifier placed early. It is efficient, though the extreme brevity contributes to the missing failure and blocking semantics rather than compensating for them.

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

Completeness2/5

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

There are no annotations and no output schema, so the description is the only place an agent can learn behavioral expectations for a parallel mutation across N devices. It omits error semantics, partial-success handling, return shape, and ordering/blocking behavior, which are exactly the things an agent needs before invoking this over the simpler adb_install.

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 apkPath, devices, and replace (including the -r mapping and the omit-for-all default) are already fully documented in the schema. The description adds nothing beyond that, so the 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 states a specific verb and resource (install an APK) plus scope (multiple or all connected devices, in parallel), which is enough to distinguish it from the single-device adb_install in the sibling list. It stops short of naming that sibling explicitly, so differentiation requires the agent to infer it from the name.

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?

'Multiple (or all) connected devices' implies the when-to-use case versus a single-device install, and the schema note 'omit for all online devices' reinforces it. However, there is no explicit statement of when to prefer this over adb_install, adb_install_bundle, or adb_farm_run, and no prerequisites such as requiring devices to be online.

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

adb_multi_shellA

Execute a shell command on multiple (or all) connected devices in parallel. Returns results grouped by device.

NameRequiredDescriptionDefault
commandYesShell command to execute on each device
devicesNoDevice serials to target (omit for all online devices)
timeoutNoTimeout per device in milliseconds (1s-10min)

TDQS

A3.5/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 adds two useful behaviors: execution is parallel and results are grouped by device. It is silent on partial-failure semantics (does one device's failure abort the rest?), whether results are ordered, and whether the command runs with elevated or normal shell privileges.

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: the action and scope first, the return-shape note second. No filler, no redundancy, and the most decision-relevant fact (parallel, multi-device) is 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?

With no annotations and no output schema, the description does just enough: it states the return grouping so the agent knows results are per-device rather than merged. It is still thin for an unannotated tool that runs arbitrary shell commands across a fleet, omitting failure behavior and any safety or authorization 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 all three parameters, including the per-device timeout range, are already documented in structured data. The description only reinforces the devices-omitted-means-all behavior already stated in the schema, adding no syntax or format detail.

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

Purpose4/5

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

The description names a specific verb+resource ("Execute a shell command") and adds a differentiating scope qualifier: on multiple or all devices, in parallel. That scope distinction separates it from adb_shell without requiring the agent to open a schema, though it never names that sibling explicitly.

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

Usage Guidelines3/5

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

"On multiple (or all) connected devices" implies the multi-device use case, and the schema's devices description notes omitting it targets all online devices. However, there is no explicit guidance on when to prefer this over adb_shell looped per device, nor on preconditions such as needing more than one connected device.

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

adb_multi_testA

Run a comparative test workflow across all connected devices (host + QEMU guests). Executes a predefined diagnostic profile or custom command list on every device in parallel, compares results per-check, and reports matches and differences. Profiles: 'firmware' (baseband, bootloader, kernel, security patch), 'security' (SELinux, verified boot, encryption), 'network' (radio, WiFi, SIM), 'identity' (model, chipset, architecture), 'full' (all profiles). Custom commands also supported.

NameRequiredDescriptionDefault
devicesNoDevice serials to target (omit for all online devices)
profileNoPredefined test profile to run. 'full' runs all profiles.
timeoutNoTimeout per command per device in ms (1s-60s, default 10s)
commandsNoCustom checks to run (max 50). Each has a label and command.

TDQS

A3.5/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, and it does disclose real behavior: execution is parallel across every device, comparison happens per-check, and the output distinguishes matches from differences. It does not warn that 'commands' are arbitrary shell commands (mutation risk), does not state permission or rooting requirements, and does not describe the result structure. Useful, but incomplete for an unannotated 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 core action and its comparison semantics are front-loaded in the first two sentences, and the trailing profile catalog is dense but genuinely informative rather than padding. The profile list makes the entry long, but every clause contributes a distinct fact.

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 four-parameter, unannotated, output-schema-less tool, the definition covers what it does and the profile vocabulary well. It falls short on the return shape beyond 'matches and differences' and on the safety profile of running custom commands across many devices, both of which an agent needs before calling it.

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 the baseline is 3, and the description earns above that by explaining what the enum values mean semantically: 'firmware' covers baseband/bootloader/kernel/security patch, 'security' covers SELinux/verified boot/encryption, and so on. That meaning is not in the schema, where the enum is a bare list. It does not add anything about the timeout or devices parameters.

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

Purpose4/5

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

The description names a specific verb and resource: run a comparative test workflow across all connected devices (host + QEMU guests), executing profiles or custom commands and reporting matches/differences. That is far more specific than the bare name. It never names the adjacent siblings (adb_multi_shell, adb_multi_compare) that an agent would otherwise confuse it with, so differentiation stays implicit.

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

Usage Guidelines3/5

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

Usage is implied by the phrase 'comparative test workflow' and by the profile list, which suggests when the tool is appropriate. There is no explicit when-to-use/when-not guidance and no alternative named, even though adb_multi_shell and adb_multi_compare sit in the same family and would be the obvious competitors.

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

adb_neighboring_cellsB

List all visible cells beyond the serving cell: neighboring LTE/5G/WCDMA/GSM cells with their identities and signal strengths. Useful for cellular network surveys, coverage analysis, and radio environment characterization.

NameRequiredDescriptionDefault
deviceNoDevice serial

TDQS

B3.4/5.0
Behavior3/5

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

With no annotations, the description carries the whole burden; it does signal that this is a read-only enumeration and says what per-cell fields come back. It omits operationally important behavior: Android typically requires location permission for neighbor cell data, results may be sparse or empty depending on modem/network state, and no note is made about latency or modem prerequisites.

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 tight sentences with the resource and scope front-loaded and no redundant wording. The second sentence is use-case framing that is useful but slightly generic filler relative to the first.

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 single-parameter read tool with no output schema, the description should sketch the return shape; it names identities and signal strengths but not the field set an agent would actually receive. The absence of any prerequisite or permission note leaves a gap an agent cannot fill from annotations or 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?

The single optional `device` parameter is fully described in the schema (100% coverage), so the description adds nothing new about parameters and arguably does not need to. Baseline 3 applies because the schema already handles this.

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 and resource ("List all visible cells beyond the serving cell") and enumerates the radio technologies and payload (identities, signal strengths). The phrase "beyond the serving cell" implicitly separates it from the serving-cell siblings such as adb_cell_identity, but no sibling is named explicitly, so differentiation is inferred rather than stated.

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

Usage Guidelines3/5

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

Three use cases are given (surveys, coverage analysis, radio environment characterization), which implies when to reach for the tool. However, there is no guidance on when NOT to use it or which sibling to prefer for serving-cell versus neighbor data, leaving the choice to inference from names alone.

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

adb_networkB

Get network connectivity info including WiFi, cellular, and active connections

NameRequiredDescriptionDefault
deviceNoDevice serial

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 behavioral burden. The verb 'Get' implies a read-only operation and the listed categories indicate scope, but there is no explicit statement about permissions, default device behavior, side effects, or output 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, front-loaded sentence with no redundant wording. It efficiently states the tool's purpose and the main categories of information returned.

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 read-only tool with one optional parameter and no output schema, the description gives enough to understand the broad purpose. However, it lacks guidance on device defaults, return format, and sibling differentiation, leaving gaps for an agent choosing among many network tools.

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

Parameters3/5

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

The single 'device' parameter is fully described in the schema (100% coverage), so the schema already explains its meaning. The description does not add any parameter-level detail, such as whether the device is optional or what happens when omitted, so the baseline of 3 applies.

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

Purpose4/5

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

The description uses a specific verb ('Get') and resource ('network connectivity info') and enumerates the data categories (WiFi, cellular, active connections). It is clear what the tool returns, but it does not differentiate itself from nearby siblings such as adb_wifi, adb_network_connections, or adb_network_scan.

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

Usage Guidelines2/5

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

No when-to-use guidance or alternatives are given. An agent must infer that this tool is for general connectivity status, but with many network-related siblings it is unclear when to choose this over adb_wifi, adb_mobile_data, or adb_network_connections.

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

adb_network_auto_connectA

Discover and automatically connect to ADB devices on the local network. Combines network scanning with adb connect in one step. Probes a single port (default 5555) on each candidate; if you need to cover the full ADB port range (5555-5558) use adb_network_scan first, then adb_connect with the discovered host:port.

NameRequiredDescriptionDefault
portNoADB port to probe and connect (1-65535, default 5555)
deviceNoDevice serial (used to determine local subnet for ARP-based discovery)
ipRangeNoIP range to scan (e.g., '192.168.1.1-254')

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 does disclose the key non-obvious behavior that probing is limited to one port per candidate and that connecting is performed as part of the call (an external state change). It does not say what happens on failed connects, whether existing connections are affected, whether it blocks/times out on a large ipRange, or what the result contains.

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

Conciseness5/5

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

Three sentences, front-loaded with the primary action, then the behavioral constraint, then the routing alternative. No redundant restatement of the name or title, and every clause carries information the agent needs to choose or call the 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 3-parameter, no-output-schema discovery tool with full schema coverage, the description covers purpose, port-probing scope, and sibling routing well. The remaining gap is that with an unannotated mutating side effect (creating a connection), it says nothing about failure behavior or what is reported back on success.

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 all three parameters are already documented in the schema, including the port default and range and the device param's ARP/subnet role. The description reinforces only the port default (5555) and the single-port constraint; it adds no extra syntax guidance for ipRange beyond the schema example.

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

Purpose5/5

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

States a specific compound verb+resource: discover ADB devices on the local network and connect to them in one step. It explicitly distinguishes itself from the closely-named siblings adb_network_scan (scan only) and adb_connect (connect to a known host:port) by defining its combined role.

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?

Gives an explicit alternative path with a concrete condition: 'if you need to cover the full ADB port range (5555-5558) use adb_network_scan first, then adb_connect'. Combined with the stated single-port default, an agent can decide between this tool and the two-step approach without guessing.

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

adb_network_connectionsB

Show active network connections on the device (TCP/UDP). Similar to netstat — shows established connections, listening ports, and connection states.

NameRequiredDescriptionDefault
deviceNoDevice serial
protocolNoFilter by protocolall

TDQS

B3.3/5.0
Behavior3/5

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

With no annotations, the description must carry the full behavioral burden. It does disclose the shape of the output (established connections, listening ports, connection states), which is genuinely useful, but it omits whether the call requires root/privileged access, whether it is strictly read-only, and whether it can block or time out.

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, zero filler, and the core purpose is front-loaded before the netstat analogy. Nothing can be trimmed without losing 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 two-parameter read tool with no output schema, the description covers intent and rough result content adequately. It is still thin on prerequisites (root access), result format, and how device selection defaults when the optional parameter is omitted.

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 'device' and the tcp/udp/all enum are already fully documented in the schema. The description's '(TCP/UDP)' phrasing only loosely gestures at the protocol filter, adding no meaning the schema lacks — baseline 3 applies.

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

Purpose4/5

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

States a specific verb and resource ('Show active network connections on the device') and scopes it to TCP/UDP, so an agent knows this is a socket/port inspection tool. It does not name the nearby siblings (adb_network, adb_network_scan, adb_tcpdump_start) that an agent must choose between, so it stops short of a 5.

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?

There is no when-to-use or when-not-to-use guidance, and no named alternative. The netstat analogy implies a diagnostic context but leaves the agent to infer that adb_network_scan or adb_tcpdump_start are the right pick for other networking questions.

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

adb_network_device_ipA

Get the WiFi IP address of a connected device. Useful for switching from USB to wireless debugging without needing to find the IP manually on the device.

NameRequiredDescriptionDefault
deviceNoDevice serial

TDQS

A3.7/5.0
Behavior3/5

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

No annotations are supplied, so the description carries the burden. It implies a read-only lookup, but does not say what happens if WiFi is off, whether the device must already be connected over ADB, or what an error looks like. For a simple getter this is acceptable but leaves real 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 short sentences, front-loaded with the operation and followed by a single motivating use case. Nothing is wasted and there is no filler or restatement of the title.

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

Completeness4/5

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

For a one-parameter read tool with no output schema and no annotations, the definition covers what it does and why an agent would call it. The main missing piece is the return form, notably whether the address is IPv4, IPv6, or a list, which an agent may need to interpret the result.

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% for the single 'device' parameter, so the schema already explains it fully and the description need not repeat it. The description adds the useful framing that the call targets 'a connected device', consistent with the serial parameter. Baseline of 3 is exceeded only slightly because nothing extra about the parameter is contributed.

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

Purpose4/5

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

The description states a specific verb and resource: 'Get the WiFi IP address of a connected device.' That is unambiguous and lets an agent distinguish it from broader siblings like adb_network or adb_device_info. It never names an alternative tool, so it falls short of a 5 on differentiation.

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

Usage Guidelines3/5

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

It gives one concrete scenario, switching from USB to wireless debugging, which implies when the tool is useful. However it names no alternative (e.g. adb_wifi, adb_tcpip) and states no preconditions such as the device needing WiFi enabled or an active connection. Usage is implied rather than prescribed.

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

adb_network_scanA

Scan the local network for Android devices with ADB enabled over WiFi/TCP. Probes common ADB ports (5555-5558) on hosts from the ARP table and optionally a custom IP range. Discovered devices can be connected with adb_connect.

NameRequiredDescriptionDefault
portsNoCustom ports to probe (default: [5555, 5554, 5556, 5557, 5558], max 20)
deviceNoDevice serial (used to determine the local subnet if no ipRange given)
ipRangeNoIP range to scan (e.g., '192.168.1.1-254'). If omitted, scans hosts from the ARP table only.
timeoutMsNoConnection timeout per host in ms (500-10000, default 2000)

TDQS

A3.5/5.0
Behavior3/5

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

No annotations are supplied, so the description must carry the behavioral burden. It discloses the probing mechanism and that an ARP-table-only scan happens when no range is given, which is useful, but it says nothing about expected scan duration, network-side effects, whether the scan is passive/safe for production devices, or the shape of the result beyond 'discovered devices'.

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 purpose, followed by mechanism and the natural next step. No filler and no restatement of the tool name.

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 scan tool with no output schema and no annotations, an agent still lacks the return shape (list of host/port pairs?), an indication of how long a scan may take, and any caution about scanning subnets. What is present is accurate but not sufficient for confident invocation.

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 every parameter is already documented. The description adds marginal context by restating the default port set and the ARP-table fallback for ipRange, but says nothing about the device parameter's subnet-derivation role beyond what is already in the schema. Baseline 3 applies.

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

Purpose4/5

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

States a concrete verb and target: scan the local network for Android devices with ADB enabled over WiFi/TCP, and explains the mechanism (probe ports 5555-5558 on ARP-table hosts). It does not explicitly contrast with neighbors like adb_devices or adb_network_device_ip, but the scope is unambiguous.

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

Usage Guidelines3/5

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

The description implies usage by naming adb_connect as the follow-up action for discovered devices, which helps an agent chain calls. However, it never says when this tool should be preferred over adb_devices (already-connected devices) or adb_network_device_ip, and offers no exclusions or prerequisites.

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

adb_nfc_firmwareB

NFC controller firmware identification. Reports controller type (NXP/Broadcom/Samsung/ST), firmware version, NCI version, supported technologies (NFC-A/B/F/V), secure element availability (eSE/UICC), and HCE (Host Card Emulation) support.

NameRequiredDescriptionDefault
deviceNoDevice serial
maxLinesNoLines of dumpsys output to inspect (50-2000, default 200). Raise for verbose vendor builds.

TDQS

B3.4/5.0
Behavior3/5

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

No annotations are supplied, so the description carries the full burden. It clearly discloses the returned content (controller vendor, firmware/NCI version, RF technologies, eSE/UICC, HCE), which implies a read-only identification operation, but says nothing about required permissions, whether it depends on dumpsys availability, or what happens on devices without NFC hardware.

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, front-loaded with the identification purpose followed by the reported fields. No filler, though the long parenthetical enumeration is dense and could be trimmed without loss.

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 read-only probe with two well-documented parameters and no output schema, the description's enumeration of return fields effectively substitutes for the missing output schema. Nothing an agent needs to call it correctly is absent, aside from optional usage routing.

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 both parameters (device serial, maxLines with range and default) are fully documented in the schema. The description adds nothing about either parameter, so baseline 3 applies; it neither compensates nor misleads.

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

Purpose4/5

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

States a specific verb and resource: "NFC controller firmware identification" plus an explicit enumeration of what is reported. This distinguishes it from the other firmware siblings (adb_wifi_firmware, adb_bluetooth_firmware, adb_gps_firmware) by resource, though it never names them or adb_firmware_probe.

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?

There is no when-to-use guidance, no prerequisites, and no routing to alternatives such as adb_firmware_probe, adb_firmware_diff, or adb_firmware_history. The only cue is the resource name itself, which leaves the agent to infer that this is the NFC-specific firmware read.

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

adb_notificationsB

Read active notifications on the device. Parses the notification manager dump to extract package, title, text, importance, channel, and flags for each notification. Useful for verifying push notification delivery, monitoring notification state, and testing notification-related features.

NameRequiredDescriptionDefault
deviceNoDevice serial
filterNoFilter by package name (partial match, case-insensitive)
maxResultsNoMaximum notifications to return (1-50, default 20)

TDQS

B3.4/5.0
Behavior3/5

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

No annotations exist, so the description carries the full burden. It does convey that this is a pure read (no mutation) and that results are derived by parsing a notification-manager dump, which usefully implies the data is a snapshot of currently active notifications only. It does not say what happens with zero notifications, whether dismissed/ongoing notifications are included, or whether any device-side permissions/root are needed.

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

Conciseness4/5

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

Three short sentences, front-loaded with the action and scope, then the return fields, then use cases. No redundant or filler wording; the only mild loss is that the return-field sentence could be read as padding given there is no output schema to rely on.

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 is simple (3 optional params, no nested objects, no output schema) and the description covers what it does and what fields come back. Still missing for full completeness: the 'active notifications only' snapshot caveat, empty-result behavior, and any environment prerequisites, which matter for a dump-parsing read 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 all three parameters (device, filter, maxResults) are already documented in the schema including the partial/case-insensitive match semantics. The description adds no parameter-level meaning, leaving this at the baseline for full schema coverage.

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

Purpose4/5

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

States a specific verb and resource ('Read active notifications on the device') and adds the mechanism ('Parses the notification manager dump') plus the exact fields extracted. It is clearly not one of the many shell/file/UI siblings, though it never names a neighbor like adb_dumpsys or adb_logcat as the alternative for notification debugging.

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 third sentence gives three concrete use contexts (verifying push delivery, monitoring state, testing notification features), which implies when to call it. It gives no exclusions, prerequisites (device connected, permission), or alternatives for cases where notifications aren't visible this way.

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

adb_open_urlA

Open a URL on the device in the default browser or handling app. Uses Android's VIEW intent action.

NameRequiredDescriptionDefault
urlYesURL to open (must be a valid URL with scheme)
deviceNoDevice serial

TDQS

A3.5/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 intent mechanism (VIEW action) and that the default handler resolves it, which is useful behavior beyond the schema. However, it omits failure modes (no handler registered, malformed scheme), whether the call waits for the activity, and any permission or device-selection 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?

Two short sentences, front-loaded with the action and the resource, with the second sentence adding non-redundant mechanism detail. Nothing is wasted.

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

Completeness3/5

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

For a simple two-parameter tool with fully documented parameters and no output schema, the description covers the essentials. It still leaves an agent guessing about error behavior and device-defaulting rules, which matter for reliable invocation.

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 'url' (with scheme requirement) and 'device' serial are already documented. The description adds only the dispatch context, no additional meaning about format, scheme restrictions, or device defaults. Baseline 3 applies.

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

Purpose4/5

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

States a specific verb and resource ('Open a URL on the device') plus the dispatch target ('default browser or handling app'), and adds the underlying mechanism (VIEW intent action). It distinguishes the tool from generic launchers like adb_start_activity, though it never names the sibling it overlaps with.

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

Usage Guidelines3/5

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

Usage is implied by the name and description - use it to launch a URL - but there is no explicit when-to-use versus adb_start_activity or adb_resolve_intents, and no guidance on what happens when no app handles the URL or when multiple devices are attached.

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

adb_orientationB

Get or set screen orientation. Can lock to portrait, landscape, reverse portrait, reverse landscape, or restore auto-rotate.

NameRequiredDescriptionDefault
actionYes'get' to read current orientation, 'set' to change it
deviceNoDevice serial
orientationNoOrientation to set (required when action='set'): auto=sensor, portrait=0°, landscape=90°, reverse_portrait=180°, reverse_landscape=270°

TDQS

B3.3/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 behavioral burden. It signals that 'set' mutates device state and that auto-rotate can be restored, but it omits key traits: whether the change persists across reboots or app restarts, whether special permissions or root are required, and what 'get' actually returns, none of which is covered by annotations.

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

Conciseness5/5

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

Two short sentences, zero filler, with the core verb/resource front-loaded and the available options following immediately. Every clause earns its place and nothing needs trimming.

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 3-parameter tool with no annotations and no output schema, the description is minimally adequate: it explains the get/set split and available orientations but not the return value of 'get' or side effects of 'set'. The schema covers parameters well, so the remaining gap is behavioral rather than structural.

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 both enums are documented in the schema, including the degree mapping (0°/90°/180°/270°) and the action semantics. The description only restates the orientation names (in spaced rather than snake_case form), so it adds no meaning beyond the schema; baseline 3 applies.

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

Purpose4/5

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

States a specific verb pair and resource ('Get or set screen orientation') and enumerates the supported orientations, so an agent immediately knows the tool's scope. It does not name or differentiate from siblings such as adb_screen or adb_screen_state, leaving ambiguity about which of the screen-related tools controls rotation versus power/state.

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

Usage Guidelines3/5

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

The description implies usage by noting it can lock or restore auto-rotate, which suggests a 'set' scenario, but it never states when to prefer this over adb_settings_put or adb_screen_state, nor does it state prerequisites like needing a connected device or a specific action selector. Usage is inferable from the action enum rather than from the description.

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

adb_ota_checkB

Compare the current system state against a saved fingerprint. Detects OTA updates by identifying changes in build ID, security patch, baseband firmware, bootloader, or kernel version.

NameRequiredDescriptionDefault
deviceNoDevice serial
fingerprintPathNoPath to saved fingerprint JSON. If omitted, compares against the most recent fingerprint for this device.

TDQS

B3.3/5.0
Behavior2/5

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

With no annotations, the description carries the full burden. It does not say whether the operation is read-only, what happens when no fingerprint exists for the device, whether a mismatch causes an error or a normal result, or how changes are reported. Only the comparison semantics are conveyed.

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 tight sentences with the action front-loaded and the detection criteria enumerated second. No filler, no restatement of the title, and every clause contributes 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 two-parameter tool with no output schema and no annotations, the description should say what the comparison returns (e.g., a verdict plus changed-field list) and what happens on a missing baseline fingerprint. Those gaps are real but modest given the tool's simplicity and the fully documented 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 description coverage is 100% and both parameters (device serial, fingerprintPath with its default-to-most-recent behavior) are fully documented in the schema. The description adds no syntax, format, or fallback detail beyond that, so the baseline of 3 applies.

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

Purpose4/5

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

States a concrete verb and resource: compare current system state against a saved fingerprint, and names the specific fields inspected (build ID, security patch, baseband, bootloader, kernel). It is clearly distinct from siblings like adb_ota_fingerprint (saving) and adb_ota_history, though it does not name those alternatives explicitly.

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

Usage Guidelines3/5

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

Usage is only implied: you must have a saved fingerprint first, which the schema hints at but the description never states. There is no guidance on when to prefer this over adb_firmware_diff or adb_ota_history, nor any stated precondition such as 'run adb_ota_fingerprint first'.

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

adb_ota_fingerprintA

Capture and save the current system fingerprint: build ID, Android version, security patch, bootloader, baseband firmware, kernel version, and A/B partition slot. Saves to a timestamped JSON file for later comparison.

NameRequiredDescriptionDefault
labelNoLabel for this fingerprint (e.g., 'pre-update', 'post-ota')current
deviceNoDevice serial

TDQS

A3.6/5.0
Behavior3/5

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

No annotations are supplied, so the description carries the full behavioral burden. It does disclose the meaningful side effect (writes a timestamped JSON file to disk) and the captured field set, but omits where the file is written, whether a device must be connected/authorized, and whether the operation is purely read-only on 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?

Two sentences, front-loaded with the action and field list, followed by the persistence outcome. Every clause carries information and there is 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?

With no output schema, the description should indicate what the caller gets back; it states the artifact (timestamped JSON file) but not the file path or return payload. Given the tool's modest complexity and fully documented parameters, it is otherwise complete enough to call 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%, with both 'label' (default 'current', example values given) and 'device' (serial) documented in the schema itself. The description adds no meaning beyond that — it never mentions label semantics or the device serial — so the baseline 3 applies.

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

Purpose4/5

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

The description gives a specific verb+resource ('Capture and save the current system fingerprint') and enumerates exactly which fields are captured (build ID, Android version, security patch, bootloader, baseband, kernel, A/B slot). It does not name a sibling to distinguish itself from, e.g., adb_firmware_probe or adb_device_info, so an agent must infer the boundary itself.

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?

'Saves ... for later comparison' implies the pre-/post-OTA baseline workflow, and the schema's label example ('pre-update', 'post-ota') reinforces it. However, there is no explicit statement of when to prefer this over adb_firmware_probe, adb_snapshot_capture, or adb_getprop, and no prerequisites are given.

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

adb_ota_historyA

List all saved system fingerprints for a device, showing version progression over time. Highlights changes between consecutive snapshots.

NameRequiredDescriptionDefault
deviceNoDevice serial (filters to this device). Omit for all devices.

TDQS

A3.5/5.0
Behavior3/5

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

No annotations are supplied, so the description carries the full behavioral burden. It does disclose something about the output shape (progression over time, and that consecutive-snapshot changes are highlighted), which is genuinely useful, but it never states that this is a non-destructive read, how results are ordered or bounded, or what an empty history looks like.

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

Conciseness5/5

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

Two short sentences, front-loaded with the core action and followed by the value-add about change highlighting. There is no filler or restated naming, and each sentence contributes distinct 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 one-parameter, non-destructive listing tool with no output schema, the description covers the gist but leaves the return structure underspecified — an agent knows it gets versions and diffs but not the fields, ordering, or how many snapshots are retained. With no annotations and no output schema, a sentence on the result shape would have closed the 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% and the single `device` parameter is already documented in the schema, including the omit-for-all-devices behavior. The description's "for a device" adds only faint reinforcement, so the baseline of 3 applies.

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

Purpose4/5

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

The description states a specific verb and resource ("List all saved system fingerprints for a device") and adds the temporal dimension ("version progression over time"), which distinguishes it from a capture-style sibling like adb_ota_fingerprint. It does not, however, explicitly name or rule out the nearest alternatives (adb_firmware_history, adb_ota_check), so the differentiation is implicit rather than stated.

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

Usage Guidelines3/5

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

The word "saved" and "over time" imply this is the retrieval/history tool rather than a fresh capture, so usage is inferable. But there is no explicit when-to-use or when-not-to-use guidance, and no pointer to adb_ota_fingerprint (capture) or adb_firmware_diff/history as the natural alternatives for an agent choosing among them.

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

adb_package_infoB

Get detailed info about an installed package (version, permissions, paths)

NameRequiredDescriptionDefault
deviceNoDevice serial
packageNameYesPackage name (e.g., 'com.example.app')

TDQS

B3.3/5.0
Behavior3/5

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

With no annotations present, the description carries the full disclosure burden. 'Get' and 'installed' imply a read-only lookup scoped to already-installed packages, and the parenthetical previews the returned fields, but it says nothing about failure behavior for missing packages, root/permission requirements, or response shape.

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 front-loaded sentence with the resource named before the returned fields. No filler, no 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?

For a two-parameter, no-output-schema tool the description does a fair job by listing the returned data. However, with no annotations and no output schema, it should also cover the device default and what happens when the package is not installed.

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 (device serial and packageName with an example) are already documented in the schema, and the baseline of 3 applies. The description adds only the constraint that the package must be installed, not additional format or defaulting semantics.

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 pairs a specific verb ('Get detailed info') with a precise resource ('an installed package') and enumerates the content returned (version, permissions, paths). It is clearly distinct from the many other adb_* siblings, though it never explicitly contrasts itself with adb_list_packages or adb_dumpsys.

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?

Usage is only implied by the phrase 'installed package' – the agent must infer that this is the per-package detail lookup rather than the bulk listing. No when-to-use, when-not-to-use, or prerequisite guidance is provided despite ~130 sibling tools including adb_list_packages, adb_list_permissions and adb_dumpsys.

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

adb_pairA

Pair with a device over WiFi using the pairing code from Developer Options → Wireless debugging → Pair device

NameRequiredDescriptionDefault
codeYes6-digit pairing code shown on the device
hostYesDevice IP and pairing port (e.g., '192.168.1.100:37123')

TDQS

A3.5/5.0
Behavior3/5

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

No annotations are supplied, so the description carries the full disclosure burden. It usefully explains that the code comes from the on-device pairing dialog, but it omits what pairing actually establishes, whether it persists, whether adb_connect is required afterward, and what failure looks like.

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

Conciseness5/5

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

A single front-loaded sentence with the action first and the code-location hint second. No filler, nothing to trim.

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 two-parameter tool with full schema coverage and no output schema, the description covers the input side adequately. It is thin on outcome and follow-up (that a connect step is typically needed next), which matters for a trust-establishing operation.

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

Parameters3/5

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

Schema coverage is 100% and both parameters are documented, including the regex-constrained host:port form and the 6-digit code format. The description adds no parameter meaning beyond pointing at where the code is displayed, so the baseline 3 applies.

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

Purpose4/5

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

States a specific verb and resource ('Pair with a device over WiFi') plus the exact source of the pairing code, which distinguishes it from adb_connect (connecting to an already-paired device) and adb_tcpip. It stops short of naming the sibling it complements, so the differentiation is inferable rather than explicit.

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

Usage Guidelines3/5

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

The Developer Options → Wireless debugging → Pair device path implies this is the first step of wireless setup, but the description never states when to use this versus adb_connect or adb_tcpip, nor any prerequisites such as both devices being on the same network.

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

adb_perf_snapshotB

Capture a performance snapshot for a package: memory usage, frame stats, and CPU info in one call.

NameRequiredDescriptionDefault
deviceNoDevice serial
packageNameYesPackage name to profile (e.g., 'com.example.app')

TDQS

B3.3/5.0
Behavior3/5

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

No annotations are supplied, so the description carries the full disclosure burden. It does useful work by stating exactly which metrics are bundled 'in one call', implying a single-pass read-only profiling operation, but it omits prerequisites (does the app need to be running?), expected latency, permission needs, and what the response looks like.

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

Conciseness5/5

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

A single tightly written sentence with the action and result front-loaded and the three captured metric categories listed inline. Nothing is redundant or padded.

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

Completeness3/5

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

With no annotations and no output schema, the description should say more about what comes back and under what conditions the capture succeeds. Knowing the three metric families is helpful but leaves the agent guessing about result structure and runtime requirements.

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 'packageName' and 'device serial' are already documented in the schema. The description's phrase 'for a package' reinforces the target of profiling but adds no syntax, default, or device-selection semantics beyond the schema.

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

Purpose4/5

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

The description uses a specific verb ('Capture') and resource ('performance snapshot for a package') and enumerates the collected data (memory, frame stats, CPU). This distinguishes it reasonably from narrower siblings like adb_heap_dump or adb_top, though it never names an alternative explicitly.

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?

There is no when-to-use or when-not-to-use guidance. With siblings such as adb_heap_dump, adb_top, adb_dumpsys, and adb_thermal_snapshot in the same environment, the agent gets no signal about when this consolidated snapshot is preferable to those targeted tools.

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

adb_permission_auditB

Audit runtime permission grants for a package. Lists all granted dangerous permissions grouped by category (Camera, Location, Phone, SMS, etc.) and flags potentially over-provisioned permissions. Compares grants against the dangerous permission manifest to identify unnecessary access.

NameRequiredDescriptionDefault
deviceNoDevice serial
packageNameYesPackage name to audit (e.g., 'com.example.app'). AZ7 fix: enforces Java-identifier shape so injection attempts are rejected at the schema layer before reaching validateShellArg.

TDQS

B3.4/5.0
Behavior3/5

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

No annotations are supplied, so the description must carry the behavioral burden. "Audit" and "Lists" imply a read-only inspection with no side effects, and the description usefully discloses the comparison against the dangerous permission manifest, but it never states read-only-ness, permission/root requirements, or failure behavior.

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

Conciseness4/5

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

Three sentences, each carrying information: what is audited, how results are grouped, and what is flagged. Front-loaded with the verb and resource, with no filler or restatement of the tool name.

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

Completeness3/5

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

With no output schema, the description does a fair job of describing the return shape (grants grouped by category, over-provisioning flags). However, for an analysis tool it omits prerequisites, how 'unnecessary access' is determined, and whether results are per-device or aggregate, leaving gaps an agent would want filled.

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 both parameters are documented in-schema, including the package-name pattern. The description adds no additional meaning about packageName or the optional device serial, so the baseline of 3 applies.

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

Purpose4/5

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

The description names a specific verb and resource ("Audit runtime permission grants for a package") and spells out the analysis performed: grouping by category and flagging over-provisioned grants. This separates it conceptually from plain listing siblings such as adb_list_permissions, though it never names that sibling explicitly.

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

Usage Guidelines3/5

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

Usage is only implied by the word "Audit" and the notion of over-provisioning; there is no explicit statement of when to prefer this over adb_list_permissions, whether the package must be installed, or what happens if the package is absent. An agent can infer the intent but gets no routing guidance.

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

adb_plugin_infoA

Show information about the plugin system: directory, how to create plugins, and loaded plugin count.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.5/5.0
Behavior3/5

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

No annotations are supplied, so the description bears the full burden. "Show information" does signal a non-mutating read, and the description discloses the three categories of content returned, which is useful behavioral context. It stops short of confirming purely read-only semantics, whether anything can be altered, or how the creation guidance is sourced, leaving gaps that a zero-annotation tool would ideally close.

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

Conciseness4/5

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

A single front-loaded sentence with the resource first and the returned items as a compact list; nothing is padded or repeated. Minor awkwardness comes from bundling "how to create plugins" into a list of return values, which reads more like documentation than data, but the sentence still earns its length.

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

Completeness3/5

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

With no output schema and no annotations, the description is the only source of information, and for a zero-argument informational tool it covers what matters by listing the three payload sections. It is incomplete in one practical respect: the sibling adb_plugin_list exists and the description never clarifies the boundary between counting loaded plugins and listing 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?

The tool takes zero parameters, which is the baseline-4 case; there is nothing for the description to disambiguate. The schema is empty and fully described, and the description correctly sets expectations that all output comes from a fixed, argument-free introspection call.

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?

Uses a specific verb ("Show information") and a specific resource ("the plugin system"), then enumerates the exact payload: directory, plugin-creation guidance, and loaded plugin count. That is far more precise than a bare name restatement. It does not, however, distinguish itself from the sibling adb_plugin_list, so an agent must guess which of the two to call for plugin enumeration.

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 enumerated contents imply the usage context (a discovery/help call you make when you need to know where plugins live or how to author one), but there is no explicit when-to-use statement and no mention of when to prefer adb_plugin_list. The strongest guidance present is indirect, coming from what the tool returns rather than from an instruction.

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

adb_plugin_listA

List all loaded plugins and the plugin directory path.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior3/5

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

No annotations are supplied, so the description carries the burden; it does disclose the return content (plugin list plus directory path), which is the main behavioral fact for a listing call. It says nothing about ordering, plugin types, whether the directory is host-side or device-side, or failure behavior, which are the remaining unknowns.

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 short sentence with the action and the return content front-loaded; nothing is redundant or padded.

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

Completeness4/5

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

For a zero-parameter, no-output-schema listing tool, the description is nearly sufficient because it names what comes back. The one meaningful gap is that it never clarifies how it relates to adb_plugin_info, which an agent choosing between adjacent plugin tools would want.

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

Parameters4/5

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

The tool takes zero parameters, so there is no parameter semantics to explain and the baseline of 4 applies. The description neither misleads nor wastes space on nonexistent inputs.

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

Purpose4/5

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

The description states a specific verb ('List') and resource ('all loaded plugins') and adds the returned plugin directory path, so the operation is unambiguous. It does not name or distinguish itself from the sibling adb_plugin_info, which plausibly covers a single plugin's details, so it stops short of a 5.

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?

Discovery intent is implied by 'list all loaded plugins', but there is no explicit when-to-use guidance or routing to the sibling adb_plugin_info for per-plugin detail. The agent can infer the situation, but must guess the boundary itself.

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

adb_profile_detectA

Auto-detect and build a device profile from the connected device. Captures hardware identification, chipset family, modem info, root status, and matches against the built-in profile library for known quirks.

NameRequiredDescriptionDefault
saveNoAutomatically save the detected profile
deviceNoDevice serial

TDQS

A3.5/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 does disclose scope well (what is collected, that results are matched against a built-in library for quirks), but it omits the operationally important traits: whether root is required for the root-status/chipset probes, how long detection takes, and whether it mutates any state when save defaults to false.

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 tightly packed sentences with the action front-loaded and the captured fields listed immediately after. The list of captured items is dense but each item earns its place by telling the agent what it gets back; no filler or repetition.

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 two-parameter detection tool with no output schema and no annotations, the description is nearly sufficient: it enumerates the profile contents in lieu of a return-value section and covers the library-matching behavior. The remaining gap is the missing guidance on how the output relates to adb_profile_save/list and any prerequisite 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%, so both parameters are already documented and the baseline applies. The description adds only that detection targets "the connected device," implying the device param is optional and defaults to the single attached device; it says nothing about the save flag beyond what the schema states.

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

Purpose4/5

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

"Auto-detect and build a device profile" is a specific verb+resource pair, and the second sentence enumerates the captured dimensions (hardware ID, chipset family, modem info, root status) plus the library-matching step. It is clear what the tool produces, but it never names the nearest siblings (adb_device_info, adb_getprop, adb_firmware_probe, adb_profile_save) so an agent must infer the boundary itself.

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

Usage Guidelines3/5

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

Usage is only implied by the phrase "from the connected device" — the reader infers this is a discovery step run before profile-dependent work. There is no explicit when-to-use, no when-not-to-use, and no routing to adb_profile_save or adb_profile_list, which are the obvious follow-ups given the default save=false.

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

adb_profile_listB

List all device profiles: built-in library entries and user-saved profiles.

NameRequiredDescriptionDefault

No parameters

TDQS

B3.1/5.0
Behavior2/5

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

No annotations are supplied, so the description carries the full burden of behavioral disclosure. It hints that results come from a built-in library plus user-saved profiles, which suggests a local/catalog source rather than live device state, but it does not say whether a connected device is required, whether entries include metadata such as id or match criteria, or how large the result set may be.

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

Conciseness4/5

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

A single front-loaded sentence with no filler; the colon-delimited clause efficiently enumerates the two result categories. Nothing is wasted, though nothing is elaborated either.

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, parameterless read tool with no output schema, the description covers what the tool returns at a coarse level. It leaves open whether a device must be attached and what identifying fields each profile carries, which matters because the natural next step is adb_profile_detect using one of these entries.

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

Parameters4/5

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

The tool takes zero parameters and the schema is correspondingly empty, so there is nothing for the description to disambiguate. Baseline 4 applies for a parameterless tool.

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 pairs a specific verb ('List') with a specific resource ('all device profiles') and distinguishes the two categories it returns — built-in library entries and user-saved profiles. It stops short of differentiating itself from the adjacent adb_profile_detect and adb_profile_save siblings by name.

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?

There is no explicit when-to-use statement, no prerequisite, and no mention of the alternative siblings (adb_profile_detect, adb_profile_save). An agent can infer that listing is a discovery step before detect/save, but the description never says so.

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

adb_profile_saveA

Save a device profile to the profiles library. Use after adb_profile_detect to persist the profile, or create a manual profile with custom quirks and notes.

NameRequiredDescriptionDefault
nameYesProfile name (used as filename)
profileYesProfile JSON string (from adb_profile_detect output or manually composed)

TDQS

A3.6/5.0
Behavior3/5

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

With no annotations, the description must carry the behavioral burden. It discloses the persistence target (the profiles library) and where profile content originates, but says nothing about overwrite behavior when the name collides with an existing file, failure modes, or what is returned after saving.

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, front-loaded with the action and followed by the workflow context. Nothing is redundant, though the closing "custom quirks and notes" phrasing is slightly loose since neither is a distinct parameter.

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 two-parameter write tool with no output schema and no annotations, the description covers purpose, source of input, and workflow position adequately. The main missing piece is collision/overwrite semantics, which matters because the name doubles as a filename.

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 (name as filename, profile JSON string) are already documented. The description reinforces that the profile value comes from detect output or hand composition, which is useful context, but adds no format or constraint detail beyond the schema.

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

Purpose4/5

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

"Save a device profile to the profiles library" states a specific verb and resource, and naming adb_profile_detect as the upstream step separates it from the detect/list siblings. It does not explicitly contrast with adb_profile_list, so it stops short of full sibling differentiation.

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 two concrete entry paths: persist output from adb_profile_detect, or compose a profile manually. That is clear when-to-use guidance tied to a named alternative, but there is no when-not guidance (e.g., what to do if a profile with that name already exists).

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

adb_pullC

Pull a file from the device to local filesystem

NameRequiredDescriptionDefault
deviceNoDevice serial
localPathNoLocal destination (defaults to temp dir)
remotePathYesFile path on the device

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are supplied, so the description carries the full behavioral burden. It discloses the transfer direction but says nothing about overwriting an existing local file, remote-path errors, permissions requirements, timeouts, or return values for a mutation of the local filesystem.

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

Conciseness4/5

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

A single front-loaded sentence with no wasted words, though its brevity borders on under-specification rather than optimal conciseness.

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 is simple and the schema covers all parameters, but with no annotations and no output schema the description should still say what happens on failure or when the destination exists. It is minimally adequate rather than 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%, so all three parameters (device, localPath, remotePath) are already documented in the input schema. The description adds no extra syntax, path-format, or defaults context beyond the schema, so the baseline 3 applies.

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

Purpose4/5

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

The description states a specific verb (pull) and resource (file) plus the transfer direction (device to local filesystem), which implicitly separates it from adb_push. It does not name the sibling explicitly, but an agent can identify the operation without opening the schema.

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?

There is no guidance on when to use this versus adb_cat, adb_ls, or adb_push, and no prerequisites or conditions are stated. The agent must infer that this is the counterpart to push purely from the word 'pull'.

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

adb_pushB

Push a local file to the device filesystem. Pre-flight checks: hard-blocked kernel paths, filesystem type warnings, symlink resolution, and destination storage availability.

NameRequiredDescriptionDefault
deviceNoDevice serial
localPathYesLocal file path to push
remotePathYesDestination path on device

TDQS

B3.4/5.0
Behavior3/5

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

No annotations exist, so the description carries the full behavioral burden, and it does disclose real behavior: kernel paths are hard-blocked, filesystem type issues produce warnings, symlinks are resolved, and destination storage is checked. It does not say whether an existing destination file is overwritten, whether a failed pre-flight aborts the push or merely warns, or what permissions are needed, leaving gaps for a mutation tool.

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

Conciseness4/5

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

Two sentences, front-loaded with the core action, and the pre-flight list is compact and information-dense. The second sentence is a fragment list rather than prose, which is acceptable but slightly telegraphic.

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 file-mutating tool with no annotations and no output schema, the description covers pre-flight validation well but omits overwrite semantics, failure behavior, and permission requirements. Those omissions are material for an agent deciding whether calling it is safe.

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 localPath, remotePath, and device; the description adds only an indirect hint that remotePath is validated for storage availability and kernel-path blocking. Baseline 3 is appropriate given the schema does the heavy lifting.

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

Purpose4/5

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

States a specific verb (push) plus the direction and resource (local file to device filesystem), which cleanly separates it from adb_pull, adb_file_write, and adb_file_copy without naming them. It stops short of explicitly naming the reverse-direction sibling, so it is a strong but not exemplary 5.

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 direction of transfer implies when to use it, and the pre-flight note hints it is the safe path for file deployment. However, it never states prerequisites (adb root, remount for system partitions) or explicitly contrasts with adb_file_write or adb_pull, so the agent must infer them.

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

adb_qemu_connectA

Connect to a running QEMU VM's ADB service, making the guest appear as a device for DeepADB tools. Requires the guest OS to have an ADB daemon running (e.g., Android guest with USB debugging enabled). Requires the 'adb' binary (install with: pkg install android-tools). Connections are restricted to localhost only — no remote host connections allowed.

NameRequiredDescriptionDefault
nameYesVM name to connect to (must be running)
timeoutNoConnection timeout in milliseconds (3s-30s). Default 10s.

TDQS

A3.6/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 localhost-only restriction and the ADB-daemon prerequisite, which are genuinely useful behavioral facts, but says nothing about idempotency (what happens if this VM is already connected), error behavior on timeout, or how the connection is torn down.

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?

Leading sentence states purpose and effect, followed by prerequisites and a hard constraint; each sentence earns its place. The install hint is slightly incidental but practical, and nothing is padded.

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 connection-establishing tool with no output schema and no annotations, the description should say what a successful connect returns or how failures surface, and it does not. Prerequisites and the localhost restriction are covered, but the lifecycle around the connection is only half-told despite adb_qemu_disconnect existing as a sibling.

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 both 'name' and 'timeout' are fully documented in the schema, including the 3s-30s bounds and default. The description adds no extra meaning about parameter interpretation beyond repeating the 'must be running' condition.

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

Purpose4/5

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

States a specific verb and resource ('Connect to a running QEMU VM's ADB service') plus the resulting effect (guest appears as a DeepADB device), which clearly separates it from adb_connect or adb_pair. It never explicitly names those siblings, so differentiation relies on the 'QEMU VM' qualifier rather than a direct contrast.

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?

Preconditions are spelled out concretely: ADB daemon running in the guest, USB debugging enabled, adb binary installed, and the VM must be running. What is absent is guidance on when to pick this over adb_connect or when to follow up with adb_qemu_disconnect, so the alternative-selection layer is left implicit.

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

adb_qemu_disconnectA

Disconnect from a QEMU VM's ADB service. Removes the guest from the device list.

NameRequiredDescriptionDefault
nameYesVM name to disconnect from

TDQS

A3.5/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, and it does disclose one meaningful side effect: the guest is removed from the device list. However, it is silent on whether the VM keeps running, whether the operation is idempotent, and what happens if the VM is not currently connected — relevant gaps for a teardown 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?

Two short sentences, the core action front-loaded and the side effect second. No filler, no repetition of the tool name, nothing that could be cut.

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 single-parameter tool with no output schema, the essentials are covered, but an agent still cannot tell whether the VM stays alive after disconnect or how this differs operationally from adb_qemu_stop. A brief lifecycle note would make it 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?

Only one parameter exists and the schema documents it at 100% coverage ('VM name to disconnect from'). The description adds no meaning beyond that, so the baseline 3 applies.

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

Purpose4/5

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

States a specific verb and resource: 'Disconnect from a QEMU VM's ADB service', which clearly separates it from the generic adb_disconnect and pairs naturally with adb_qemu_connect. It does not explicitly name the sibling it differs from, so it falls short of a 5.

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

Usage Guidelines3/5

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

Usage is only implied: the tool obviously undoes a prior adb_qemu_connect, but the description never says so, nor does it state prerequisites (must the VM be connected first?) or when to prefer adb_qemu_stop instead. No explicit when-to-use or when-not-to-use guidance is present.

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

adb_qemu_guest_shellA

Execute a shell command on a QEMU guest VM via ADB. The VM must be connected first (use adb_qemu_connect). The guest serial is derived internally — no user-supplied host/IP reaches the ADB binary. Subject to the same security middleware checks as adb_shell.

NameRequiredDescriptionDefault
nameYesVM name (must be connected via adb_qemu_connect)
commandYesShell command to execute on the guest
timeoutNoCommand timeout in milliseconds (1s-60s). Default 15s.

TDQS

A3.8/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, and it does add genuinely useful security context: the guest serial is derived internally, no user-supplied host/IP reaches the ADB binary, and the same middleware checks as adb_shell apply. It still does not disclose side effects of running arbitrary guest commands, output format, truncation, or failure behavior, which matters for a tool with no output 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?

Three compact sentences, front-loaded with the action, then the precondition, then the security posture. No filler and nothing redundant with the schema.

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

Completeness4/5

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

For a three-parameter execution tool with complete schema coverage, the critical operational facts (connection prerequisite and the internal serial derivation) are covered. The main gap is the unstated return value, which matters more here because there is no 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 description coverage is 100% and each of the three parameters is documented, including the timeout bounds, so the schema does the heavy lifting. The description adds no parameter-level meaning beyond repeating the connection precondition already stated in the 'name' field.

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

Purpose4/5

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

States a specific verb and resource: execute a shell command on a QEMU guest VM via ADB. The QEMU/guest qualifier differentiates it from the generic adb_shell sibling, though the contrast is only implied by the 'same security middleware checks as adb_shell' reference rather than stated outright.

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 names the prerequisite ('The VM must be connected first') and the tool that satisfies it (adb_qemu_connect), which is the main way an agent would misuse this. It stops short of saying when to prefer adb_shell or adb_root_shell over this tool.

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

adb_qemu_imagesB

Manage QEMU disk images for virtual machines. List available images, create new qcow2/raw disk images, or delete existing ones. Images are stored in the DeepADB image directory.

NameRequiredDescriptionDefault
nameNoImage name (for create/delete). Alphanumeric, hyphens, underscores only.
actionYesAction to perform
formatNoImage format. qcow2 is recommended (sparse, snapshots). raw for maximum I/O performance.qcow2
sizeMbNoImage size in MB (for create). Default 8192 (8GB). Range: 64-65536.

TDQS

B3.2/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 behavioral burden. It identifies create and delete operations but does not disclose whether deletion is irreversible, whether an image in use can be deleted, what permissions are required, or what happens if a named image already exists; for a mutation tool with destructive actions, this is a notable gap.

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 short sentences, front-loads the tool's purpose, and avoids unnecessary wording. The final sentence about storage location is useful context, though the action list slightly restates what the schema enum already conveys.

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 four-parameter management tool with no annotations and no output schema, the description covers purpose, actions, and storage location. It is still missing operational context that would help an agent invoke it safely, especially around create/delete preconditions and destructive behavior.

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 explains name, action, format, and sizeMb in detail. The description adds some context by mentioning qcow2/raw images and the storage directory, but it does not add parameter-specific meaning beyond the schema.

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

Purpose4/5

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

The description clearly states a specific resource, QEMU disk images, and enumerates the supported operations: list, create, and delete. It distinguishes the tool from runtime QEMU tools by focusing on image management, though it does not explicitly name which sibling handles VM setup or startup.

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

Usage Guidelines3/5

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

The description implies usage by listing the three supported actions, so an agent can infer that this is the image-management tool. However, it gives no explicit when-to-use guidance versus siblings such as adb_qemu_setup or adb_qemu_start, and it does not state prerequisites for creating or deleting images.

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

adb_qemu_setupA

Check and install QEMU for on-device virtualization. Verifies KVM availability, checks if QEMU is installed, reports version info, and can install QEMU via Termux package manager. Only available in on-device mode.

NameRequiredDescriptionDefault
installNoIf true, install QEMU via pkg if not already present

TDQS

A3.5/5.0
Behavior3/5

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

With no annotations, the description must carry the behavioral load: it discloses the KVM verification step, the installed-check, version reporting, and that installation goes through the Termux package manager (implying a network fetch and system mutation). It does not state what happens on failure, whether install is idempotent, or what it returns on success, so the disclosure is partial.

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 front-loaded sentences that lead with the action and close with the availability constraint. Efficient, with no filler, though the enumerated sub-steps read slightly like a list rather than prioritized 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?

For a one-parameter setup tool with no output schema, the description covers what is checked, what is optionally changed, and the environment restriction. The main residual gap is the shape of the result an agent should expect, which matters since the description claims it 'reports version info'.

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?

Only one parameter and its schema description already covers it at 100% ('If true, install QEMU via pkg if not already present'). The description's mention of installing via the Termux package manager restates rather than extends that, so baseline 3 applies.

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

Purpose4/5

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

States a specific verb+resource pair ('Check and install QEMU') and enumerates the sub-actions (KVM check, install check, version report, install). It is distinct from adb_qemu_start or adb_qemu_status, though it never names those siblings to sharpen the boundary.

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

Usage Guidelines3/5

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

The 'Only available in on-device mode' line is a genuine applicability constraint, and the setup framing implies this runs before adb_qemu_start. But there is no explicit when-to-use/when-not statement or reference to the sibling qemu tools it precedes.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

adb_qemu_startA

Boot a QEMU virtual machine with KVM hardware acceleration. Auto-detects optimal resource allocation: uses total cores minus 1 for the VM (reserving one for the host OS), and up to 65% of physical RAM. Custom values are accepted but capped at safe limits to prevent host starvation.

NameRequiredDescriptionDefault
cpusNoVirtual CPUs. Auto-detected if omitted (total cores minus 1). Capped at safe limit.
nameYesVM name (used to track and stop the VM)
imageYesDisk image filename (from adb_qemu_images) or absolute path
appendNoKernel command line arguments (for Android boot).
initrdNoPath to initrd/ramdisk image (for Android boot).
kernelNoPath to kernel image (for Android boot). If omitted, QEMU uses the disk image's bootloader.
adbPortNoHost port to forward to guest ADB (port 5555). Default 5556.
displayNoDisplay output. 'none' for headless (default). 'vnc' starts a VNC server on port 5900.none
memoryMbNoRAM in MB. Auto-detected if omitted (65% of physical RAM). Capped at safe limit.

TDQS

A3.5/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 and does disclose KVM acceleration, automatic CPU/RAM allocation, and safe caps to prevent host starvation. It does not cover lifecycle details such as name conflicts, background execution, ADB port side effects, or failure behavior, so important operational 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?

Two tight sentences front-load the purpose and then explain resource defaults with no filler. The second sentence is dense but earns its length by clarifying safety behavior.

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 main action and resource policy for a nine-parameter VM-start tool, but with no annotations or output schema it omits lifecycle, return/connection expectations, and prerequisite flow (image selection, setup). The schema supplies parameter detail, but the description is not fully complete for the operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so all nine parameters are documented in the schema; the description mainly reinforces auto-detection and capping for cpus/memoryMb rather than adding new meaning. Baseline 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 states a specific action ('Boot') and resource ('QEMU virtual machine') and adds KVM hardware acceleration, so it is distinguishable from stop/status/connect siblings. It does not explicitly name sibling tools or when to prefer this over emulator start, but the core purpose is clear.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It implies the tool is for starting a QEMU VM, but gives no explicit when-to-use, prerequisites, or alternatives such as adb_emulator_start or adb_qemu_connect. That leaves routing to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

adb_qemu_statusA

Show status of QEMU virtual machines — running VMs with resource usage and port mappings, plus KVM and QEMU availability.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are supplied, so the description carries the full behavioral burden. It does disclose the shape of what gets reported (per-VM resource usage and port mappings, plus KVM and QEMU availability), which implies a non-destructive read. It does not state what happens when KVM/QEMU are absent (empty list vs error), whether elevated permissions or host access are needed, or whether the call is fast or long-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?

A single sentence front-loads the core action and uses an em-dash enumeration to add the payload detail without a second sentence. Every clause carries information an agent would otherwise have to discover by calling the 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?

With no output schema and no annotations, the description usefully describes what the caller will see (VM list, resource usage, port mappings, KVM/QEMU availability), which is the main completeness risk here. Minor gaps remain around error/empty states and permission requirements, but for a zero-argument status probe it covers what an agent needs to select and call it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there is nothing for the description to disambiguate beyond what the schema already conveys. Baseline for a 0-parameter tool applies, with no deficiency to penalize.

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 ('Show status') plus a specific resource ('QEMU virtual machines') and enumerates the payload: running VMs with resource usage and port mappings, plus KVM/QEMU availability. An agent can distinguish it from adb_qemu_start, adb_qemu_stop, adb_qemu_images or adb_qemu_connect because those are lifecycle/artifact tools while this one is purely observational. It does not name any sibling explicitly, which is the only thing keeping it off a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: an agent can infer 'call this to check whether VMs are up and how much they are consuming' from the described contents. There is no explicit statement about when not to use it, no pointer to adb_qemu_start for launching a missing VM, and no note on whether it is worthwhile when QEMU is not installed. Adequate but with a clear routing gap.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

adb_qemu_stopA

Stop a running QEMU virtual machine. Sends SIGTERM for graceful shutdown, with force kill option.

NameRequiredDescriptionDefault
nameNoVM name to stop. If omitted, lists running VMs.
forceNoUse SIGKILL instead of SIGTERM for immediate termination.

TDQS

A3.5/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, and it does disclose the key signal semantics: SIGTERM for graceful shutdown versus SIGKILL when force is used. It does not say whether graceful stop preserves disk/snapshot state, what happens if the named VM is not running, or whether elevated permissions are needed — meaningful gaps for a destructive operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with the action front-loaded and the signal behavior second — no filler. The phrasing is slightly redundant ('SIGTERM for graceful shutdown' plus 'force kill option' when the schema already labels it SIGKILL), but it costs almost nothing.

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 two-optional-parameter tool with no output schema and no annotations, the description is nearly sufficient: an agent knows what it does and the two termination modes. Only the state-preservation and failure modes are unaddressed, which is acceptable at this complexity level.

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, including the side effect that omitting 'name' lists running VMs. The description's mention of SIGTERM and the force-kill option largely restates the schema rather than adding new meaning, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb+resource: 'Stop a running QEMU virtual machine.' An agent can immediately tell this is the teardown counterpart to adb_qemu_start, though the description never names that sibling explicitly, leaving the differentiation to inference from the tool name.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied — 'stop a running QEMU virtual machine' suggests you call it on a VM you previously started. There is no explicit statement of when to prefer this over adb_emulator_stop or adb_qemu_disconnect, nor any precondition such as the VM having been started via adb_qemu_start.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

adb_rebootB

Reboot the device. Supports normal, recovery, and bootloader modes.

NameRequiredDescriptionDefault
modeNoReboot mode: normal (default), recovery, or bootloadernormal
deviceNoDevice serial

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden. Although "Reboot" signals a disruptive state change, it omits temporary device and ADB unavailability, possible disconnection or reconnection requirements, and mode-specific consequences.

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-load the operation and immediately state the supported modes. There is no redundant or unnecessary wording.

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 two-parameter tool, the stated operation and fully documented schema support basic selection and invocation. However, the missing availability, disconnection, and boot-readiness guidance is consequential for a reboot tool with no annotations or 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%, with the mode enum and default and the device serial already documented. The description repeats the supported modes but adds no targeting or invocation semantics beyond the schema, so it meets the baseline without adding further value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb and resource—"Reboot the device"—and the mode list clarifies its scope. It does not explicitly contrast this whole-device operation with siblings such as adb_restart_app, though no sibling appears to duplicate its function.

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?

Listing normal, recovery, and bootloader modes describes capability rather than when to use the tool or how to choose a mode. There are no prerequisites, exclusions, or follow-up recommendations such as waiting for the device to boot or reconnecting.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

adb_registry_installA

Install a plugin from the community registry by name. Downloads the plugin JavaScript file into the plugins directory. Restart DeepADB to load it.

NameRequiredDescriptionDefault
nameYesPlugin name from the registry
forceNoOverwrite if already installed

TDQS

A3.5/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 load and does contribute real behavior: the plugin is downloaded as a JS file into the plugins directory and requires a DeepADB restart to take effect. It omits what happens on name-not-found, whether the download hits the network, permission requirements, and that the 'force' path overwrites an existing install.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the action, then two operational facts. No filler; the restart note earns its place as actionable follow-up.

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 two-parameter install tool with no annotations and no output schema, the description covers what it does, where files land, and the required restart. The remaining gaps (failure modes, install location specifics, auth) are modest for this 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?

Schema coverage is 100%, so both 'name' and 'force' are already documented in the schema. The description only reinforces that the name comes from the registry and says nothing about the overwrite flag, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource plus the source ('Install a plugin from the community registry by name') and clarifies the payload is a JavaScript file, which separates it from the APK-oriented adb_install. It never names a sibling explicitly, so the distinction is inferable rather than stated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Implies usage via 'by name' and the restart instruction, so an agent can infer it should call adb_registry_search first to obtain a valid name. It never says when to use this versus adb_market_install, adb_plugin_list, or adb_registry_installed, and gives no prerequisites or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

adb_registry_installedA

List all locally installed plugins with their versions and metadata. Shows which plugins have updates available in the registry.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are supplied, so the description carries the full burden. It implicitly signals a read-only listing and discloses a meaningful behavioral trait — that results include update-availability computed against the registry — but it never says whether reaching the registry requires network access, whether the device must be connected, or whether metadata is cached or freshly fetched.

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, zero padding, with the core purpose front-loaded and the update-availability detail as a useful follow-on. Nothing here is restated from the name or schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a trivial zero-parameter tool with no output schema, describing the returned contents (versions, metadata, update flags) is exactly the compensation needed. The remaining gap is routing clarity against adb_plugin_list and the other registry siblings, which matters in a toolset of this size.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so baseline is 4. The description adds that the output is scoped to locally installed plugins rather than the whole registry, which is the only semantically relevant constraint for a no-argument tool.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("List all locally installed plugins") and names the payload fields (versions, metadata, update availability). It is nearly distinct from registry-oriented siblings like adb_registry_search, but it never clarifies how it relates to the very similar-sounding adb_plugin_list, leaving a real disambiguation gap.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: an agent can infer this is the tool for checking what's installed locally and whether updates exist. There is no explicit when-to-use, no statement that it requires no registry arguments (unlike adb_registry_search or adb_registry_install), and no exclusion of the confusable adb_plugin_list.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

adb_regression_baselineA

Capture a performance baseline for a package: memory, CPU, frame stats, battery, and network state. Saves to a timestamped JSON file for later comparison with adb_regression_check.

NameRequiredDescriptionDefault
labelNoLabel for this baseline (e.g., 'before-refactor', 'v2.5.0')baseline
deviceNoDevice serial
packageNameYesPackage name to profile

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are supplied, so the description must carry the behavioral disclosure. It does disclose the key side effect (writes to a timestamped JSON file) and the metrics gathered, which is useful, but it omits the output file location, how the capture is triggered or how long it runs, and what the tool returns.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the captured metrics and then the persistence/comparison behavior. Every clause carries information and there is 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?

For a three-parameter tool with no output schema and no annotations, the description covers what is captured and where it goes, which is most of what an agent needs. The missing piece is the output location and confirmation format, which would matter for linking the baseline to a later check.

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 label, device, and packageName all documented in the schema, so the baseline is 3. The description adds no meaning beyond the schema, such as how label affects the filename or whether device is optional or 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 names a specific verb (capture) and resource (performance baseline for a package) and enumerates exactly what is captured: memory, CPU, frame stats, battery, and network state. It also names the companion sibling adb_regression_check, so an agent can place it in the workflow without opening any schema.

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 states the purpose-context clearly by tying the tool to later comparison with adb_regression_check, implying it should run before a change. It does not explicitly state when not to use it, nor does it mention alternatives such as adb_perf_snapshot or adb_snapshot_capture, so the routing is clear but not exhaustive.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

adb_regression_checkB

Compare current performance against a saved baseline. Flags regressions in memory (>20% increase), CPU (>50% increase), and jank rate (>25% increase). Thresholds are configurable.

NameRequiredDescriptionDefault
deviceNoDevice serial
baselinePathYesPath to the saved baseline JSON file
cpuThresholdNoCPU regression threshold in percent (0-1000, default 50%)
jankThresholdNoJank rate regression threshold in percent (0-1000, default 25%)
memoryThresholdNoMemory regression threshold in percent (0-1000, default 20%)

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are supplied, so the description carries the full behavioral burden. It does well on one axis by disclosing the default thresholds and that they are configurable, but it never states whether the tool merely reads a stored measurement or takes a live device measurement as part of the comparison, whether it mutates anything, or what happens when the baseline file is missing or malformed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences with zero filler, and the core action is front-loaded before the metric detail. The threshold sentence partially duplicates the schema defaults but still earns its place by summarizing the default policy in one place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With five parameters, no annotations and no output schema, the description should say something about what a regression check returns — per-metric pass/fail, deltas, or a verdict — and it does not. It is adequate for calling the tool but leaves the interpretation of results to guesswork.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so every parameter including the thresholds already has a description with defaults and bounds, giving a baseline of 3. The description's restatement of the 20%/50%/25% defaults adds framing but no new syntax or constraint information beyond what the schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb and resource: 'Compare current performance against a saved baseline,' and enumerates the three metrics checked (memory, CPU, jank rate). It does not distinguish itself from the closely-named siblings adb_regression_baseline and adb_regression_history, so an agent must infer the split from the names alone.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by 'against a saved baseline' — you run this after a baseline exists — but the description never says when to use it versus adb_regression_baseline (which presumably creates the baseline) or adb_regression_history. No prerequisites, no exclusions, no alternative named.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

adb_regression_historyB

List all saved regression baselines, optionally filtered by package name. Shows trends over time.

NameRequiredDescriptionDefault
packageNameNoFilter by package name

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, so the description carries the full behavioral burden. "List" and "saved" imply a non-mutating read, and "Shows trends over time" hints at derived/computed output, but it never states whether results are bounded, ordered, or what permission/device state is required.

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 tight sentences with no filler; the primary action comes first and the filter qualifier follows. The trailing "Shows trends over time" is the only soft sentence, adding flavor more than actionable 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 simple read-only list tool with one optional parameter and no output schema, the description is adequate but incomplete: it doesn't describe what a returned baseline entry contains (timestamps, metrics, package identity) which matters because no output schema documents the shape.

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 single packageName parameter is fully documented in the schema, so the description only restates optionality, which required=0 already implies. Baseline 3 is appropriate where the schema does all the semantic work.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ("List all saved regression baselines") plus a scope modifier (optionally filtered by package name), which is clearly distinguishable from write-oriented siblings like adb_regression_baseline or adb_regression_check. It stops short of naming those siblings explicitly, so an agent must infer the distinction.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It conveys that filtering by package is optional, implying a browse-all mode versus a targeted mode, but gives no explicit when-to-use guidance such as "use before adb_regression_check to see what baselines exist". With several regression-related siblings in the list, that routing is left implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

adb_resolve_intentsB

Discover all activities, services, and receivers registered by a package with their intent filters

NameRequiredDescriptionDefault
deviceNoDevice serial
packageNameYesPackage name to query

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, so the description carries the full load. 'Discover' signals a non-mutating query and the description states what is enumerated, which is useful behavioral context, but it says nothing about whether the package must be installed, whether root or debuggable builds are required, or what happens on an unknown package.

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?

One tight sentence with the resource front-loaded and no filler. The trailing 'with their intent filters' is slightly ambiguous in attachment but does not cost the reader anything material.

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 low-risk, two-parameter read-only query the description is serviceable: it names the returned component types. However, with no output schema, it does not indicate the shape of the results (component names, filter actions/categories) or whether results are grouped, leaving some uncertainty about what comes back.

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 already documented in the schema. The description's phrase 'by a package' reinforces packageName but adds no format or semantics beyond the schema, and the 'device' parameter is not referenced at all. Baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb ('Discover') and a concrete resource ('activities, services, and receivers registered by a package with their intent filters'). That is precise enough for an agent to distinguish it from adb_package_info or adb_list_packages, though it never names those siblings explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Use is only implied: an agent can infer this is the tool for enumerating a package's manifest components. There is no statement of when to prefer it over adb_package_info, adb_list_packages, or adb_test_gen_from_intents, and no exclusions or prerequisites are given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

adb_restart_appB

Force-stop then re-launch an app. The most frequent debugging workflow in a single call.

NameRequiredDescriptionDefault
deviceNoDevice serial
delayMsNoDelay between stop and start in ms (0-10000, default 500)
packageNameYesPackage name (e.g., 'com.example.app')

TDQS

B3.3/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 discloses the ordering of operations but omits that force-stopping kills the process and loses in-memory state, whether app data is preserved, and what the call returns or does on failure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with zero waste; the core action is front-loaded and the second sentence adds a usage signal rather than filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple three-parameter tool with a fully documented schema and no output schema, the description covers the core action adequately. However, with no annotations and no mention of state loss or failure modes, an agent lacks the behavioral context needed to use it safely.

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%, including the delayMs range and default and the packageName example, so the schema already does the heavy lifting. The description adds no additional meaning about parameters, making the baseline 3 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?

States a specific compound action ("Force-stop then re-launch") on a specific resource (an app), which distinguishes it from adb_force_stop and adb_start_app by making the composition explicit. It only implies the composite nature rather than naming those siblings directly, so it falls short of 5.

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 most frequent debugging workflow in a single call" hints that this is the preferred shortcut over two separate calls, but it never states when to prefer adb_force_stop plus adb_start_app instead, nor any preconditions such as the package being installed or the device being connected.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

adb_result_dropA

Delete a stored result handle, or clear all handles in this session. Either provide both tool and name to drop one specific handle, or pass all: true to drop everything in the current namespace. Useful for freeing up the store cap proactively or removing stale data before a sensitive operation.

NameRequiredDescriptionDefault
allNoIf true, delete every handle in this namespace. tool/name must be omitted when all=true.
nameNoHandle name (required unless all=true)
toolNoSource tool name (required unless all=true)

TDQS

A3.9/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 burden and does disclose the important behavior: this is a destructive delete, its scope is limited to the current session/namespace, and it can free the store cap. It omits error behavior for a nonexistent handle and whether the operation is idempotent or returns a count.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences: purpose first, the two modes second, rationale last — a sensible front-loaded order. The mode sentence duplicates constraints already in the schema, which costs a little density.

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, no-output-schema tool with zero annotations, the definition covers what is deleted, at what scope, and why. Only the return value/pagination-free result of the delete and error cases are unaddressed, which 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 coverage is 100%, so the mutual exclusivity rule (tool/name omitted when all=true) is already documented in the parameter descriptions. The description restates the pairing rather than adding new semantics, so it sits at the baseline for a fully documented schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Uses a specific verb+resource pair ("Delete a stored result handle") plus a clearly stated second mode ("clear all handles in this session"). It is easily distinguished from adb_result_list/adb_result_get by intent, though it never names those siblings to reinforce the boundary.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit invocation conditions: both `tool` and `name` for a single handle, or `all: true` for everything in the namespace. It also motivates use ("freeing up the store cap proactively", "removing stale data before a sensitive operation") but offers no explicit exclusion telling the agent when to read rather than drop.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

adb_result_getA

Retrieve the content of a stored result handle by tool name + handle name. Returns the original content blocks as the source tool produced them. Updates the handle's last-accessed time. For URI-based retrieval, read result://<tool>/<name> as an MCP Resource instead.

NameRequiredDescriptionDefault
nameYesHandle name supplied at storage time (e.g., 'initial')
toolYesSource tool name (the tool that originally stored the handle, e.g., 'bugreport')

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations supplied, the description carries the full load and does disclose real behavior: the payload is returned exactly as the source tool produced it, and the call mutates the handle's last-accessed timestamp — a side effect an agent would not otherwise expect from a read. It omits failure behavior for unknown or expired handles, which is the remaining gap for a zero-annotation 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 tight sentences: what it returns, the side effect, then the alternative access method. Nothing is repeated and the core action 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 two-parameter read with no output schema, the description covers the return shape ('original content blocks') and the URI alternative, which is enough for an agent to call it correctly. Handle lifecycle details (expiry, missing-handle errors) are the only notable omission.

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 both parameters already document their role with examples ('bugreport', 'initial'), so the description only restates the composite key. It adds no new format, case-sensitivity, or scoping detail beyond what the schema provides, which is the expected baseline here.

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 gives a specific verb and resource ('Retrieve the content of a stored result handle') plus the exact lookup key (tool name + handle name), so the operation is unambiguous. It does not explicitly name the closely related siblings adb_result_list and adb_result_drop, so sibling differentiation is only implied by the verb.

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 states the primary use case (fetch a stored handle's payload) and names a concrete alternative path for URI-based access via the MCP Resource result://<tool>/<name>. It stops short of saying when a handle is preferable to re-running the source tool, or what to do when a handle is missing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

adb_result_listA

List all result handles currently stored in this session. Returns metadata for each: tool, name, size, creation/expiry/last-access times. Use the URIs (result://<tool>/<name>) with adb_result_get or by reading them as MCP Resources to retrieve stored content. Handles are scoped per-auth-token and survive server restart within their TTL.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations supplied, the description carries the full burden and does substantial work: it names the metadata fields returned (tool, name, size, creation/expiry/last-access times), the per-auth-token scoping, and the survival-across-restart-within-TTL behavior. It never explicitly states the operation is read-only/non-destructive, and says nothing about ordering or result-set size limits for a list 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?

Four short sentences, each earning its place: what is listed, what is returned, how to consume the URIs, and the scoping/lifetime rules. The core purpose is front-loaded and nothing is repeated.

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, read-only enumeration tool with no output schema, the definition covers purpose, return shape, chaining to adb_result_get, scoping, and TTL persistence — essentially everything an agent needs to call it and use the result 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 tool takes zero parameters, so the baseline is 4 and there is no schema semantics the description needs to compensate for. The description correctly implies the call takes no arguments by framing it as a session-wide enumeration.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'List all result handles currently stored in this session', which unambiguously separates it from adb_result_get (retrieval) and adb_result_drop (deletion) in the sibling set. It only partially differentiates from adb_result_drop, which is never named, so it stops short of a full sibling contrast.

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 explains the downstream flow explicitly: take the returned URIs and feed them to adb_result_get or the MCP Resources mechanism to fetch content. What's missing is any exclusion or precondition guidance (e.g., call this before adb_result_get when you don't know the handle), but the usage context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

adb_reverseA

Reverse-forward a device port to a port on the host (device → host). Use for letting device apps reach services on your machine.

NameRequiredDescriptionDefault
localYesLocal (host) spec, e.g., 'tcp:3000'. AF2 fix: format-validated.
deviceNoDevice serial
remoteYesRemote (device) spec, e.g., 'tcp:3000'. AF2 fix: format-validated.

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are supplied, so the description carries the full behavioral burden. It clarifies the operation's direction — the most confusable aspect versus adb_forward — but says nothing about whether the mapping persists across device reconnects, what happens if the host port is already bound, or whether elevated privileges are required.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with zero filler; the operation and its direction are front-loaded before the use case. Every clause earns its place.

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 3-parameter forwarding tool with full schema coverage and no output schema, the definition covers the essentials. It is nonetheless thin on lifecycle details (persistence, cleanup via adb_reverse_remove) that matter for a stateful port mapping.

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 'local' and 'remote' individually described and regex-constrained, so the baseline is 3. The description adds the mapping of remote→device and local→host at a conceptual level, but offers no concrete syntax examples beyond what the schema already shows.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('reverse-forward a device port to a port on the host') and pins the direction with an explicit 'device → host' arrow. That direction marker is what separates it from the sibling adb_forward, though the sibling is never named.

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?

'Use for letting device apps reach services on your machine' gives a concrete scenario that justifies choosing this over adb_forward. It stops short of explicit when-not guidance (e.g., 'use adb_forward for host→device bridging') or noting the matching adb_reverse_remove cleanup step.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

adb_reverse_removeB

Remove a reverse forward (device → host), or all reverse forwards. Use after testing to clean up.

NameRequiredDescriptionDefault
deviceNoDevice serial
remoteNoRemote spec to remove (e.g., 'tcp:3000'). Omit to remove all reverse forwards. AF2 fix: format-validated.

TDQS

B3.4/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 behavioral burden and does disclose the key destructive mode: omitting the remote spec wipes all reverse forwards. It says nothing about idempotency (what happens when the spec is not present), whether errors are raised, or whether the operation affects other devices.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with the action and scoped immediately by direction. No filler wording; nothing to trim.

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 two-optional-parameter tool with no output schema and no annotations, the description covers what it does and one clean-up scenario. It is adequate but leaves gaps around idempotency and failure behavior that an agent would want before calling it in cleanup flows.

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%, including a format pattern and an example, so the schema already explains both parameters fully. The description's 'or all reverse forwards' restates the omit semantics that the schema already documents, adding little beyond the baseline.

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 gives a specific verb and resource, 'Remove a reverse forward', and clarifies the direction as device → host, which separates it cleanly from adb_forward_remove. It stops short of naming the sibling outright, but the direction semantics do the differentiating work.

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?

'Use after testing to clean up' gives a lightweight usage context, and the description notes the omit-to-remove-all mode. There is no mention of the creating counterpart (adb_reverse), no prerequisites, and no guidance on when to remove a single spec versus everything.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

adb_revoke_permissionA

Revoke a runtime permission from a package. Useful for resetting permission state to test first-run flows or denial handling.

NameRequiredDescriptionDefault
deviceNoDevice serial
permissionYesFull permission string (e.g., 'android.permission.CAMERA')
packageNameYesPackage name (e.g., 'com.example.app')

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are supplied, so the description carries the full burden for a mutating tool. It never says whether root or a debuggable build is required, whether the target app must be stopped, whether the change takes effect immediately, or what happens if the permission was not previously granted.

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 action first and the rationale second, with no filler. Nothing is repeated from the name or schema.

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 three-parameter mutation with no annotations and no output schema, the description covers what and why but omits prerequisites and post-conditions. An agent knows what the call does but not what it needs in order to succeed.

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 three parameters are already documented with examples. The only added meaning is the word 'runtime', which implies only dangerous permissions are valid targets — a small but real refinement over the schema's generic 'Full permission string'.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'Revoke a runtime permission from a package.' An agent can immediately tell this is the inverse of adb_grant_permission, though the description never names that sibling or adb_list_permissions/ adb_permission_audit explicitly.

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?

Supplies a concrete use case ('resetting permission state to test first-run flows or denial handling'), which tells the agent when this is the right call rather than adb_clear_data or a manual settings change. It stops short of naming alternatives or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

adb_ril_pollB

Retrieve captured RIL messages since the last poll. Optionally filter by category (registration, cell_info, signal, network, security, handover, data, radio_state, nas).

NameRequiredDescriptionDefault
rawNoReturn raw logcat lines instead of parsed messages
sessionYesSession ID from adb_ril_start (e.g., 'ril_1')
categoryNoFilter by category: registration, cell_info, signal, network, security, handover, data, radio_state, sms, nas, other
maxMessagesNoMax messages to return per poll (1-10000)

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the whole burden, and it does disclose the most important behavioral trait: polling is incremental and consumes messages past the last poll. It does not say what happens to messages arriving between polls (buffer size, overflow/drop behavior), whether polling is destructive to the capture, or what the returned message shape looks like.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the action and scope, with no filler. The parenthetical category list is the only mildly redundant part since the schema already enumerates them.

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 stateful polling tool with no output schema, the definition should say that messages are drained between polls and hint at the lifecycle (start/stop). It covers the core retrieval semantics but leaves the session prerequisite and result/pagination behavior implicit, which are the details an agent most needs to call it repeatedly without losing data.

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 raw, session, category, and maxMessages; baseline is 3. The description restates the category list but omits 'sms' and 'other' that the schema enumerates, and says nothing about the raw flag or the maxMessages cap, so it adds no meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Retrieve captured RIL messages') plus the incremental scope ('since the last poll'), which is enough to distinguish it from adb_logcat_poll-style reading. It does not name its sibling lifecycle partners (adb_ril_start / adb_ril_stop) in the description, so full differentiation is left to the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: 'since the last poll' signals a repeated, cursor-advancing read, but there is no explicit statement that a session must first be opened via adb_ril_start or that adb_ril_stop ends it. No guidance is given on when to use this versus adb_logcat_poll for the same underlying data.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

adb_ril_startC

Start capturing RIL (Radio Interface Layer) messages from the radio logcat buffer. Captures network registration, cell info, signal strength, authentication, handover, and NAS events. Useful for radio diagnostics and cellular network research.

NameRequiredDescriptionDefault
deviceNoDevice serial
bufferSizeNoMax messages to keep in ring buffer (100-50000, default 5000)
includeKernelNoAlso capture from main and kernel logcat buffers for modem framework and kernel-level radio messages

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden, and it omits the important behavior: that this opens a stateful background capture session, whether the capture survives until adb_ril_stop, what happens if a capture is already running, whether root/privileged access is needed to read the radio buffer, and what the call returns. It only discloses the capture content.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tightly written sentences, front-loaded with the action and resource. The final 'useful for...' sentence is the only one that borders on filler, but it adds legitimate domain context at low cost.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a start-of-session tool that is part of a start/poll/stop triplet, with no annotations and no output schema, the definition leaves out session lifecycle, return value, and prerequisites. The capture-scope enumeration is good, but an agent cannot call this correctly without inferring that it must be followed by adb_ril_poll and adb_ril_stop.

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 all three parameters (device, bufferSize, includeKernel) are thoroughly documented in the schema, so the baseline is 3. The description adds nothing about parameter meaning — buffer size, ring-buffer overflow behavior, and the includeKernel tradeoff are left entirely to the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Start capturing') and a specific resource ('RIL messages from the radio logcat buffer'), plus enumerates the event types captured (registration, cell info, signal strength, NAS). This clearly separates it from generic adb_logcat_start, but it never names the paired siblings adb_ril_poll/adb_ril_stop, so an agent must infer the lifecycle.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The only usage signal is the vague 'useful for radio diagnostics and cellular network research' — no explicit when-to-use, no when-not-to-use (e.g., versus adb_logcat_start or adb_modem_logs), and crucially no instruction that captured messages must be retrieved with adb_ril_poll and the session closed with adb_ril_stop.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

adb_ril_stopB

Stop a RIL capture session. Shows a summary of captured message categories.

NameRequiredDescriptionDefault
sessionYesSession ID to stop (e.g., 'ril_1'), or 'all' to stop all

TDQS

B3.4/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 behavioral burden. It does disclose a post-condition ('Shows a summary of captured message categories'), which is useful, but omits whether captured data is retained or discarded, what happens for an unknown/already-stopped session, and whether stopping is reversible.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with the action front-loaded and the result attached. No filler, though the second sentence could be folded in more tightly.

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 single-parameter lifecycle tool with no annotations and no output schema, the description covers the basic action and a hint of the result but leaves error handling and data-retention semantics unaddressed.

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 'session' parameter including the 'all' sentinel, so the description adds no meaning beyond it. Baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Stop a RIL capture session'), which is inherently distinguishable from adb_ril_start and adb_ril_poll. It does not explicitly name the siblings, so it stops short of full differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied by the verb 'Stop' – an agent can infer it terminates a previously started capture, but the description never says so, nor does it reference adb_ril_start as the prerequisite or adb_ril_poll as the alternative.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

adb_rmA

Delete a file or directory on the device. Recursive deletion uses depth-based protection: refuses at depth ≤ 2 from root (blocks rm -rf /system or /sdcard but allows /sdcard/project/build/). Symlinks are resolved before depth checks to prevent traversal bypasses. Hard-blocks /dev, /proc, /sys. For recursive deletes, reports a pre-flight file count.

NameRequiredDescriptionDefault
pathYesFile or directory path to delete
rootNoUse root shell for protected paths
deviceNoDevice serial
recursiveNoDelete directory recursively (-rf). Depth-protected.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations at all, the description carries the full burden and does so well: it discloses depth thresholds with concrete allowed/blocked examples, symlink resolution before depth checks, hard-blocked system paths (/dev, /proc, /sys), and a pre-flight file count for recursive deletes. What it omits is equally important context for a destructive operation - that deletion is irreversible, what an error response looks like, and whether root is required for protected paths.

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?

Front-loaded with the one-line purpose, then progressive safety detail in short declarative sentences. The parenthetical examples ('blocks rm -rf /system ... allows /sdcard/project/build/') earn their space by making the threshold concrete, and there is no redundant wording.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive, unannotated filesystem tool, the definition covers the safety-critical behavior an agent needs to avoid catastrophic calls, including what is refused and how symlink traversal is handled. It stops short of describing irreversibility, permissions, or return/error shape, which matters for a delete operation with no 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 path, root, device, and recursive are already documented in the schema. The description adds real meaning about how recursive interacts with depth checks, but does not explain the root or device parameters beyond what the schema already says, so the baseline 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?

States a specific verb and resource ('Delete a file or directory on the device') and the depth-protection rules confirm the scope is raw filesystem paths, which keeps it distinct from siblings like adb_uninstall or adb_clear_data that operate on app packages and 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 Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Clearly implies when recursive mode applies and what it will refuse ('refuses at depth <= 2 from root'), giving an agent concrete conditions for use versus failure. It does not explicitly name an alternative tool to pick instead when the target is an app or app data, so routing between siblings is left partly to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

adb_root_shellB

Execute a command as root via su. Requires rooted device.

NameRequiredDescriptionDefault
deviceNoDevice serial
commandYesCommand to run as root

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 carries the full behavioral burden. It discloses that the command runs as root via su and requires a rooted device, but it omits critical behavior for an arbitrary root command: potential su prompt on the device, destructive or irreversible effects, failure behavior when root is unavailable, timeouts, and what is returned.

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 short sentences with no wasted wording, and it front-loads the operation and the prerequisite. Every sentence contributes directly to understanding what the tool does and when it can run.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This is a high-risk arbitrary root execution tool with no annotations and no output schema, so the description should provide more safety and failure context. It covers the root requirement but does not explain su authorization, destructive potential, expected output, or common failure modes, leaving important gaps for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage and already documents both 'device' and 'command'. The description does not add syntax, format, quoting, or device-selection guidance beyond what the schema provides, so the baseline 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 states a specific verb and resource: execute a command as root via su. It clearly distinguishes this tool from adb_shell by specifying root execution through su, and it states the key prerequisite of a rooted device.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives one usage condition, 'Requires rooted device,' which helps an agent decide whether the call is applicable. However, it does not explicitly compare this tool with adb_shell, adb_multi_shell, or other command-execution siblings, nor does it say when not to use root execution.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

adb_runtime_auditB

Run a unified, read-only DeepADB readiness audit covering transport, authorization, Android state, root, SELinux, storage, common binaries, UI/network support, SQLite, chipset/modem nodes, and Wear prerequisites. Makes no device changes.

NameRequiredDescriptionDefault
deviceNoDevice serial to audit

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations supplied, the description carries the full burden, and it does handle the most important trait by declaring the operation read-only and that it 'Makes no device changes.' Beyond that it is silent on runtime cost, whether root/SELinux probes touch privileged paths, partial-failure behavior, and how results are surfaced — all material for a tool that fans out across a dozen subsystems.

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 tight sentences, front-loaded with the verb and scope, and the safety guarantee is placed last as a clean closing clause. The long domain enumeration is dense but each item genuinely bounds scope, so little is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-configuration audit tool with no output schema and no annotations, the description should at least hint at the shape of the result (per-check pass/fail, aggregate verdict) since nothing else communicates it. It is complete on scope and safety but incomplete on what the agent gets back and how to interpret it.

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?

There is a single optional 'device' parameter and schema description coverage is 100%, so the schema already defines it fully. The description adds no device-selection semantics (e.g., default device behavior when omitted, multi-device handling), which is the only place it could have added value here.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Run') and a clearly scoped resource ('unified, read-only DeepADB readiness audit') and enumerates the eleven domains covered, so an agent knows exactly what ground it touches. It does not, however, name or contrast itself with the obviously overlapping siblings (adb_health_check, adb_device_info, adb_firmware_probe, adb_selinux_status), leaving the superset-vs-specialist relationship to inference.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: the 'readiness audit' framing signals a pre-flight/setup check, but there is no explicit when-to-use statement, no condition under which the narrower sibling tools should be preferred, and no prerequisites (device connection, root availability) given. The agent must infer placement in a workflow.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

adb_screenA

Control screen state: wake, sleep, toggle, lock, or unlock. Lock and unlock verify actual keyguard state via dumpsys window. Unlock uses wm dismiss-keyguard (works for swipe keyguards); supply 'pin' to perform the full PIN entry sequence for PIN-protected devices: wakes screen, dismisses keyguard, swipes up to reveal keypad, types PIN, confirms with ENTER, and verifies the keyguard sleep token was released.

NameRequiredDescriptionDefault
pinNoPIN/password to enter when unlock encounters an active keyguard (digits only for PIN, alphanumeric for password). Only used with action='unlock'.
actionYesScreen action — one of: wake (power on + dismiss keyguard if no PIN), sleep (power off), toggle (flip current state), lock (force keyguard), unlock (dismiss keyguard, with PIN if supplied)
deviceNoDevice serial

TDQS

A3.7/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 burden and does a good job: it discloses the underlying mechanism (dumpsys window keyguard verification, wm dismiss-keyguard), spells out the multi-step PIN sequence, and states the final verification of the keyguard sleep token being released. Missing pieces are failure behavior (wrong PIN, timeout), latencies, and any device/authorization prerequisites.

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 action list is front-loaded in the first sentence and the detailed mechanics follow, which is the right ordering. The PIN-sequence run-on sentence is dense but each clause describes a distinct step, so little is wasted.

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 mutation tool with no output schema and no annotations, the description covers the per-action semantics, the verification mechanism, and the escalation path via pin. What remains thin is what happens on failed unlock or invalid PIN and whether the tool reports the resulting keyguard state.

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 all three parameters already carry their own descriptions, setting the baseline at 3. The description restates the pin-only-with-unlock constraint that the schema already states, though it does add value by explaining what supplying a pin actually triggers step by step.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb+resource ('Control screen state') and enumerates every supported action (wake, sleep, toggle, lock, unlock), so an agent knows exactly what the tool does. However, it never distinguishes itself from the sibling tool adb_screen_state, which by name appears to overlap heavily, leaving ambiguity about which to pick.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives useful conditional guidance for one parameter path ('supply pin to perform the full PIN entry sequence for PIN-protected devices') and notes unlock via wm dismiss-keyguard only works for swipe keyguards, which implicitly tells the agent when unlock alone is insufficient. But there is no explicit when-to-use vs adb_screen_state, adb_input_text for entering a PIN, or any statement of 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.

adb_screencapB

Take a screenshot and save to local filesystem. Returns the file path.

NameRequiredDescriptionDefault
deviceNoDevice serial
filenameNoOutput filename (default: screenshot_<timestamp>.png)

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must carry behavioral disclosure. It does say the capture is written to the local filesystem and returns a file path, which tells the agent the side effect is a local write rather than a device write. It omits the device-selection behavior when no serial is supplied, whether existing files are overwritten, and any permission or size caveats.

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, both of which earn their place: the first states the action and destination, the second states the return value. The key fact, saving to the local filesystem, is front-loaded with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the core action, side effect, and return value for a two-parameter tool with no output schema. It leaves a gap on routing among the numerous screenshot siblings and on default-device behavior, which matters for an agent picking a capture 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 both parameters (device serial, filename with its timestamp default) are already documented. The description adds nothing beyond the schema, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb and resource: take a screenshot and save it to the local filesystem, with the return value stated. It is clear what the tool does, but it offers no differentiation from the many sibling screenshot tools (adb_screencap_annotated, adb_screenshot_compressed, adb_screen, adb_screenshot_baseline, adb_snapshot_capture).

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?

There is no guidance on when to choose this tool over the crowded set of screenshot siblings. The agent gets no condition or exclusion, such as when to use adb_screencap_annotated for UI-element overlays or adb_screenshot_compressed for size-constrained captures.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

adb_screencap_annotatedA

Take a screenshot with UI element bounding boxes and numbered labels composited directly onto the image. Returns the annotated PNG path plus a text legend mapping each element number to its identity. Ideal for LLM workflows that need to reference specific UI elements by number rather than by coordinates.

NameRequiredDescriptionDefault
deviceNoDevice serial
filenameNoOutput filename (default: annotated_<timestamp>.png)
clickableOnlyNoOnly annotate clickable/scrollable elements (default true — reduces visual noise)

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are supplied, so the description carries the full behavioral burden. It does disclose the two-part return value (annotated PNG path plus a numbered legend) and the compositing behavior, but says nothing about side effects such as where the file is written, whether a connected device is required, or what happens on capture failure.

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 tight sentences, front-loaded with the action and then the return value, then the intended use case. No filler, no repetition of the tool name, and each sentence adds information an agent needs.

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?

With no output schema, the description correctly explains the return payload (PNG path + legend), and the three parameters are fully covered by the schema. It is nearly complete for this complexity, missing only operational details like device-state prerequisites and output file location.

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 every parameter (device, filename, clickableOnly) is documented in the schema, so baseline 3 applies. The description adds no extra meaning about parameter effects — for example, it does not explain how clickableOnly=false changes the legend or the visual density of the output.

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+resource ("Take a screenshot") and immediately names the distinguishing feature — UI element bounding boxes with numbered labels composited onto the image. That feature set makes it unmistakably different from adb_screencap, adb_screen, and adb_ui_dump without needing to name them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear usage context ("Ideal for LLM workflows that need to reference specific UI elements by number rather than by coordinates"), which tells an agent when this beats a coordinate-based or plain-screenshot approach. It stops short of explicitly naming alternatives or exclusions such as using adb_screencap for a raw image or adb_ui_find for locating a single element.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

adb_screenrecord_startA

Start recording the device screen. Recording runs on-device. Use adb_screenrecord_stop to finish and pull the video file.

NameRequiredDescriptionDefault
deviceNoDevice serial
maxDurationNoMaximum recording duration in seconds (1-180, default 60)

TDQS

A3.6/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. "Recording runs on-device" is useful behavioral context implying the file lives on the device until stop pulls it, but it omits permission requirements, whether a second start fails or errors while a recording is active, and what start returns (a handle, path, or nothing).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the action, then the architectural fact, then the required follow-up. Nothing is redundant and no sentence could be dropped without losing 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 start/stop pair with no output schema and fully documented parameters, the description covers the essential lifecycle and the on-device storage detail. The remaining gap is what start itself returns, which matters for an agent that must correlate the start handle with the later stop call.

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 device and maxDuration are already documented in the schema, including the 1-180 range and default 60. The description adds no meaning beyond that baseline, which is acceptable at full coverage but earns nothing extra.

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?

"Start recording the device screen" gives a specific verb and resource, and the mention of adb_screenrecord_stop as the terminator clarifies this is the first half of a capture workflow. It is distinguishable from adb_screencap (single frame) by the word "recording," though it never names that sibling explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It clearly states the required follow-up call (adb_screenrecord_stop) to finish and pull the file, which is genuine sequencing guidance. However, it gives no guidance on when to record versus taking a screenshot or starting a mirror session, and no prerequisites such as a connected device or concurrent-recording limits.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

adb_screenrecord_stopA

Stop an active screen recording and pull the video file locally. If the recording has already finished (hit time limit), this just pulls the file.

NameRequiredDescriptionDefault
deviceNoDevice serial

TDQS

A3.7/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 does disclose the key behavioral trait that the tool both terminates a process and writes a file to the local machine, and that the finished-recording case is handled gracefully rather than erroring. It omits where the file lands, the return value, and error behavior when no recording exists.

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 primary action and followed by the exception case. Every clause carries information; nothing is redundant with the tool name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description is the only place an agent could learn what it gets back (a local file path, a file reference, or nothing). That return-value gap matters because the practical purpose is to obtain the video file. Otherwise it is complete for a one-parameter 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%, so the single 'device' parameter is already documented as 'Device serial'. The description adds nothing about device selection or what happens when it is omitted (it is not a required parameter). Baseline 3 applies since the schema does the work.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Stop an active screen recording') plus a second action ('pull the video file locally'), which clearly separates it from adb_screenrecord_start and from generic file tools like adb_pull. Siblings are not named explicitly, but the recording-specific framing makes the scope 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?

Explicitly covers both states an agent may encounter: an active recording (stop it) and a recording that already ended via time limit (just pull). It gives a clear condition for calling the tool but does not state what happens if no recording was ever started, which is the main usage ambiguity.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

adb_screenshot_baselineA

Capture a named screenshot baseline for later comparison. Saves the screenshot and metadata to the baselines directory.

NameRequiredDescriptionDefault
nameYesBaseline name (e.g., 'home_screen', 'login_page', 'threat_alert')
deviceNoDevice serial
result_handleNoOptional. If provided, store this tool's result under `result://<tool>/<name>` for retrieval after compaction. Name must be 1-32 chars, [a-zA-Z0-9_-]. Existing handles with the same tool+name are overwritten. Use adb_result_list to see active handles, adb_result_get or the MCP Resource URI to retrieve.
result_handle_ttlNoOptional. TTL in seconds for the result handle (60 to 604800). Default 43200 (12 hours). Ignored if result_handle is not provided.

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are supplied, so the description carries the full burden. It usefully discloses that both the screenshot and metadata are persisted to a specific directory, but is silent on the critical write-side behaviors: whether re-capturing with the same name overwrites, which device is used when 'device' is omitted, and whether any permission or storage precondition applies.

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 with the action and the persistence target front-loaded, and no filler. Nothing could be removed without losing 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 four-parameter write tool with no annotations and no output schema, the definition covers purpose and storage location but leaves the return value (path? handle? metadata keys?) and baseline-overwrite semantics unstated. Adequate as a minimum, but the agent must guess at what it gets back and what happens on name collision.

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 name, device, result_handle, and result_handle_ttl are already documented in the schema, including the overwrite semantics for handles. The description only gestures at the 'name' parameter via the word 'named' and adds no meaning about device selection or the handle mechanics beyond what the schema provides; baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Capture a named screenshot baseline') plus where the artifact lands ('baselines directory'). It does not distinguish itself from close siblings such as adb_screenshot_diff, adb_screenshot_history, or adb_regression_baseline, so an agent must infer the division of labor.

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?

'for later comparison' implies the workflow (create here, compare elsewhere) but no explicit when-to-use or when-not-to-use statement is given. With several near-identical screenshot/baseline siblings in the list, an explicit routing sentence would materially help.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

adb_screenshot_compressedA

Take a screenshot and pull the full-resolution PNG, plus metadata for client-side compression. Returns local file path, dimensions, file size, and a ready-to-run imagemagick command for converting to a smaller JPEG. (Android doesn't ship imagemagick, so the actual compression is post-processing — this tool sets up everything you need.)

NameRequiredDescriptionDefault
scaleNoScale factor (0.1-1.0, default 0.5). 0.5 = half resolution
deviceNoDevice serial
qualityNoJPEG quality (10-100, default 50). Lower = smaller file, more artifacts
filenameNoOutput filename (default: screenshot_compressed_<timestamp>.jpg)

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description usefully discloses that the tool pulls a full-resolution PNG, writes a local file, returns path and file metadata, and does not itself perform the JPEG compression. It also identifies the ImageMagick dependency and explains why the command must run off the Android device, though it does not cover storage-location or overwrite 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 compact and front-loads the capture behavior, then efficiently lists the returned information and clarifies the post-processing requirement. Each sentence contributes useful operational detail without repetition.

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 four-parameter tool with no annotations or output schema, the description supplies the key workflow, outputs, and external compression dependency needed to avoid expecting an already-compressed result. Its main remaining gaps are sibling selection guidance and the relationship between the schema's compression-oriented parameters and the full-resolution PNG output.

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 even though the description adds no parameter-specific details. It does not clarify how scale, quality, and the JPG-oriented filename relate to the returned full-resolution PNG versus the suggested post-processing command.

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 and resource: take a screenshot, pull the full-resolution PNG, and prepare metadata for client-side compression. The compression-setup workflow gives it some distinction from other screenshot siblings, but it does not explicitly differentiate itself from adb_screencap or adb_screenshot_baseline.

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 references to client-side compression and producing a smaller JPEG imply the intended use case, while clarifying that compression itself is post-processing. However, there is no explicit guidance on when to choose this tool over another screenshot tool or when a plain screenshot would suffice.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

adb_screenshot_diffA

Compare the current screen against a saved screenshot baseline. Decodes PNGs and performs pixel-level comparison (RGB channels), reporting exact pixel difference count, percentage, and the bounding box of the changed region. Supports a tolerance threshold for absorbing minor dynamic elements like clocks or notification badges.

NameRequiredDescriptionDefault
deviceNoDevice serial
baselineYesBaseline name to compare against (from adb_screenshot_baseline)
result_handleNoOptional. If provided, store this tool's result under `result://<tool>/<name>` for retrieval after compaction. Name must be 1-32 chars, [a-zA-Z0-9_-]. Existing handles with the same tool+name are overwritten. Use adb_result_list to see active handles, adb_result_get or the MCP Resource URI to retrieve.
tolerancePercentNoPixel difference percentage threshold below which the result reports IDENTICAL. 0 = exact match required. 1-2 absorbs clock/status bar changes.
result_handle_ttlNoOptional. TTL in seconds for the result handle (60 to 604800). Default 43200 (12 hours). Ignored if result_handle is not provided.

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 full burden and does well: it discloses the comparison method (PNG decode, RGB-channel pixel diff), the exact outputs produced (differing pixel count, percentage, changed-region bounding box), and the tolerance behavior. It stops short of stating what happens when the baseline name does not exist, or explicitly that the screen is captured live at call time rather than read from a cached image.

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, front-loaded with the action and its target, then mechanism, then the tolerance caveat. No filler and no sentence that could be removed without losing 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 read-only, five-parameter tool with no output schema and no annotations, the definition covers the return values in prose (count, percentage, bounding box) and the tolerance knob, which is the important surface. Remaining gap is failure-mode behavior when the named baseline is absent, plus confirming the call performs a fresh capture.

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 device, baseline, tolerancePercent, and the result_handle/ttl mechanism, which sets the baseline at 3. The description reinforces tolerance semantics ("absorbing minor dynamic elements like clocks or notification badges") but adds no numeric guidance or usage rules beyond what the schema's own descriptions already say.

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?

"Compare the current screen against a saved screenshot baseline" gives a precise verb and object, and the follow-on sentences narrow it to PNG decoding plus pixel-level RGB comparison. The baseline parameter ties it explicitly to the adb_screenshot_baseline sibling, so an agent can tell capture, save-baseline, and compare apart without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied rather than stated: an agent infers this is the verification step after adb_screenshot_baseline, and the tolerance sentence hints at when noisy UI elements should be tolerated. But no sibling is named as the alternative, and near-neighbours like adb_snapshot_compare, adb_regression_check, and adb_thermal_compare are never mentioned to route the agent away.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

adb_screenshot_historyB

List all saved screenshot baselines with their metadata (timestamp, dimensions, device, file size).

NameRequiredDescriptionDefault
result_handleNoOptional. If provided, store this tool's result under `result://<tool>/<name>` for retrieval after compaction. Name must be 1-32 chars, [a-zA-Z0-9_-]. Existing handles with the same tool+name are overwritten. Use adb_result_list to see active handles, adb_result_get or the MCP Resource URI to retrieve.
result_handle_ttlNoOptional. TTL in seconds for the result handle (60 to 604800). Default 43200 (12 hours). Ignored if result_handle is not provided.

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are supplied, so the description carries the full behavioral burden. It does disclose the shape of what comes back (metadata fields) and the word "List" implies a non-destructive read, but it says nothing about ordering, empty-state behavior, or whether results are scoped to the current 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?

A single well-formed sentence with the core action front-loaded and the useful metadata detail trailing. No filler and nothing that could be cut without losing 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 simple no-argument listing tool with no annotations and no output schema, the description covers the essentials: what is listed and what metadata each entry carries. Minor gaps remain (ordering, empty case, device scoping) but nothing that would block a correct call.

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 both parameters are generic result-handle plumbing fully documented in the schema. The description adds no parameter meaning of its own, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb and resource ("List all saved screenshot baselines") and even enumerates the metadata returned (timestamp, dimensions, device, file size), so an agent can distinguish it from siblings like adb_screenshot_baseline or adb_screenshot_diff. It does not explicitly name those siblings, which keeps it short of a 5.

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?

There is no when-to-use guidance, no prerequisites, and no mention of alternatives such as adb_screenshot_baseline (which presumably creates baselines) or adb_screenshot_diff. The read-only listing intent is inferable from "List all", but nothing steers the agent between this and related baseline tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

adb_screen_sizeA

Get the screen resolution and display density. Returns physical width, height (in pixels), and DPI density. Useful for calculating tap/swipe coordinates and understanding the UI layout grid.

NameRequiredDescriptionDefault
deviceNoDevice serial

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations supplied, the description carries the full burden; 'Get' implies a non-mutating read, and it discloses the return payload (width, height in pixels, DPI density), which is genuine behavioral content. However, it says nothing about multi-device resolution, what happens when the optional device is omitted, or failure modes if no device is attached.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the operation and then the return shape. There is mild redundancy between 'screen resolution and display density' and 'width, height ... and DPI density', but nothing extraneous enough to cut a point further.

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 single-optional-parameter read tool with no output schema, the description covers both what it reads and what it returns, which is enough to call it correctly. The only material gap is device selection behavior in a multi-device setup.

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?

There is a single parameter with 100% schema description coverage ('Device serial'), so the schema already does the work. The description adds no meaning beyond it, such as how an omitted serial is resolved; the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (get screen resolution and display density) and enumerates the returned fields, so an agent knows exactly what it produces. It never names a sibling such as adb_device_info or adb_screen, so an agent cannot rule out overlap from the description alone.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Useful for calculating tap/swipe coordinates and understanding the UI layout grid' gives a downstream use case, which implies when to reach for it. There is no when-not guidance and no named alternative, so the routing decision against adb_device_info or adb_screen is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

adb_screen_stateA

Get a combined screen state snapshot in one call: foreground activity, screen dimensions and density, orientation, battery level, and a TSV list of interactive UI elements. Replaces 3-4 separate tool calls with a single round-trip. Ideal as a first step in any automation workflow.

NameRequiredDescriptionDefault
deviceNoDevice serial
clickableOnlyNoOnly include clickable/scrollable elements in TSV output (default true)

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It discloses the returned contents and a performance trait (one round-trip instead of 3-4), but never states that it is a read-only/non-mutating operation, whether the UI dump has side effects or latency cost, or whether it requires the device to be booted and authorized.

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, front-loaded with the payload, then the efficiency rationale, then the workflow placement. Nothing is redundant and each sentence adds a distinct decision-relevant fact.

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?

There is no output schema, so the description must describe return values and it does so by enumerating every component of the snapshot. The remaining gap is behavioral rather than structural: safety, prerequisites, and latency for an unannotated tool are left implicit.

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 both parameters (device, clickableOnly) are already documented in structured form; baseline 3 applies. The description hints at the clickableOnly effect by describing the output as a list of 'interactive UI elements', but adds no format or behavior detail 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?

Specific verb ('Get') plus an enumerated payload: foreground activity, dimensions/density, orientation, battery level, and a TSV element list. This clearly distinguishes it from the granular siblings it aggregates (adb_current_activity, adb_screen_size, adb_ui_dump, adb_battery) without requiring the schema to be opened.

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?

'Replaces 3-4 separate tool calls with a single round-trip' and 'Ideal as a first step in any automation workflow' give a clear selection context versus the single-purpose siblings. However, it never names those siblings explicitly nor states when NOT to use it (e.g. when only one datum is needed, or when a full UI dump is required).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

adb_scroll_untilB

Scroll the screen repeatedly until a target element is found. Performs a swipe gesture, then checks the UI hierarchy for the target. Repeats until found or max iterations reached. Useful for finding elements in long lists or scrollable content.

NameRequiredDescriptionDefault
textNoMatch elements containing this text (case-insensitive)
deviceNoDevice serial
directionNoScroll direction (default 'down' = content moves up, revealing lower items)down
maxScrollsNoMaximum scroll attempts (1-50, default 10)
resourceIdNoMatch elements with this resource-id (partial match)
contentDescNoMatch elements with this content-description (partial, case-insensitive)
tapWhenFoundNoAutomatically tap the element when found

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are supplied, so the description carries the full burden. It does useful work by disclosing the swipe-then-inspect loop and that it terminates on found or max iterations, plus that tapWhenFound triggers a tap. However, it never says what happens on failure (exception, null, false), whether scrolling stops at content boundaries, or that at least one matcher parameter must be supplied — meaningful gaps for a loop-driven automation 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?

Four short sentences, front-loaded with the core action and immediately followed by the mechanical explanation and the use case. No filler, though the third sentence largely restates the first and could be merged.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no annotations and no output schema, the description must cover behavior and results alone. It explains the iteration model but not the return value (element details? coordinates? boolean?) or the failure mode, and it omits the critical constraint that zero required parameters means the caller must still provide a matcher — a real gap for a 7-parameter 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 all seven parameters including the direction enum semantics and maxScrolls bounds. The description adds no matching-combination semantics (e.g., whether text and resourceId are ANDed or ORed, or that zero matchers is invalid), so it neither compensates for nor extends the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Scroll the screen repeatedly until a target element is found') and describes the loop mechanics (swipe, dump hierarchy, repeat). It doesn't distinguish itself from close siblings like adb_ui_find, adb_wait_element, or adb_tap_element, so an agent must infer the boundary from the scroll-until-found behavior alone.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The final sentence gives a usage context ('long lists or scrollable content'), which is a genuine but implicit when-to-use signal. There is no explicit guidance on when to prefer adb_wait_element (time-based waiting) or adb_ui_find (single-shot lookup), and no exclusions or prerequisites are stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

adb_selinux_denialsB

List recent SELinux AVC denial messages from logcat and kernel logs. Shows which processes were blocked, what they tried to do, and the SELinux contexts involved. Useful for diagnosing permission issues and understanding security policy enforcement.

NameRequiredDescriptionDefault
linesNoMax denial entries to return (1-1000, default 50)
deviceNoDevice serial
processNoFilter denials by process/source context name

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are supplied, so the description carries the full burden. It discloses the log sources and the shape of what is returned (blocked process, attempted action, contexts), which is real added value, but it says nothing about whether root is required to read kernel logs, whether results are truncated, or how far back 'recent' reaches.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the action and source. The closing 'useful for' sentence is the only soft padding, and even it carries diagnostic context.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description usefully summarizes the fields an agent will see, and all three parameters are documented in the schema. The missing piece is the operational prerequisite — whether elevated privileges are needed to read kernel-side denials.

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 lines (range/default) and process filtering already documented. The description adds no extra semantics about how the process filter matches context names or how lines interacts with device selection.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('List recent SELinux AVC denial messages') and names the two data sources (logcat and kernel logs). It does not distinguish itself from the close sibling adb_selinux_status, which an agent would plausibly confuse it with.

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?

'Useful for diagnosing permission issues and understanding security policy enforcement' implies when to reach for it, but there are no explicit exclusions and no pointer to alternatives such as adb_selinux_status (policy mode) or adb_permission_audit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

adb_selinux_statusA

Check SELinux enforcement mode, policy version, and recent denial count. Shows whether the device is in Enforcing, Permissive, or Disabled mode. Root access provides additional policy details from dmesg audit logs.

NameRequiredDescriptionDefault
deviceNoDevice serial

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are supplied, so the description carries the full behavioral burden. It usefully discloses that root access unlocks extra policy details from dmesg audit logs, which is real privilege-dependent context, but it does not state side effects, read-only nature, or what happens when the device is non-root (degraded output).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the concrete outputs, then the mode enumeration, then the root-access caveat. No filler, though the middle sentence slightly restates the first.

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 single-parameter read-only diagnostic with no output schema, the description covers what is measured (mode, policy version, denial count) and the root-dependent variance. The main omission is any differentiation from adb_selinux_denials, which an agent would need to choose 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% and there is a single optional 'device' serial parameter already documented in the schema, so the description need not repeat it. It adds no meaning beyond that baseline, which is acceptable here.

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 ('Check') and names the exact resources it reports: SELinux enforcement mode, policy version, and recent denial count. An agent knows precisely what data comes back, but it does not distinguish this tool from the sibling adb_selinux_denials, which likely overlaps on the denial-count portion.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied by the diagnostic nature of the tool; there is no explicit statement of when to call it versus adb_selinux_denials or adb_getprop, and no prerequisites beyond the root-access note. An agent can infer it is a read-only diagnostic, but must guess at sibling routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

adb_sensor_readA

Read current hardware sensor values from the device. Enumerates all available sensors from sensorservice and returns their last-known readings with timestamps. Sensor availability is device-dependent — the tool reports what's present. No root required.

NameRequiredDescriptionDefault
deviceNoDevice serial
categoryNoFilter by sensor category: all, accelerometer, gyroscope, magnetometer, light, barometer, proximity, gravity, linear_accel, rotation, orientation, motion, step, temperatureall
listOnlyNoIf true, list available sensors without reading values (faster, useful for discovery)

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations supplied, the description carries the full burden and does a fair job: it discloses the data source (sensorservice), the return shape (last-known readings with timestamps), that availability is device-dependent, and that no root is required. It omits permission implications for privileged sensors and whether readings can be stale or blocked.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four short sentences, front-loaded with the action and mechanism, then return shape, then the device-dependence caveat and the root note. Every sentence carries information; only minor tightening would be possible.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema and no annotations, so the description must cover return semantics — it does, stating that readings come with timestamps and that absent sensors simply aren't reported. Reasonably complete for a 3-parameter read-only tool, with only staleness/permission caveats 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 device, category enum, and listOnly flag are all already documented, including the performance tradeoff for listOnly. The description adds no extra meaning about filtering behavior or what 'all' entails, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Read current hardware sensor values') plus the underlying mechanism ('Enumerates all available sensors from sensorservice'). This clearly distinguishes it from general-purpose siblings like adb_shell or adb_dumpsys, though it never explicitly contrasts with the closely related adb_iio_read or adb_thermal_snapshot.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the phrasing — read sensor values, or use the discovery mode when you only need the sensor list. There is no explicit when-to-use/when-not guidance and no named alternative for overlapping needs such as adb_iio_read or adb_orientation, leaving the agent to infer routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

adb_settings_getB

Read an Android settings value from any namespace (system, secure, global)

NameRequiredDescriptionDefault
keyYesSetting key (e.g., 'screen_brightness', 'location_mode', 'airplane_mode_on')
deviceNoDevice serial
namespaceYesSettings namespace

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full behavioral burden. It correctly signals a read operation and namespace scope, but it does not disclose permission/root requirements, failure behavior for unknown keys, or whether the value is returned raw; those are important for an ADB settings read 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 one front-loaded sentence with no filler. Every element, the read action, the settings resource, and the namespace list, contributes directly to selecting and invoking the tool.

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 read-only settings getter, the description is minimally adequate: it identifies the resource and namespace scope. However, with no annotations and no output schema, it leaves permission requirements and return-value shape unstated, so the definition is not fully self-contained.

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 the key, device, and namespace parameters, including examples for key and an enum for namespace. The description repeats the namespace scope but adds no parameter-level meaning beyond the schema, which fits the baseline of 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 gives a specific verb and resource ("Read an Android settings value") and explicitly covers all three namespaces, which clearly distinguishes it from the write-oriented sibling adb_settings_put. It is not quite a 5 because it does not explicitly mention sibling alternatives such as adb_getprop or adb_shell.

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 implies usage by stating it reads settings values, but it gives no explicit when-to-use guidance, no exclusions, and no comparison to alternatives like adb_getprop or adb_shell. An agent must infer that this is for settings namespaces rather than system properties or arbitrary shell commands.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

adb_settings_putC

Write an Android settings value to any namespace (system, secure, global)

NameRequiredDescriptionDefault
keyYesSetting key (e.g., 'screen_brightness' for system namespace, 'wifi_on' or 'airplane_mode_on' for global, 'location_providers_allowed' for secure). Use `adb_shell` with `settings list <namespace>` to enumerate available keys for a device.
valueYesValue to write. Type depends on the key — typically a string, integer, or 0/1 for booleans. The setting framework accepts everything as a string and parses on read.
deviceNoDevice serial
namespaceYesSettings namespace

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are supplied, so the description carries the full behavioral burden, and it only implies mutation via 'Write'. It does not disclose that secure/global namespaces typically require elevated privileges (e.g. WRITE_SECURE_SETTINGS or root), whether the change takes effect immediately or needs a reboot/broadcast, or any warning that mis-set keys can destabilize 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler and the scope stated up front. It is efficient, though its brevity leaves behavioral gaps that a second sentence could have filled.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a three-required-parameter mutation tool with no annotations and no output schema, the description should explain privileges needed, effect timing, and failure behavior. None of that is present, so an agent knows what to write but not what constraints or side effects to expect.

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 key examples and value type guidance already documented per-parameter, so the schema does the heavy lifting. The description only restates the namespace enum values, adding no semantics beyond structured data, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Write') and resource ('Android settings value') plus the scope ('any namespace (system, secure, global)'), which distinguishes it from adb_settings_get and from adb_shell. It does not name the sibling it is the counterpart of, but the read/write split is inferable from the verb.

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 offers no when-to-use, when-not-to-use, or alternative guidance. The one useful pointer about enumerating keys with adb_shell lives in the input schema, not the description, and there is no mention of when to prefer adb_shell settings put over this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

adb_shannon_sessionA

Preflight a Samsung Shannon/Exynos modem session by checking the chipset, root access, known AT ports, and a benign AT handshake together. Optionally sends ATI for identification after a successful handshake. Makes no modem configuration changes.

NameRequiredDescriptionDefault
portNoOptional Shannon device node override (for example /dev/umts_router)
deviceNoDevice serial
timeoutNoHandshake timeout per port in milliseconds (1000-10000, default 3000)
includeIdentityNoAfter a successful AT handshake, also send the read-only ATI identity query

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations supplied, the description carries the full burden and does reasonably well: it discloses that the handshake is 'benign', that ATI is only sent optionally and only after success, and that no configuration changes are made. It omits what happens on a failed handshake, whether root is required for the port scan, and whether partial results are returned when only some checks pass.

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 tightly written sentences, front-loaded with the purpose, then the optional behavior, then the safety guarantee. Every clause earns its place and there is no redundant restatement 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 preflight/diagnostic tool with four optional parameters, no annotations, and no output schema, the description covers what is checked and what is deliberately not changed. The main gap is the absence of any statement about the shape of the result (per-check pass/fail, discovered port list) or failure semantics, which an agent would need to interpret the outcome.

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 all four parameters are already documented in structured form and the baseline of 3 applies. The description restates the includeIdentity/ATI behavior ('Optionally sends ATI for identification after a successful handshake') and hints at the port override via 'known AT ports', but adds no new constraints or format details beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb ('Preflight') and a specific resource ('Samsung Shannon/Exynos modem session'), then enumerates exactly what gets checked: chipset, root, known AT ports, and an AT handshake. That is far more precise than the generic sibling tools (adb_at_probe, adb_at_detect, adb_firmware_probe), though it never explicitly names those siblings to draw the boundary.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The word 'Preflight' implies this runs before other modem work, and 'Makes no modem configuration changes' implies a safe diagnostic role. However, the description never states when an agent should pick this over adb_at_probe, adb_at_detect, or adb_firmware_probe, nor what conditions make it inappropriate (e.g., non-Samsung hardware).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

adb_shellC

Execute a shell command on the Android device. Returns stdout and stderr.

NameRequiredDescriptionDefault
deviceNoDevice serial
commandYesShell command to execute on the device
timeoutNoTimeout in milliseconds (1s-10min)

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are supplied, so the description carries the full disclosure burden for a tool that runs arbitrary commands on a device. It only notes that stdout and stderr are returned; it says nothing about the destructive potential of arbitrary shell commands, default device selection when 'device' is omitted, timeout behavior on expiry, or whether output is truncated.

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, action first, return value second, with no filler. Given the small amount of content, nothing is redundant and the key information is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This is a high-blast-radius, arbitrary-execution tool with no annotations and no output schema, yet the description is only two sentences. It omits safety posture, device targeting, timeout semantics, and result handling, all of which an agent needs before invoking it against a real device.

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 all three parameters documented including the millisecond range for timeout, so the schema does the parameter work. The description adds no meaning beyond the schema, such as what happens when 'device' is omitted or how timeout expiry is surfaced. Baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (execute) and resource (a shell command on the Android device), plus the return payload (stdout and stderr). It does not distinguish itself from closely related siblings such as adb_root_shell, adb_multi_shell, or adb_qemu_guest_shell, so an agent cannot tell from the description alone which shell tool applies.

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?

There is no when-to-use or when-not-to-use guidance, no mention of prerequisites such as root or device selection, and no pointer to the more specialized siblings that cover shell-like work. The agent must infer everything about applicability from the name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

adb_signal_detailB

Get detailed signal strength measurements: RSRP, RSRQ, SINR, RSSI, timing advance, and signal bars. Provides raw radio measurements for signal analysis and anomaly detection.

NameRequiredDescriptionDefault
deviceNoDevice serial

TDQS

B3.2/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 behavioral burden and it under-delivers. It implies a read-only measurement fetch, but says nothing about prerequisites (root, modem availability), what happens on Wi-Fi-only devices or emulators with no radio, error/failure behavior, or whether measurements are instantaneous samples versus averaged. Only the set of returned metrics is disclosed.

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, front-loaded with the concrete metric list, with no filler or repetition. The second sentence is somewhat generic ('Provides raw radio measurements...') but does add a use-case anchor rather than restating the first.

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 one-parameter read tool with no output schema, the description is adequate but leaves real gaps: it lists metric names without units, return structure, or sample semantics, and does not address the common failure case of devices without a cellular modem. An agent could call it correctly but may misinterpret the numbers it receives.

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?

There is a single parameter whose schema description ('Device serial') already achieves 100% coverage, so the schema does the work. The description adds no meaning about the device argument — not whether it can be omitted to target the sole connected device (0 required params) nor how multi-device targeting resolves.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb and resource ('Get detailed signal strength measurements') and enumerates the exact metrics returned (RSRP, RSRQ, SINR, RSSI, timing advance, signal bars), which distinguishes it reasonably well from broad siblings like adb_telephony. It stops short of explicitly differentiating itself from narrower radio siblings such as adb_cell_identity, adb_baseband_info, or adb_neighboring_cells.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied through the phrase 'for signal analysis and anomaly detection' — that hints at context but gives no explicit when-to-use or when-not-to-use guidance. There is no mention of which sibling to prefer for cell identity, baseband, or full telephony dumps, even though many near-neighbors exist in the tool list.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

adb_snapshot_captureB

Capture a comprehensive device state snapshot: installed packages, key settings, and system properties. Saves to a JSON file.

NameRequiredDescriptionDefault
nameNoSnapshot name (default: auto-generated timestamp)
deviceNoDevice serial

TDQS

B3.3/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 usefully discloses that the result is persisted to a JSON file and what categories of state are collected. However, it omits the file path/location, whether device-side privileges are required, whether the operation is purely read-only, and how failures are surfaced – all material for a snapshot tool whose output is consumed by sibling compare/restore tools.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the verb and content before the persistence detail; no filler or redundancy. 'Comprehensive' is slightly promotional but does not undermine clarity.

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 zero-required-parameter tool, the core purpose and persistence behavior are covered. But with no output schema and no annotations, the description should state where the JSON is written or what the tool returns, since sibling tools like adb_snapshot_compare and adb_snapshot_restore_settings presumably need to reference that artifact.

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 'name' (default auto timestamp) and 'device' parameters are already fully documented. The description adds no further parameter semantics beyond the implicit connection between naming and the saved JSON file, which is the expected baseline.

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 gives a specific verb ('Capture') and resource ('device state snapshot') and enumerates the captured content (packages, settings, system properties), so the agent knows exactly what the tool produces. It does not explicitly differentiate from siblings such as adb_snapshot_compare or adb_profile_save, leaving the routing distinction implicit.

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?

There is no when-to-use guidance, no mention of prerequisites (connected device, root, USB debugging), and no reference to alternatives or follow-up tools like adb_snapshot_compare. The agent must infer from the name that this is a baseline-capture step.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

adb_snapshot_compareA

Compare current device state against a saved snapshot. Shows added/removed packages, changed settings, and property differences.

NameRequiredDescriptionDefault
deviceNoDevice serial
snapshotPathYesPath to the saved snapshot JSON file

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are supplied, so the description carries the full behavioral burden. It usefully discloses the categories of output (packages, settings, properties), but never states that the operation is read-only/non-mutating, what happens if the snapshot file is missing or stale, or whether comparison is exact-match or tolerant.

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 zero filler: the comparison action is front-loaded, and the second sentence efficiently enumerates the output categories. Nothing is repeated from the schema or wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter tool this covers purpose and rough output shape, but with no annotations and no output schema the description should have disclosed that it is non-destructive, the prerequisite of a valid snapshot file, and any error behavior. Those gaps leave the agent underinformed about safe invocation.

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 both 'device' (Device serial) and 'snapshotPath' (Path to the saved snapshot JSON file) documented in the schema. The description adds no parameter-level detail such as path format or device-selection behavior, so the baseline 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 names a specific verb (Compare) and resource (current device state vs a saved snapshot), and scopes the result to added/removed packages, changed settings, and property differences. That scope distinguishes it from sibling comparison tools such as adb_thermal_compare or adb_firmware_diff without needing to open their schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'against a saved snapshot' implies the prerequisite that a snapshot must already exist, but the description never names adb_snapshot_capture as the source, gives no when-not guidance, and offers no alternatives for broader regression checks (e.g., adb_regression_check). Usage is implied rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

adb_snapshot_restore_settingsA

Restore settings from a saved snapshot to the current device. Only restores global and secure settings — does not install/uninstall packages.

NameRequiredDescriptionDefault
deviceNoDevice serial
namespaceNoWhich settings namespace to restoreboth
snapshotPathYesPath to the saved snapshot JSON file

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations at all, the description carries the full burden, and it does disclose the most important trait: this is a mutating overwrite limited to global and secure namespaces, and it will not touch packages. That tells an agent what state is at risk. What is missing is whether the restore is wholesale or key-by-key, and whether elevated permissions such as WRITE_SECURE_SETTINGS are required.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, no filler, and the core action is front-loaded ahead of the scope caveat. Every clause earns its place by either defining the operation or bounding it.

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 three-parameter mutation tool with no annotations and no output schema, the description covers purpose and scope but leaves gaps an agent would want: permission requirements, failure behavior on malformed or partial snapshots, and the capture-then-restore workflow relationship. It is adequate but not complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with all three parameters documented including the global/secure/both enum, so the baseline is 3. The description confirms that global and secure are the only meaningful namespaces, but adds no semantics for snapshotPath format or the device serial beyond what the schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'Restore settings from a saved snapshot to the current device.' This is clearly distinguishable from the sibling snapshot tools adb_snapshot_capture and adb_snapshot_compare, though those siblings are never named, so the differentiation is inferable rather than explicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The second sentence bounds the operation to global and secure settings and excludes package install/uninstall, which gives useful context about what this tool will and will not do. However, it never says when to prefer it over adb_settings_put for individual keys, nor does it state the prerequisite of having a snapshot produced by adb_snapshot_capture.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

adb_sqlite_inspectA

Safely inspect a Room or SQLite database inside an installed app. Lists package databases, shows schema, or executes one validated read-only query. Requires a debuggable app (run-as) or root; queries a bounded private snapshot with device sqlite3 or an isolated host SQLite process.

NameRequiredDescriptionDefault
queryNoOne read-only SELECT, WITH, EXPLAIN, or allowlisted PRAGMA statement
accessNoAccess method. auto prefers run-as and falls back to root.auto
actionNoList databases, show sqlite_master schema, or run a read-only querylist
deviceNoDevice serial
maxRowsNoMaximum rows returned for SELECT/WITH queries (1-1000, default 100)
databaseNoDatabase filename inside the package databases directory (no path separators)
packageNameYesInstalled Android package whose databases directory may be inspected

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations supplied, the description does most of the safety work: it says 'safely', 'read-only', 'one validated query', and that access goes through a 'bounded private snapshot' via device sqlite3 or an isolated host process. That is meaningful behavioral context. It still omits return shape and what happens when maxRows truncates results, so the description doesn't tell the agent whether returned data is complete.

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, each carrying distinct information: purpose, capabilities, and the privilege/execution constraints. The capability list is front-loaded, ahead of the caveats, which is the right order for tool selection.

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 7-parameter read-only tool with full schema coverage and no output schema, the description covers prerequisites, execution isolation, and query validation. The one real gap is output shape (what a list/schema/query result looks like, and whether results are truncated by maxRows), but on the whole it is enough to call 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 every parameter including the enums and bounds. The description only reinforces the query parameter's constraint ('one validated read-only query') and doesn't explain the access or device parameters, so it adds little beyond the schema. Baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The first sentence gives a specific verb ('inspect') and resource ('Room or SQLite database inside an installed app'), and the second enumerates the three concrete modes (list databases, show schema, run one read-only query). It does not explicitly contrast itself with adjacent adb tools an agent might reach for (adb_shell, adb_cat, adb_pull), so sibling differentiation is implied rather than stated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states a hard precondition clearly: the target app must be debuggable (run-as) or the device rooted. That tells the agent when this tool is viable, but there are no exclusions or named alternatives for the cases where those preconditions fail.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

adb_start_activityC

Start an activity or app by intent or component name

NameRequiredDescriptionDefault
deviceNoDevice serial
intentYesIntent or component (e.g., 'com.example/.MainActivity' or '-a android.intent.action.VIEW -d https://example.com')

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are supplied, so the description carries the full burden and discloses almost nothing: it does not say what happens on failure (e.g., activity not found), whether it brings an existing task to the foreground, or what the tool returns. For a device-mutating launch action this is a substantial gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single efficient sentence with the verb and mechanism front-loaded and no filler. It could still be lengthened slightly to add routing guidance without becoming bloated.

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 two-parameter, no-output, no-annotation tool the description is minimally viable, but an agent still lacks default-device behavior, expected return shape, and error semantics. Those gaps matter because nothing else in the definition supplies them.

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 documented including a concrete example of the intent syntax, so the schema already does the work. The description only echoes the intent parameter and says nothing about what happens if device is omitted (default device?).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ("Start") and resource ("an activity or app") plus the mechanism ("by intent or component name"), so the action is unambiguous. It does not differentiate from close siblings like adb_start_app, adb_restart_app, or adb_open_url, which an agent must guess between.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this versus adb_start_app or adb_open_url, and no mention of prerequisites such as the target device needing to be connected or the activity needing to exist. Usage must be inferred entirely from the one-line purpose.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

adb_start_appA

Launch an app by package name (resolves and starts the default launcher activity)

NameRequiredDescriptionDefault
deviceNoDevice serial
packageNameYesPackage name (e.g., 'com.example.app')

TDQS

A3.5/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 does disclose genuine behavior beyond the schema: the tool performs launcher-intent resolution instead of starting a named activity. However, it is silent on failure modes (package not installed, no launcher activity, app already running) and on what the call returns.

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 front-loaded sentence with the core action first and the clarifying resolution detail in a parenthetical. No padding or redundant restatement of the name.

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 two-parameter launch tool with no output schema and full schema documentation, the description covers what the tool does and how it resolves the activity. It stops short of the operational details an agent would want, such as preconditions or expected result on failure.

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%, including an example package name and the device serial, so the schema already does the parameter work. The description only restates that the package name is the key input and adds no format, targeting, or device-selection detail.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Launch an app by package name') and adds the resolution mechanism ('resolves and starts the default launcher activity'), which implicitly separates it from adb_start_activity. It does not name any sibling explicitly, so an agent must still infer the boundary with adb_start_activity and adb_restart_app.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The parenthetical implies the intended case (you know the package but not the concrete activity), but there is no explicit when-to-use/when-not guidance and no mention of adb_start_activity, adb_restart_app, or adb_open_url as alternatives. Usage is implied rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

adb_tap_elementA

Find a UI element by text, resource-id, or content-description, then tap its center. Combines UI hierarchy search with input tap in one atomic operation. More reliable than coordinate-based taps for dynamic layouts.

NameRequiredDescriptionDefault
textNoMatch elements containing this text (case-insensitive)
indexNoWhich match to tap if multiple found (0 = first match, default)
deviceNoDevice serial
resourceIdNoMatch elements with this resource-id (partial match)
contentDescNoMatch elements with this content-description (partial, case-insensitive)

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must carry the full behavioral burden. It usefully flags that the search and tap are one atomic operation, but omits critical behavior for a mutation: what happens when zero elements match, whether it waits/polls for the element (vs. adb_wait_element), and whether a tap can trigger state changes on 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?

Three short sentences: what it does, how it is implemented, and why it beats the alternative. Front-loaded and free of 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?

For a five-param atomic action with full schema coverage and no output schema, the definition covers purpose, mechanism, and rationale. The remaining gap is failure/no-match behavior and whether the call blocks, which matters for an input-mutating tool with no annotations.

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 all five parameters, including the match index and the default of 0, are already documented in the schema. The description only echoes the three match keys and adds no tie-breaking, precedence, or multi-field combination semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Find ... then tap its center'), the resource (UI element), and the three matching keys (text, resource-id, content-description). The closing comparison to coordinate-based taps makes clear it is not the generic adb_input path.

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 line 'More reliable than coordinate-based taps for dynamic layouts' gives a concrete condition for choosing this over adb_input-style tools. It stops short of naming the alternative tool or saying when element matching is the wrong choice (e.g., elements without text/ids).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

adb_tcpdump_startA

Start a packet capture on the device using tcpdump. Requires root or tcpdump binary on device. Capture runs in background.

NameRequiredDescriptionDefault
deviceNoDevice serial
filterNotcpdump filter expression (e.g., 'port 443', 'host 10.0.0.1')
interfaceNoNetwork interface to capture (default: 'any')any
maxPacketsNoStop after N packets (1-1000000, omit for continuous until stop)

TDQS

A3.7/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 and does add real value: it discloses the root/binary prerequisite and the background execution model. However, it omits critical behavioral facts an agent needs — where the captured packets are written, how to retrieve them, what happens if a capture is already running, or what error surfaces when root is absent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three compact sentences with zero filler, front-loading the action, then the precondition, then the execution model. Nothing could be removed without losing 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?

Given a simple four-parameter start tool with full schema coverage and no output schema, the description covers the action, the prerequisite, and the async nature. The missing stop-tool reference and output location are the only meaningful 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%, with filter syntax examples and the maxPackets range already documented in the schema. The description adds nothing about parameters, so the baseline 3 applies — the schema does all the work here.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource — 'Start a packet capture on the device using tcpdump' — which an agent can instantly distinguish from sibling read-only tools like adb_network_connections. It does not, however, name the paired sibling adb_tcpdump_stop, so the lifecycle pairing is left implicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives a hard precondition ('Requires root or tcpdump binary on device') and notes the capture is asynchronous ('runs in background'), which is useful context for calling it. But it never says when to choose this over alternatives such as adb_network_connections or adb_network_scan, and never points to adb_tcpdump_stop as the way to end the capture.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

adb_tcpdump_stopA

Stop an active packet capture and pull the pcap file locally for analysis.

NameRequiredDescriptionDefault
deviceNoDevice serial

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are supplied, so the description carries the full burden. It does disclose two behaviors beyond the name: terminating the capture and transferring the pcap to the local host — useful for a mutation tool. However, it omits where the file is written, whether the remote capture is cleaned up, and what happens if no capture is active.

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 front-loaded sentence that names the action, its object, and the side effect with zero filler. Nothing could be removed without losing 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?

The tool is simple (one optional param, no nesting), but with no annotations and no output schema, the description should state the destination/format of the pulled pcap and the failure mode when no capture is running. As written, an agent knows what it does but not what it gets back or where it lands.

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 the single 'device' parameter, so the schema already defines it as a device serial. The description adds nothing about whether device is required or how it resolves to a target, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Stop') and resource ('active packet capture') plus a second concrete effect ('pull the pcap file locally'). An agent can distinguish it from adb_tcpdump_start without inspecting the schema, though the description never names the sibling pair explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied by the phrase 'an active packet capture' — the agent must infer that a prior adb_tcpdump_start is a prerequisite and that calling it with no capture running is invalid. No explicit when-not guidance or alternative tools are named.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

adb_tcpipA

Switch a USB-connected device to TCP/IP mode on the specified port (default 5555). After this, you can disconnect USB and use adb_connect.

NameRequiredDescriptionDefault
portNoTCP port for ADB (1-65535, default 5555)
deviceNoDevice serial (must be USB-connected)

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden. It does disclose the meaningful side effect (the device switches transport mode) and the immediate consequence (USB can be unplugged), but it omits whether the change persists across reboots, how to revert to USB, and whether the ADB daemon restarts or the connection drops mid-call.

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 with zero filler: the operation and its default are front-loaded, then the workflow consequence. Nothing is repeated unnecessarily and every clause 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 two-optional-parameter tool with no output schema, the description covers the prerequisite, the default port, and the next step, which is enough to call it correctly. The small gap is the absence of any note on reversibility or recovery if the port is unreachable after the switch.

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 both 'port' (range and default) and 'device' are already documented in structured form; the description only restates the default port and the USB-connected constraint. Baseline 3 is appropriate since the schema does the heavy lifting and the description adds no new parameter 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?

States a specific verb and resource ('Switch a USB-connected device to TCP/IP mode') plus the scope of the operation (specified port, default 5555). It also positions itself relative to the adb_connect sibling by naming it as the follow-up step, so an agent can tell the two apart without inspecting either schema.

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 a clear precondition ('USB-connected device') and a clear sequencing instruction ('After this, you can disconnect USB and use adb_connect'), which effectively tells the agent when this tool belongs in a workflow. It stops short of explicit exclusions, such as what to do for a device already on TCP/IP or which sibling to use to revert.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

adb_telephonyC

Get telephony state including cell info, signal strength, and network registration.

NameRequiredDescriptionDefault
deviceNoDevice serial

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. 'Get' implies a read, but it says nothing about permissions or root requirements, whether the modem/RIL must be up, latency, or whether state is sampled once or over a window — all material for a telephony query.

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?

One compact sentence, front-loaded with the action and resource, with no filler. It could be tightened slightly by naming what it does not cover, but there is no wasted wording.

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 one-optional-parameter read tool with no output schema, the description is minimally adequate: it names the data categories returned. It falls short on distinguishing the tool from dense sibling coverage and on operational prerequisites.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and there is a single optional 'device' serial parameter fully documented in the schema. The description adds no further meaning about it, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The verb+resource is specific ('Get telephony state') and it enumerates the content areas returned (cell info, signal strength, network registration). However, it does not distinguish itself from several closely overlapping siblings such as adb_cell_identity, adb_signal_detail, adb_neighboring_cells, and adb_baseband_info, so an agent cannot tell which of these to pick.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use or when-not-to-use guidance and no mention of any alternative tool. With ~10 sibling tools covering telephony/cell/signal territory, the absence of routing guidance is a real gap.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

adb_test_gen_from_intentsA

Analyze a package's registered activities and intent filters to generate a test workflow that launches each exported activity and verifies it renders. Produces workflow JSON compatible with adb_workflow_run.

NameRequiredDescriptionDefault
deviceNoDevice serial
packageNameYesPackage name to analyze

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations at all, the description carries the full burden. It does disclose the analysis target (exported activities and intent filters), the generation behavior, and the output format. However, it does not say whether the tool only reads the device or also mutates/persists anything, whether a device must be connected, or whether it actually runs the generated workflow. These are meaningful gaps for an unannotated 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?

Two sentences, no filler, and the core action is front-loaded before the output-compatibility note. Every clause contributes new 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 simple two-parameter, non-annotated tool this is close to sufficient: it states the input concept, the transformation, and the output artifact. The remaining gap is that with no output schema, the description doesn't clarify whether the workflow JSON is returned inline or written somewhere, nor the device requirement.

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 both parameters (device serial, package name to analyze), so the schema already does the semantic work. The description adds context about what the package is analyzed for but no format or constraint detail beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb+resource pair: analyze a package's registered activities and intent filters, then generate a test workflow. It also frames the output as workflow JSON compatible with adb_workflow_run, which differentiates it from runners. It stops short of distinguishing it from the closest sibling, adb_test_gen_from_ui.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: the mention of compatibility with adb_workflow_run suggests a generate-then-run pipeline, but there is no explicit 'use this when' statement, no comparison to adb_test_gen_from_ui or adb_test_gen_save, and no prerequisites or exclusions (e.g. what happens if no exported activities exist).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

adb_test_gen_from_uiA

Analyze the current screen and generate a test workflow that taps each interactive element, takes screenshots, and verifies the app doesn't crash. Produces a workflow JSON compatible with adb_workflow_run.

NameRequiredDescriptionDefault
deviceNoDevice serial
packageNameYesPackage name to monitor during test (used for logcat filtering and crash detection)
returnToStartNoPress Back after each tap to return to the starting screen
screenshotAfterEachNoTake a screenshot after each tap

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description usefully discloses the generated workflow's tapping, screenshot, and crash-verification behavior. However, it does not explicitly confirm that generation itself does not execute the workflow or mutate the device, and it leaves whether the JSON is returned directly or persisted 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?

Two compact sentences front-load the purpose and then state output compatibility. There is no filler or redundant explanation.

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 four-parameter generator, the screen scope, workflow behavior, and downstream compatibility provide nearly enough context alongside the fully documented schema. Because there is no output schema, explicitly stating how the JSON is delivered and that this tool only generates rather than runs the workflow would remove the remaining ambiguity.

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 all four parameters, including defaults and crash-monitoring semantics, are already documented. The description reinforces screenshots and crash detection but adds no parameter meaning beyond the schema, making the baseline score 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 specifies the source (the current screen), the action (analyze and generate), and the artifact (a test workflow JSON). It also distinguishes generation from execution by naming adb_workflow_run as the compatible consumer, while the UI-based source differentiates it from adb_test_gen_from_intents.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives a clear use case: generate a UI-driven smoke-test workflow from the visible screen for later use with adb_workflow_run. It does not explicitly explain when to prefer adb_test_gen_from_intents or mention related validation and saving tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

adb_test_gen_saveB

Save a generated workflow JSON to the workflows directory for later execution with adb_workflow_run.

NameRequiredDescriptionDefault
nameYesWorkflow name (used as filename)
workflowYesWorkflow JSON string to save

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden for a filesystem write. It discloses the destination directory but says nothing about overwrite-vs-error behavior when 'name' already exists, whether the directory is created if absent, path sanitization of the filename, or what the tool returns on success/failure. For a mutation tool with zero annotation coverage, these are significant omissions.

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 front-loaded sentence with the action, the artifact, the destination, and the follow-up tool. No wasted wording and nothing buried.

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 two-parameter persistence tool with no output schema, the description covers the essentials of what and why. The remaining gap is mutation semantics (overwrite, validation of the JSON string, error surface), which matters more here because no annotations exist to fill it.

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 both parameters are documented in the schema, including that 'name' is used as the filename. The description adds nothing beyond that baseline, so a 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 ('Save') with a specific resource ('generated workflow JSON') and destination ('workflows directory'), which lets an agent distinguish it from adb_workflow_run (execution) and adb_workflow_validate. It does not name the generator siblings (adb_test_gen_from_ui, adb_test_gen_from_intents) as its upstream, but the purpose is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'for later execution with adb_workflow_run' implies the save-then-run sequencing and points at the correct downstream tool. However, it never states when to choose this versus re-generating, or any prerequisites such as that a workflow must first be produced by a gen tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

adb_test_session_endA

End the active test session. Writes a summary manifest and returns the session directory path.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must carry the behavioral burden. It usefully discloses a write side effect (summary manifest) and a return value (session directory path), but does not explain whether the session is destroyed, whether prior data remains, permission requirements, or error behavior when no session is active.

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 tightly written sentences with no filler. The primary action is front-loaded, followed by the side effect and return value, so the agent gets the essential facts immediately.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter lifecycle mutation with no output schema, the description covers the action, side effect, and returned path. It could be stronger by stating prerequisites or failure behavior when no active session exists, but it is otherwise complete enough to call 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 tool takes no parameters, so there is no parameter meaning to compensate for. The description appropriately implies a parameterless lifecycle operation and focuses on the session-level effect instead.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'End the active test session.' It also discloses the outcome: writes a summary manifest and returns the session directory path. It is clearly the closing counterpart to adb_test_session_start, though it does not explicitly name 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 Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'active test session' implies this is used after a session has been started, and the sibling set includes adb_test_session_start and adb_test_step. However, it gives no explicit guidance on when not to use it, what happens without an active session, or how it relates to the step tool in a workflow.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

adb_test_session_startA

Start a structured test session. Creates a named directory for organizing numbered screenshots and logcat captures.

NameRequiredDescriptionDefault
nameYesTest session name (e.g., 'login_flow', 'threat_detection')
deviceNoDevice serial

TDQS

A3.6/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 does disclose one meaningful side effect (a directory is created for numbered screenshots and logcat captures), but omits whether an existing directory of the same name is overwritten or suffixed, where it is created, and whether it requires a connected 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?

Two short sentences, front-loaded with the action and followed by the observable effect. Nothing is wasted and there is no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a small two-parameter, no-output-schema tool this is close to adequate, but the missing pieces — overwrite behavior, target device scoping, and relationship to the paired end/step tools — are exactly what an agent needs to sequence a test session 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 already 100%, so the baseline is 3, but the description reinforces that the name determines the created directory — adding concrete meaning to the 'name' parameter beyond the schema's example strings. The 'device' parameter receives no mention at all.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Start a structured test session') and adds the concrete effect of creating a named directory for screenshots and logcat captures. It never names the companion siblings adb_test_step or adb_test_session_end, so the boundary of the session lifecycle is left implicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: the word 'Start' and the 'session' framing suggest calling this before recording steps or captures, but there is no explicit when-to-use, no mention of adb_test_step/adb_test_session_end, and no stated preconditions such as an active device connection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

adb_test_stepA

Capture a numbered test step: takes a screenshot and captures logcat since the last step. Saves both to the session directory.

NameRequiredDescriptionDefault
descriptionYesDescription of what this step tests or verifies
captureLogcatNoCapture logcat since last step
captureScreenshotNoTake a screenshot for this step

TDQS

A3.7/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 and does so reasonably well. It reveals automatic step numbering, incremental logcat capture since the last step, and persistence to the session directory, though it omits session prerequisites and return 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?

Two compact sentences front-load the operation and then state where artifacts are saved, with no filler. The wording is easy to scan and appropriately sized for the tool.

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 three-parameter capture tool, the core behavior and storage destination are covered. However, the stateful workflow lacks an explicit active-session prerequisite, and with no output schema there is no indication of whether a step identifier or artifact paths are returned.

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?

All three parameters already have clear schema descriptions, so the 100% coverage establishes a baseline of 3. The description reinforces the screenshot and logcat roles but adds no further meaning for the required description parameter or the two capture toggles.

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 the action and resource: capturing a test step consisting of a screenshot and logcat, then saving both. Its numbered, session-based framing provides some distinction from adb_screencap and adb_logcat, but it does not explicitly differentiate those 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?

It implies use while recording a multi-step test session, but never explains whether adb_test_session_start must be called first or when to prefer this over standalone screenshot and logcat tools. There are no explicit when-not or alternative-tool guidelines.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

adb_thermal_compareA

Compare current thermal/power state against a saved baseline. Reports temperature changes per zone, CPU frequency shifts, and battery drain rate differences.

NameRequiredDescriptionDefault
deviceNoDevice serial
baselinePathNoPath to baseline JSON. If omitted, uses the most recent baseline for the device.

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations present, the description carries the full behavioral burden. It usefully discloses what the comparison reports (per-zone temperature deltas, CPU frequency shifts, battery drain rate differences), but it does not state that the operation is read-only, whether it captures a new snapshot as part of the call, or what happens when no baseline exists for 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?

Two sentences, zero filler. The core action is front-loaded and the second sentence covers the return content, so every clause 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?

There is no output schema, but the description effectively summarizes the return payload, which is the most important gap to close for this tool. Only the precondition of an existing baseline and its failure behavior are left unstated, so it is nearly complete for a two-optional-parameter read/comparison 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 both parameters (device, baselinePath) are already documented, including the most-recent-baseline fallback. The description adds no additional meaning about parameter behavior, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb (compare) and a specific resource (current thermal/power state vs. a saved baseline), then enumerates the three reported deltas. It is clearly distinguishable from adb_thermal_snapshot or adb_battery_drain, though it never names those siblings explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'against a saved baseline' implies this is a follow-up to a snapshot step, and the schema note about falling back to the most recent baseline reinforces that workflow. However, there is no explicit when-to-use/when-not guidance and no named alternative for the case where no baseline exists.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

adb_thermal_snapshotA

Capture a thermal and power snapshot: all thermal zone temperatures, per-CPU frequencies and governors, cooling device states, and battery temperature/current draw. Optionally save as a baseline for later comparison.

NameRequiredDescriptionDefault
saveNoSave snapshot as a baseline JSON file
labelNoLabel for saved baselinesnapshot
deviceNoDevice serial

TDQS

A3.6/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 behavioral burden. It does disclose the one real side effect (writing a baseline JSON file) and that the operation reads a broad set of kernel/sysfs data, but it says nothing about permissions, whether some fields may be unavailable on non-rooted devices, latency, or error 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?

Two sentences, front-loaded with the action, the payload enumerated in a single readable list, and the optional save capability placed last. No filler or restated title.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a no-output-schema capture tool, enumerating what the snapshot contains is exactly the right compensation, and the save option is covered. Remaining gaps are the on-device path/format of the saved baseline and how it is later consumed, which would let an agent chain into the comparison tool without guessing.

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 save, label, and device. The description adds only a light gloss on save/label ("baseline for later comparison"), which roughly restates the schema text "Save snapshot as a baseline JSON file"; it adds nothing about device selection semantics or label collision behavior. Baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

"Capture a thermal and power snapshot" gives a specific verb and resource, and the enumeration (thermal zones, per-CPU frequencies/governors, cooling devices, battery temp/current) makes the scope concrete and distinguishable from siblings like adb_battery or adb_perf_snapshot. It stops short of naming those siblings outright, so an agent still has to infer the boundary itself.

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?

"Optionally save as a baseline for later comparison" implies the intended workflow leading to adb_thermal_compare, but never states it. There is no explicit when-to-use versus adb_battery / adb_perf_snapshot / adb_health_check guidance and no stated preconditions (e.g., root needed for governors or cooling device states).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

adb_topC

Get current CPU and memory usage snapshot

NameRequiredDescriptionDefault
countNoNumber of iterations (1-100, 1 = snapshot)
deviceNoDevice serial

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are supplied, so the description carries the full behavioral burden. 'Snapshot' implies a read-only operation, but the definition does not confirm read-only semantics, explain what happens during the count>1 iterations (repeated sampling? aggregation?), or mention device/root prerequisites. For a zero-annotation tool this is a meaningful gap.

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?

One front-loaded sentence with no wasted words, which is appropriate for a simple two-parameter read tool. It is arguably too terse rather than verbose, but nothing is padded or buried.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no annotations, no output schema, and a parameter whose multi-iteration behavior is unexplained, the definition is under-specified for correct invocation. An agent cannot tell what the return payload looks like or how to interpret count>1, which the schema alone leaves ambiguous.

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 both parameters (count with its 1-100 range and snapshot meaning, plus device serial) are already fully documented in the schema. The description adds no meaning beyond that, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'Get current CPU and memory usage snapshot'. An agent can immediately tell this returns a point-in-time resource-usage reading. However, it does not distinguish itself from nearby siblings such as adb_perf_snapshot, adb_health_check, or adb_thermal_snapshot, so the boundary is inferred rather than stated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use guidance and no named alternative. With a large sibling set containing adb_perf_snapshot and adb_dumpsys, the definition should say why an agent would pick adb_top over those, but it offers nothing beyond the one-line purpose.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

adb_tunnel_closeA

Close a managed tunnel by ID, or all managed tunnels at once. The corresponding adb forward/reverse entry is removed and the tunnel is dropped from the cleanup registry. Use adb_tunnel_list to see active tunnel IDs.

NameRequiredDescriptionDefault
idYesTunnel ID (tun_XXXXXX) returned by adb_tunnel_open, or the literal string 'all' to close every managed tunnel.

TDQS

A4.2/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 burden and does disclose the key side effects: the paired adb forward/reverse entry is removed and the tunnel is dropped from the cleanup registry. It does not state error behavior for an unknown ID or whether the close is irreversible, which are the remaining gaps for an unannotated mutation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences with the primary operation front-loaded, then side effects, then the pointer to the discovery tool. No filler or redundant wording.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter tool with no output schema and no annotations, the description covers operation, scope, side effects, and ID discovery adequately. Only failure modes and the outcome when 'all' matches no tunnels are left unstated.

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 tun_XXXXXX format and the literal 'all' value in detail. The description restates that same dual behavior, adding clarity of intent but no new meaning beyond the schema, so the baseline 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?

States a specific verb and resource ("Close a managed tunnel") and a scope variant ("or all managed tunnels at once"), which cleanly separates it from adb_tunnel_open and adb_tunnel_list among the siblings.

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 routes the agent to adb_tunnel_list to obtain valid tunnel IDs, giving clear pre-call guidance. It does not discuss when to prefer adb_forward_remove or adb_reverse_remove instead, though the statement that those entries are removed automatically implicitly covers that.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

adb_tunnel_listA

List all active managed tunnels (opened via adb_tunnel_open). Shows tunnel ID, device, direction, and both endpoints. Note: this only surfaces tunnels created via adb_tunnel_open — tunnels created via the low-level adb_forward / adb_reverse won't appear here. For those, use adb_forward_list.

NameRequiredDescriptionDefault
deviceNoFilter to a specific device serial (default: all devices)

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are supplied, so the description carries the disclosure burden and does well: it enumerates the returned fields (tunnel ID, device, direction, both endpoints) and warns that low-level forwards are invisible in the result, which prevents a false-negative conclusion. It stops short of stating whether a device must be connected or what an empty result means.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the action and its scope, followed by return fields, then the caveat. The 'only surfaces ... won't appear here' phrasing restates the same exclusion twice, which is slightly redundant but harmless given the risk of a wrong conclusion.

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 one-parameter list tool with no output schema and no annotations, the description covers action, scope, returned fields, and the key failure mode (missing low-level tunnels). An agent has everything needed to call it and interpret the result 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% and the single 'device' filter is fully documented there as 'Filter to a specific device serial (default: all devices)'. The description never mentions the filter, so it adds no meaning beyond the schema; baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb and resource ('List all active managed tunnels') and immediately scopes it to tunnels opened via adb_tunnel_open. It also names precisely which sibling covers the other case (adb_forward_list), so an agent can distinguish it from the lookalike adb_forward_list without opening either schema.

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 both when to use this tool (managed tunnels from adb_tunnel_open) and when not to (tunnels created via the low-level adb_forward / adb_reverse), explicitly routing to adb_forward_list as the alternative. Nothing about tool selection is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

adb_tunnel_openA

Open a managed tunnel between host and device. Higher-level convenience wrapper over adb_forward / adb_reverse: auto-picks a free host port when one isn't specified (forward only), returns an opaque tunnel ID for later close, and registers cleanup so the tunnel is removed on server exit. Direction 'forward' = host port forwards TO device service; 'reverse' = device port forwards TO host service.

NameRequiredDescriptionDefault
deviceNoDevice serial
hostSpecNoHost-side spec, e.g., 'tcp:8080'. For 'forward' direction: omit to auto-pick a free host port. For 'reverse' direction: required (can't auto-pick device-side ports without an extra probe call).
directionYes'forward' (host → device) or 'reverse' (device → host)
deviceSpecYesDevice-side spec, e.g., 'tcp:3000' or 'localabstract:app_socket'

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations supplied, the description carries the full burden and does well: it discloses auto-selection of a free host port (forward only), that a tunnel ID is returned for later close via adb_tunnel_close, and that cleanup is registered on server exit. Gaps remain around failure modes such as occupied ports or invalid specs, which matter for a mutation tool with no annotation coverage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action, then supporting behavior, then direction semantics; no filler sentences. The final direction explanation is somewhat redundant with the enum description but is short and clarifying rather than wasteful.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, and the description compensates by explaining that an opaque tunnel ID is returned and how the tunnel is torn down. Combined with the 100% schema coverage, an agent has what it needs to call this correctly; only error-path behavior is unstated.

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 four parameters, including direction and the hostSpec auto-pick rule. The description restates the forward/reverse direction semantics and the auto-port rule, which reinforces but adds little new 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?

States a specific verb and resource (open a managed tunnel between host and device) and explicitly positions itself as a higher-level wrapper over adb_forward / adb_reverse, which are present in the sibling list. An agent can distinguish it from the lower-level siblings without opening any schema.

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 wrapper relationship to adb_forward / adb_reverse plus the listed benefits (auto port pick, opaque tunnel ID, cleanup on server exit) make it clear when this is the preferable choice. It stops short of stating explicit exclusions, e.g. when to prefer the raw adb_forward/adb_reverse calls instead.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

adb_ui_dumpA

Dump the current UI hierarchy. Parses the view tree into structured element data with coordinates, text, resource IDs, and interaction flags. Use format='tsv' for token-efficient compact output, format='xml' for raw uiautomator XML.

NameRequiredDescriptionDefault
deviceNoDevice serial
formatNoOutput format: 'text' (default, human-readable), 'tsv' (tab-separated, token-efficient), 'xml' (raw uiautomator XML)text
clickableOnlyNoOnly show clickable/interactive elements

TDQS

A3.5/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 behavioral burden. It discloses the parsed output fields and format modes, but it does not explicitly state that the operation is read-only, whether it has side effects, or any permission/performance considerations.

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, compact, and free of filler. The three sentences efficiently cover purpose, output structure, and format 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?

For a three-parameter tool with no output schema, the description sufficiently explains the returned structure and format options while the high-coverage schema handles parameter details. It still lacks explicit read-only/safety context and sibling differentiation.

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 three parameters. The description reinforces the format enum meanings but adds no extra meaning for device or clickableOnly beyond what the schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: "Dump the current UI hierarchy," and explains that it parses the view tree into structured element data. It is clear, but it does not distinguish this tool from close siblings such as adb_ui_find or adb_a11y_tree.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives useful format-selection guidance: tsv for token-efficient output and xml for raw uiautomator XML. However, it does not explicitly say when to use this tool versus adb_ui_find, adb_a11y_tree, or other UI inspection tools, nor 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.

adb_ui_findA

Search the UI hierarchy for elements matching text, resource-id, or content-description. Returns matching elements with coordinates for precise adb_input targeting.

NameRequiredDescriptionDefault
textNoMatch elements containing this text (case-insensitive)
deviceNoDevice serial
resourceIdNoMatch elements with this resource-id (partial match)
contentDescNoMatch elements with this content-description (partial, case-insensitive)

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations supplied, the description must carry the behavioral burden, and it does disclose that matches are returned with coordinates. It omits important behavior: what happens when nothing matches (empty result vs error), whether all matches or only the first are returned, how multiple criteria combine, and whether the hierarchy is fetched live. These gaps keep it at minimum-viable transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, zero filler, with the core action front-loaded and the return value second. Nothing is redundant or padded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema and no annotations, so the description is the only place return shape and edge behavior can be explained. It gives the high-level return (elements with coordinates) but leaves no-match behavior, multi-match handling, and criteria combination unstated, which is thin for a 4-parameter query tool with zero structured behavioral metadata.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and each parameter already documents its matching semantics (case-insensitive, partial match) in the schema, so the baseline of 3 applies. The description adds only that these are the matching dimensions and does not address the undocumented-in-description 'device' parameter or combination behavior.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ('Search the UI hierarchy for elements') plus the three match criteria (text, resource-id, content-description), which is more than a restatement of the name. It does not explicitly distinguish itself from near siblings like adb_ui_dump, adb_tap_element, or adb_a11y_tree, so sibling differentiation is only implied.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'for precise adb_input targeting' implies the intended workflow (find, then act via input tools), which is useful implied usage guidance. However, there is no explicit when-to-use versus adb_ui_dump, adb_tap_element, adb_wait_element, or adb_scroll_until, and no stated preconditions or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

adb_uninstallC

Uninstall a package from the device

NameRequiredDescriptionDefault
deviceNoDevice serial
keepDataNoKeep app data and cache (-k flag)
packageNameYesPackage name (e.g., 'com.example.app')

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are supplied, so the description carries the full behavioral burden and discloses almost nothing. It does not say the operation is destructive and generally irreversible without a reinstall, that app data is destroyed by default unless keepData is set, or that uninstalling system/privileged packages may fail or require root.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with zero filler, so structure is good. It is arguably under-specified rather than over-long, but nothing in it wastes space.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This is a destructive mutation tool with no annotations and no output schema, so the description should warn about irreversibility, data loss, and likely failure modes for system packages. None of that is present, leaving the agent under-informed for a risky operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so every parameter including the keepData '-k flag' and device serial is already documented in the schema. The description adds no meaning beyond it, which lands at the baseline 3 for a fully covered schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Uninstall a package from the device'), which cleanly separates it from adb_install, adb_clear_data and adb_multi_install. It never names those siblings or the device scope explicitly, so it stops short of a 5.

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?

There is no when-to-use guidance, no stated prerequisites (device serial required, USB/TCP connection must exist), and no pointer to alternatives such as adb_clear_data for wiping data only or adb_multi_install for bulk package handling. The agent must infer all routing from the tool name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

adb_wait_elementA

Wait for a UI element to appear or disappear. Polls the UI hierarchy at regular intervals until the condition is met or timeout expires. Useful for waiting after navigation, animations, or async content loading.

NameRequiredDescriptionDefault
textNoMatch elements containing this text (case-insensitive)
deviceNoDevice serial
pollMsNoPolling interval in ms (200-5000, default 500)
conditionNoWait for element to 'appear' (default) or 'disappear'appear
timeoutMsNoMaximum wait time in ms (1s-60s, default 10s)
resourceIdNoMatch elements with this resource-id (partial match)
contentDescNoMatch elements with this content-description (partial, case-insensitive)

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations supplied, the description must carry the behavioral load, and it does disclose the polling mechanism, interval-based checking, and timeout expiry. It omits the most consequential behaviors: what happens when the timeout expires (error, exception, or false result), and what occurs when no selector parameter is provided (all 7 params are optional). Those gaps matter for a tool whose whole purpose is a blocking wait.

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, zero filler, with the action statement front-loaded and the mechanism and usage rationale following in priority order. Nothing repeats the schema or the tool name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 7-parameter, no-annotation, no-output-schema tool, the description is adequate but leaves out the return/outcome contract on timeout and the all-optional selector ambiguity. An agent could invoke it, but might not know how to interpret a failure case.

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 text, resourceId, contentDesc, condition, pollMs, and timeoutMs with ranges and defaults. The description adds no parameter meaning beyond that, so the baseline 3 applies. It also doesn't clarify how multiple selector params combine (AND vs OR), which the schema leaves ambiguous.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb+resource: 'Wait for a UI element to appear or disappear,' which tells an agent exactly what the tool does. It implies a polling/waiting role that differs from siblings like adb_ui_find (immediate query) and adb_scroll_until, but it never names those siblings to draw the boundary.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives real usage context ('after navigation, animations, or async content loading'), which is better than nothing. However, it never states when NOT to use it — e.g. use adb_ui_find for an instant check or adb_wait_stable for overall UI settling — so an agent must infer the choice from sibling names alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

adb_wait_stableA

Wait for the UI to stabilize. Polls the UI hierarchy and waits until consecutive dumps produce the same element count and structure. Useful after screen transitions, animations, or content loading before interacting with elements.

NameRequiredDescriptionDefault
deviceNoDevice serial
pollMsNoPolling interval in ms (200-5000, default 500)
timeoutMsNoMaximum wait time in ms (1s-60s, default 10s)
stableCountNoNumber of consecutive identical dumps required (2-10, default 2)

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It does explain the polling/stability criterion, which is genuinely useful behavior beyond the schema, but it omits what happens on timeout (error? success flag?), what the call returns, and whether it blocks the device or is cheap. Those are the traits an agent most needs for a waiting primitive.

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, and the core semantic (what stability means) is front-loaded ahead of the use-case sentence. Every clause 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 4-optional-param, annotation-free, no-output-schema tool, the description gives enough to call it correctly: purpose, mechanism, and timing context. The main omission is timeout/failure semantics, which matters for a blocking wait but is partially inferable from the timeoutMs parameter.

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%: device, pollMs, timeoutMs, and stableCount all have ranges and defaults documented in the schema. The description's mention of 'consecutive dumps' implicitly explains what stableCount counts, but adds no format or interaction detail (e.g., how timeout interacts with pollMs) beyond the schema 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?

States a specific verb and resource ('wait for the UI to stabilize') and immediately defines the mechanism: polling the UI hierarchy until consecutive dumps match on element count and structure. An agent can distinguish this from adb_ui_dump (one-shot dump) or adb_wait_element (waits for a specific element) without opening a schema.

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 concrete usage context: after screen transitions, animations, or content loading, and before interacting with elements. It does not name alternatives such as adb_wait_element or adb_scroll_until, which are the close siblings an agent might confuse it with, so it stops short of explicit routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

adb_wear_datalayer_preflightA

Run a read-only Wear OS Data Layer preflight across a connected phone and watch. Checks device roles, Google Play services, Bluetooth, optional app packages, companion association presence, and Data Layer service signals without exposing pairing identifiers.

NameRequiredDescriptionDefault
wearDeviceNoWear device serial; auto-detected when omitted
phoneDeviceNoPhone device serial; auto-detected when omitted
wearPackageNoOptional Wear app package expected on the watch
phonePackageNoOptional companion app package expected on the phone

TDQS

A3.5/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 disclosure burden and does deliver two useful traits: the operation is read-only, and it deliberately withholds pairing identifiers (a privacy-relevant behavior). It still omits what happens on failure, whether it blocks or times out on a missing device, and what a partial/missing Play services result looks like, which matters for a multi-device diagnostic.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the action and resource, then a tight enumeration of checks. The list is long but every item conveys distinct diagnostic coverage, and the closing privacy clause is load-bearing rather than filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-required-parameter, fully-documented-schema tool this covers the input side well, but there is no output schema and the description never indicates what the preflight report contains or how issues are surfaced — the one thing an agent would most want to know before calling a diagnostic.

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 each parameter already documents itself, including auto-detection when omitted. The description only lightly reinforces this by calling out 'device roles' and 'optional app packages', adding the useful framing that packages are the expected/anticipated apps rather than filters, but nothing beyond that.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb ('Run a ... preflight') and a specific resource ('Wear OS Data Layer'), then enumerates exactly what is inspected (device roles, Play services, Bluetooth, packages, companion association, Data Layer signals). No sibling tool covers the Wear OS Data Layer, so it is distinguishable in practice, though it never explicitly contrasts itself with near-neighbors like adb_health_check or adb_pair.

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 word 'preflight' implies a before-you-build/before-you-debug context, but the description never states when to run this versus adb_devices, adb_health_check, or adb_pair, nor any prerequisites or when-not conditions. Usage is inferable from the framing rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

adb_wifiC

Enable or disable WiFi

NameRequiredDescriptionDefault
deviceNoDevice serial
enabledYestrue = enable WiFi, false = disable

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are supplied, so the description bears the full burden of behavioral disclosure. It says nothing about whether root or special permissions are required on Android, whether existing connections drop, whether the setting persists, or how failures surface — all material for a state-changing radio toggle.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four words, front-loaded with the action and resource, with zero filler. It is efficient rather than padded; the only criticism is that terseness shades into under-specification, which is penalized in completeness.

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?

The tool is conceptually simple and its two parameters are fully documented, but with no annotations and no output schema the description should mention root/privilege requirements and any side effects of toggling the radio. As written, an agent lacks the information to call this safely on a device without root.

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%: 'device' is documented as a device serial and 'enabled' as the boolean toggle, so the description adds no parameter meaning beyond the schema. Baseline 3 applies since the schema already does the work.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific action pair ('Enable or disable') and a specific resource ('WiFi'), so an agent knows exactly what state change this tool performs. It does not explicitly contrast itself with nearby siblings such as adb_wifi_firmware, adb_airplane_mode, or adb_mobile_data, which keeps it from a 5.

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?

There is no guidance on when to prefer this tool over adb_airplane_mode or adb_mobile_data, and no stated prerequisites or context for calling it. The agent must infer usage entirely from the name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

adb_wifi_firmwareC

WiFi chipset and firmware identification. Reports WiFi driver version, firmware version, chipset/hardware info, supported bands and standards, interface details, and dumpsys excerpts. BH7 fix: dumpsys truncation now configurable via maxLines. connection state. MAC address is opt-in only (permanent hardware identifier).

NameRequiredDescriptionDefault
deviceNoDevice serial
maxLinesNoLines of dumpsys output to inspect (50-2000, default 200). Raise for verbose vendor builds where firmware info appears late in dumpsys output.
includeMacNoInclude WiFi MAC address (permanent hardware identifier — opt-in only)

TDQS

C2.9/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 does disclose two genuinely useful traits: the operation is a reporting/read-style probe, and the MAC address is a permanent hardware identifier exposed only on opt-in, plus a note that dumpsys output is truncated by maxLines. It never states permissions, side effects, or failure behavior when the device is offline.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The text is fragmented: the dangling sentence 'connection state.' has no subject, and 'BH7 fix: dumpsys truncation now configurable via maxLines' is an internal changelog line that occupies prime space. The scope enumeration is front-loaded, but the leftover fragments and fix note waste attention.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and no annotations, the description usefully enumerates the returned fields and flags the MAC privacy trade-off, which covers most of what an agent needs for a 3-parameter probe. It is still missing when-to-use routing and any statement of failure or permission 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%, so device, maxLines, and includeMac are already fully documented. The description only restates the MAC opt-in caveat and alludes to dumpsys truncation, adding little beyond the schema's own 'raise for verbose vendor builds' note. Baseline 3 applies when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The first sentence names a specific resource and action (WiFi chipset and firmware identification) and the second enumerates exactly what is reported: driver version, firmware version, chipset/hardware info, bands, standards, interface details, dumpsys excerpts. That enumeration separates it in spirit from adb_wifi, adb_baseband_info, and adb_bluetooth_firmware, though no sibling is named explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no statement of when to choose this over adb_wifi, adb_firmware_probe, adb_baseband_info, or adb_device_info, and no prerequisites or exclusions. The only directive is that MAC is opt-in, which is a privacy constraint on one parameter rather than routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

adb_workflow_listB

List saved workflow files in the workflows directory.

NameRequiredDescriptionDefault

No parameters

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden and only reveals where the files live. It does not state that the operation is read-only, what happens when the directory is missing or empty, whether it is created on demand, or what a result entry looks like.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single clean sentence with no filler, and the key information (that the listing is of saved workflow files) is front-loaded. It is perhaps terse for a tool with no output schema, but nothing is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

A zero-parameter list tool is simple, but with no output schema and no annotations the description should at least sketch the return value (file names vs. full paths vs. metadata). As written, an agent knows the scope but not what it will receive back.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there is nothing for the description to disambiguate; baseline 4 applies. The description correctly implies no scoping or filter inputs are needed.

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 and resource ('List saved workflow files') and pins down the location ('in the workflows directory'), which is enough to distinguish it from adb_workflow_run and adb_workflow_validate by the 'list' action alone. It stops short of naming those siblings, so the differentiation is inferred rather than stated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit when-to-use or when-not-to-use guidance. The discovery role is only implied by 'saved workflow files' and the presence of adb_workflow_run / adb_workflow_validate siblings, leaving the agent to infer that this is the entry point before running or validating a workflow.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

adb_workflow_runB

Execute a workflow — a JSON-defined sequence of device operations with variable substitution, conditional steps, and loop support. Supported actions: shell, root_shell, install, screenshot, logcat, getprop, sleep. Pass the workflow as a JSON string or provide a saved workflow name.

NameRequiredDescriptionDefault
deviceNoDevice serial
dryRunNoValidate and show execution plan without running
workflowYesWorkflow JSON string, or the name of a saved workflow file
variablesNoOverride workflow variables (merged with defaults)

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are supplied, so the description carries the full behavioral burden. It discloses the action vocabulary and that conditional steps and loops are supported, but says nothing about failure semantics (does the workflow abort on a failed step?), timeouts, permission or root requirements, or that actions like install and root_shell mutate device state destructively. For an execution tool with no annotation coverage, that is a substantial 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?

Two sentences, front-loaded with the core verb and resource, then the action vocabulary and calling convention. No filler or restated name/title; every clause carries information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex orchestration tool with no annotations and no output schema, the description covers what the tool is and what it can run, but leaves out what it returns, how partial failures are reported, and whether dryRun is the safe preview path. It is adequate to select the tool but not fully sufficient to invoke it confidently.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all four parameters including dryRun and variables are already documented in the schema; baseline 3 applies. The description adds only marginal meaning beyond it, mentioning variable substitution and the JSON-string-or-saved-name duality, both of which the schema already states.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Execute a workflow') and immediately defines it as a JSON-defined sequence of device operations, then enumerates the supported action vocabulary (shell, root_shell, install, screenshot, logcat, getprop, sleep). That enumeration meaningfully separates it from single-purpose siblings like adb_shell or adb_install, though it never explicitly names adb_workflow_validate or adb_workflow_list as the non-executing counterparts.

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 second sentence gives a practical calling convention ('Pass the workflow as a JSON string or provide a saved workflow name'), which is real usage guidance. However, there is no when-to-use vs when-not guidance against adb_workflow_validate, adb_batch_actions, adb_multi_shell, or adb_test_session_start, and no prerequisites or preconditions are stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

adb_workflow_validateA

Validate a workflow JSON definition without executing it. Reports structural errors and shows the execution plan.

NameRequiredDescriptionDefault
workflowYesWorkflow JSON string to validate

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 does disclose the key behavioral fact that nothing is executed and that output includes structural errors plus an execution plan, which is valuable since there is no output schema. It omits error semantics (e.g., how invalid JSON is reported), size limits, and whether validation touches any device state.

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, zero redundancy, and the non-execution qualifier is front-loaded where an agent will read it first.

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 one-parameter, non-destructive validation tool this covers purpose, the critical non-execution guarantee, and the general shape of the return value. The remaining gap is minor: it does not say how to interpret or act on reported errors, or that a validated definition can be passed to adb_workflow_run.

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 single 'workflow' parameter is documented as a 'Workflow JSON string to validate'. The description adds no format details, required fields, or example shape beyond what the schema already states, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb plus resource: 'Validate a workflow JSON definition' with the scope limiter 'without executing it'. This implicitly separates it from the sibling adb_workflow_run, but it never names that sibling or adb_workflow_list explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'without executing it' implies this is the dry-run/pre-flight step before adb_workflow_run, but that guidance is only implied. There is no explicit 'use this when...' or 'do not use this to actually run a workflow' routing statement.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 209 tool updatesv1.1.6
    • Changedadb_a11y_audit1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_a11y_touch_targets1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_a11y_tree1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_airplane_cycle1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_airplane_mode1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_apex_list1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Addedadb_app_route_context
    • Changedadb_at_batch1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_at_cross_validate1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_at_detect1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_at_probe1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_at_send2 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • changedInput schema / properties / port / description
        Previous value: -"Modem device node (e.g., '/dev/umts_router0'). If omitted, auto-detects."New value: +"Modem device node (e.g., '/dev/umts_router'). If omitted, auto-detects."
    • Changedadb_avd_list1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_baseband_info1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_batch_actions1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_battery1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_battery_drain1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_bluetooth_firmware1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_bugreport1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_build_and_install1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_carrier_config1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_cat1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_cell_identity1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_ci_device_ready1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_ci_run_tests1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_ci_wait_boot1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_clear_data1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_clipboard1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_connect1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_crash_logs1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_current_activity1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_device_info1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_device_state1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_devices1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_disconnect1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_dumpsys1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_emulator_start1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_emulator_stop1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_extract_apks1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_farm_matrix1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_farm_results1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_farm_run1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_file_checksum1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_file_chmod1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_file_chown1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_file_copy1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_file_fsinfo1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_file_move1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_file_replace1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_file_stat1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_file_touch1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_file_write1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_find1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_firmware_diff1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_firmware_history1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_firmware_probe1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_force_stop1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_forward1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_forward_list1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_forward_remove1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_getprop1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_gps_firmware1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_gradle1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_grant_permission1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_grep1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_health_check1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_heap_dump1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_iio_read1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_input1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_input_double_tap1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_input_drag1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_input_fling1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_input_long_press1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_input_pinch1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_input_text1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_install1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_install_bundle1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_list_packages1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_list_permissions1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_list_splits1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_location1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_logcat1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_logcat_clear1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_logcat_crash1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_logcat_poll1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_logcat_sessions1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_logcat_start1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_logcat_stop1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_ls1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_market_export1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_market_install1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_market_search1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_mirror_start1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_mirror_status1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_mirror_stop1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_mkdir1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_mobile_data1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_modem_logs1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_multi_compare1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_multi_install1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_multi_shell1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_multi_test1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_neighboring_cells1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_network1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_network_auto_connect1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_network_connections1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_network_device_ip1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_network_scan1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_nfc_firmware1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_notifications1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_open_url1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_orientation1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_ota_check1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_ota_fingerprint1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_ota_history1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_package_info1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_pair1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_perf_snapshot1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_permission_audit1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_plugin_info1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_plugin_list1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_profile_detect1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_profile_list1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_profile_save1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_pull1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_push1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_qemu_connect1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_qemu_disconnect1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_qemu_guest_shell1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_qemu_images1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_qemu_setup1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_qemu_start1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_qemu_status1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_qemu_stop1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_reboot1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_registry_install1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_registry_installed1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_registry_search1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_regression_baseline1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_regression_check1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_regression_history1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_resolve_intents1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_restart_app1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_result_drop1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_result_get1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_result_list1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_reverse1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_reverse_remove1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_revoke_permission1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_ril_poll1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_ril_start1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_ril_stop1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_rm1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_root_shell1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Addedadb_runtime_audit
    • Changedadb_screen1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_screen_size1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_screen_state1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_screencap1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_screencap_annotated1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_screenrecord_start1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_screenrecord_stop1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_screenshot_baseline1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_screenshot_compressed1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_screenshot_diff1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_screenshot_history1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_scroll_until1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_selinux_denials1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_selinux_status1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_sensor_read1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_settings_get1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_settings_put1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Addedadb_shannon_session
    • Changedadb_shell1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_signal_detail1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_snapshot_capture1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_snapshot_compare1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_snapshot_restore_settings1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Addedadb_sqlite_inspect
    • Changedadb_start_activity1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_start_app1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_tap_element1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_tcpdump_start1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_tcpdump_stop1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_tcpip1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_telephony1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_test_gen_from_intents1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_test_gen_from_ui1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_test_gen_save1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_test_session_end1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_test_session_start1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_test_step1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_thermal_compare1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_thermal_snapshot1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_top1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_tunnel_close1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_tunnel_list1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_tunnel_open1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_ui_dump1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_ui_find1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_uninstall1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_wait_element1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_wait_stable1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Addedadb_wear_datalayer_preflight
    • Changedadb_wifi1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_wifi_firmware1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_workflow_list1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_workflow_run1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadb_workflow_validate1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
  2. 193 tool updatesv1.1.3
    • Changedadb_a11y_audit1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_a11y_touch_targets1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_a11y_tree1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_airplane_cycle1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_airplane_mode1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_apex_list1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_at_batch1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_at_cross_validate1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_at_detect1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_at_probe1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_at_send1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_baseband_info3 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / result_handle
        Added value: +{
        +  "description": "Optional. If provided, store this tool's result under `result://<tool>/<name>` for retrieval after compaction. Name must be 1-32 chars, [a-zA-Z0-9_-]. Existing handles with the same tool+name are overwritten. Use adb_result_list to see active handles, adb_result_get or the MCP Resource URI to retrieve.",
        +  "maxLength": 32,
        +  "minLength": 1,
        +  "pattern": "^[a-zA-Z0-9_-]+$",
        +  "type": "string"
        +}
      • addedInput schema / properties / result_handle_ttl
        Added value: +{
        +  "description": "Optional. TTL in seconds for the result handle (60 to 604800). Default 43200 (12 hours). Ignored if result_handle is not provided.",
        +  "maximum": 604800,
        +  "minimum": 60,
        +  "type": "integer"
        +}
    • Changedadb_batch_actions3 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • removedInput schema / properties / actions / items / additionalProperties
        Removed value: -false
      • changedInput schema / properties / actions / items / properties / type / description
        Previous value: -"Action type"New value: +"Action type — one of: tap, swipe, fling, long_press, double_tap, keyevent, text, drag, pinch, back, home, sleep. The args field documents the expected argument format per type."
    • Changedadb_battery1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_battery_drain1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_bluetooth_firmware2 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / maxLines
        Added value: +{
        +  "default": 300,
        +  "description": "Lines of dumpsys output to inspect (50-2000, default 300). Raise for verbose vendor builds.",
        +  "maximum": 2000,
        +  "minimum": 50,
        +  "type": "integer"
        +}
    • Changedadb_bugreport1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_build_and_install2 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / timeout
        Added value: +{
        +  "default": 300000,
        +  "description": "Build+install timeout in milliseconds (30s-30min, default 5min). V5 fix.",
        +  "maximum": 1800000,
        +  "minimum": 30000,
        +  "type": "integer"
        +}
    • Changedadb_carrier_config1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_cat1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_cell_identity1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_ci_device_ready1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_ci_run_tests1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_ci_wait_boot1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_clear_data3 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / confirm
        Added value: +{
        +  "description": "Must equal packageName to confirm the destructive operation. AP5 fix: prevents accidental data loss from misclicks/mistyped invocations.",
        +  "type": "string"
        +}
      • changedInput schema / properties / packageName / description
        Previous value: -"Package name"New value: +"Package name (e.g., 'com.example.app')"
    • Changedadb_clipboard1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_connect2 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / host / pattern
        Added value: +"^(?:\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}|\\[[0-9a-fA-F:]+\\]|[a-zA-Z0-9][a-zA-Z0-9.-]*):\\d{1,5}$"
    • Changedadb_crash_logs1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_current_activity1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_device_info1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_device_state1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_disconnect2 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / host / pattern
        Added value: +"^(?:\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}|\\[[0-9a-fA-F:]+\\]|[a-zA-Z0-9][a-zA-Z0-9.-]*):\\d{1,5}$"
    • Changedadb_dumpsys3 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / result_handle
        Added value: +{
        +  "description": "Optional. If provided, store this tool's result under `result://<tool>/<name>` for retrieval after compaction. Name must be 1-32 chars, [a-zA-Z0-9_-]. Existing handles with the same tool+name are overwritten. Use adb_result_list to see active handles, adb_result_get or the MCP Resource URI to retrieve.",
        +  "maxLength": 32,
        +  "minLength": 1,
        +  "pattern": "^[a-zA-Z0-9_-]+$",
        +  "type": "string"
        +}
      • addedInput schema / properties / result_handle_ttl
        Added value: +{
        +  "description": "Optional. TTL in seconds for the result handle (60 to 604800). Default 43200 (12 hours). Ignored if result_handle is not provided.",
        +  "maximum": 604800,
        +  "minimum": 60,
        +  "type": "integer"
        +}
    • Changedadb_emulator_start1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_emulator_stop1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_extract_apks1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_farm_matrix1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_farm_results1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_farm_run3 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / execTimeoutMs
        Added value: +{
        +  "default": 600000,
        +  "description": "Local execFile timeout for the gcloud invocation in ms (1min-60min, default 10min). Y4 fix: bigger device matrices or larger APKs can plausibly exceed the previous hardcoded 10min.",
        +  "maximum": 3600000,
        +  "minimum": 60000,
        +  "type": "integer"
        +}
      • changedInput schema / properties / timeout / description
        Previous value: -"Test timeout (e.g., '300s', '10m')"New value: +"Test timeout passed to gcloud --timeout (e.g., '300s', '10m'). This is the LAB-side timeout."
    • Changedadb_file_checksum1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_file_chmod1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_file_chown1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_file_copy1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_file_fsinfo1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_file_move1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_file_replace1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_file_stat1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_file_touch1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_file_write1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_find3 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / result_handle
        Added value: +{
        +  "description": "Optional. If provided, store this tool's result under `result://<tool>/<name>` for retrieval after compaction. Name must be 1-32 chars, [a-zA-Z0-9_-]. Existing handles with the same tool+name are overwritten. Use adb_result_list to see active handles, adb_result_get or the MCP Resource URI to retrieve.",
        +  "maxLength": 32,
        +  "minLength": 1,
        +  "pattern": "^[a-zA-Z0-9_-]+$",
        +  "type": "string"
        +}
      • addedInput schema / properties / result_handle_ttl
        Added value: +{
        +  "description": "Optional. TTL in seconds for the result handle (60 to 604800). Default 43200 (12 hours). Ignored if result_handle is not provided.",
        +  "maximum": 604800,
        +  "minimum": 60,
        +  "type": "integer"
        +}
    • Changedadb_firmware_diff3 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / result_handle
        Added value: +{
        +  "description": "Optional. If provided, store this tool's result under `result://<tool>/<name>` for retrieval after compaction. Name must be 1-32 chars, [a-zA-Z0-9_-]. Existing handles with the same tool+name are overwritten. Use adb_result_list to see active handles, adb_result_get or the MCP Resource URI to retrieve.",
        +  "maxLength": 32,
        +  "minLength": 1,
        +  "pattern": "^[a-zA-Z0-9_-]+$",
        +  "type": "string"
        +}
      • addedInput schema / properties / result_handle_ttl
        Added value: +{
        +  "description": "Optional. TTL in seconds for the result handle (60 to 604800). Default 43200 (12 hours). Ignored if result_handle is not provided.",
        +  "maximum": 604800,
        +  "minimum": 60,
        +  "type": "integer"
        +}
    • Changedadb_firmware_history1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_firmware_probe1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_force_stop1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_forward5 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedInput schema / properties / local / description
        Previous value: -"Local (host) spec, e.g., 'tcp:8080'"New value: +"Local (host) spec, e.g., 'tcp:8080'. AF2 fix: format-validated."
      • addedInput schema / properties / local / pattern
        Added value: +"^(tcp:\\d{1,5}|localabstract:[A-Za-z0-9_./-]+|localreserved:[A-Za-z0-9_./-]+|localfilesystem:[A-Za-z0-9_./-]+|dev:[A-Za-z0-9_./-]+|jdwp:\\d+)$"
      • changedInput schema / properties / remote / description
        Previous value: -"Remote (device) spec, e.g., 'tcp:8080' or 'localabstract:app_socket'"New value: +"Remote (device) spec, e.g., 'tcp:8080' or 'localabstract:app_socket'. AF2 fix: format-validated."
      • addedInput schema / properties / remote / pattern
        Added value: +"^(tcp:\\d{1,5}|localabstract:[A-Za-z0-9_./-]+|localreserved:[A-Za-z0-9_./-]+|localfilesystem:[A-Za-z0-9_./-]+|dev:[A-Za-z0-9_./-]+|jdwp:\\d+)$"
    • Changedadb_forward_list1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_forward_remove3 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedInput schema / properties / local / description
        Previous value: -"Local spec to remove (e.g., 'tcp:8080'). Omit to remove all forwards."New value: +"Local spec to remove (e.g., 'tcp:8080'). Omit to remove all forwards. AF2 fix: format-validated."
      • addedInput schema / properties / local / pattern
        Added value: +"^(tcp:\\d{1,5}|localabstract:[A-Za-z0-9_./-]+|localreserved:[A-Za-z0-9_./-]+|localfilesystem:[A-Za-z0-9_./-]+|dev:[A-Za-z0-9_./-]+|jdwp:\\d+)$"
    • Changedadb_getprop1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_gps_firmware1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_gradle5 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedInput schema / properties / args / description
        Previous value: -"Additional Gradle arguments"New value: +"Additional Gradle arguments as an array of strings (e.g., ['-Pversion=1.0', '--info']). Use an array — not a space-separated string — so arguments containing quoted values are preserved as single tokens."
      • addedInput schema / properties / args / items
        Added value: +{
        +  "type": "string"
        +}
      • changedInput schema / properties / args / type
        Previous value: -"string"New value: +"array"
      • addedInput schema / properties / timeout
        Added value: +{
        +  "default": 300000,
        +  "description": "Build timeout in milliseconds (30s-30min, default 5min). V5 fix: large multi-module Android projects (60+ modules) routinely exceed the default; raise this for clean builds of bigger projects.",
        +  "maximum": 1800000,
        +  "minimum": 30000,
        +  "type": "integer"
        +}
    • Changedadb_grant_permission2 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedInput schema / properties / packageName / description
        Previous value: -"Package name"New value: +"Package name (e.g., 'com.example.app')"
    • Changedadb_grep3 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / result_handle
        Added value: +{
        +  "description": "Optional. If provided, store this tool's result under `result://<tool>/<name>` for retrieval after compaction. Name must be 1-32 chars, [a-zA-Z0-9_-]. Existing handles with the same tool+name are overwritten. Use adb_result_list to see active handles, adb_result_get or the MCP Resource URI to retrieve.",
        +  "maxLength": 32,
        +  "minLength": 1,
        +  "pattern": "^[a-zA-Z0-9_-]+$",
        +  "type": "string"
        +}
      • addedInput schema / properties / result_handle_ttl
        Added value: +{
        +  "description": "Optional. TTL in seconds for the result handle (60 to 604800). Default 43200 (12 hours). Ignored if result_handle is not provided.",
        +  "maximum": 604800,
        +  "minimum": 60,
        +  "type": "integer"
        +}
    • Changedadb_health_check1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_heap_dump1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_iio_read1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_input2 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedInput schema / properties / type / description
        Previous value: -"Input type"New value: +"Input type — one of: tap (single touch), swipe (drag between two points), text (literal string entry), keyevent (Android key code like KEYCODE_HOME). The args field documents the expected argument format per type."
    • Changedadb_input_double_tap1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_input_drag1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_input_fling1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_input_long_press1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_input_pinch1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_input_text1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_install1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_install_bundle1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_list_packages1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_list_permissions1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_list_splits1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_location1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_logcat3 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / result_handle
        Added value: +{
        +  "description": "Optional. If provided, store this tool's result under `result://<tool>/<name>` for retrieval after compaction. Name must be 1-32 chars, [a-zA-Z0-9_-]. Existing handles with the same tool+name are overwritten. Use adb_result_list to see active handles, adb_result_get or the MCP Resource URI to retrieve.",
        +  "maxLength": 32,
        +  "minLength": 1,
        +  "pattern": "^[a-zA-Z0-9_-]+$",
        +  "type": "string"
        +}
      • addedInput schema / properties / result_handle_ttl
        Added value: +{
        +  "description": "Optional. TTL in seconds for the result handle (60 to 604800). Default 43200 (12 hours). Ignored if result_handle is not provided.",
        +  "maximum": 604800,
        +  "minimum": 60,
        +  "type": "integer"
        +}
    • Changedadb_logcat_clear1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_logcat_crash1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_logcat_poll3 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / result_handle
        Added value: +{
        +  "description": "Optional. If provided, store this tool's result under `result://<tool>/<name>` for retrieval after compaction. Name must be 1-32 chars, [a-zA-Z0-9_-]. Existing handles with the same tool+name are overwritten. Use adb_result_list to see active handles, adb_result_get or the MCP Resource URI to retrieve.",
        +  "maxLength": 32,
        +  "minLength": 1,
        +  "pattern": "^[a-zA-Z0-9_-]+$",
        +  "type": "string"
        +}
      • addedInput schema / properties / result_handle_ttl
        Added value: +{
        +  "description": "Optional. TTL in seconds for the result handle (60 to 604800). Default 43200 (12 hours). Ignored if result_handle is not provided.",
        +  "maximum": 604800,
        +  "minimum": 60,
        +  "type": "integer"
        +}
    • Changedadb_logcat_start3 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedInput schema / properties / tag / description
        Previous value: -"Filter by tag (e.g., 'MyApp')"New value: +"Filter by tag (e.g., 'MyApp'). Must match /^[a-zA-Z0-9_]+$/ — Android tags are identifier-shaped in practice."
      • addedInput schema / properties / tag / pattern
        Added value: +"^[a-zA-Z0-9_]+$"
    • Changedadb_logcat_stop1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_ls1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_market_export2 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedInput schema / properties / version / description
        Previous value: -"Version string"New value: +"Version string (semver-style, e.g., '1.2.3'). Defaults to '1.0.0' if omitted. Increment when publishing an updated workflow so registry consumers can detect changes."
    • Changedadb_market_install1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_market_search1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_mirror_start3 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedInput schema / properties / bitrate / description
        Previous value: -"Video bitrate (e.g., '4M', '8M', '2M')"New value: +"Video bitrate (e.g., '4M', '8M', '2M'). AK2 fix: format-validated at schema layer."
      • addedInput schema / properties / bitrate / pattern
        Added value: +"^\\d+(\\.\\d+)?[KMG]?$"
    • Changedadb_mirror_stop1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_mkdir1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_mobile_data1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_modem_logs1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_multi_compare1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_multi_install1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_multi_shell1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_multi_test2 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • removedInput schema / properties / commands / items / additionalProperties
        Removed value: -false
    • Changedadb_neighboring_cells1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_network1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_network_auto_connect1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_network_connections1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_network_device_ip1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_network_scan1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_nfc_firmware2 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / maxLines
        Added value: +{
        +  "default": 200,
        +  "description": "Lines of dumpsys output to inspect (50-2000, default 200). Raise for verbose vendor builds.",
        +  "maximum": 2000,
        +  "minimum": 50,
        +  "type": "integer"
        +}
    • Changedadb_notifications1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_open_url1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_orientation1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_ota_check1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_ota_fingerprint1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_ota_history1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_package_info2 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedInput schema / properties / packageName / description
        Previous value: -"Package name"New value: +"Package name (e.g., 'com.example.app')"
    • Changedadb_pair2 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / host / pattern
        Added value: +"^(?:\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}|\\[[0-9a-fA-F:]+\\]|[a-zA-Z0-9][a-zA-Z0-9.-]*):\\d{1,5}$"
    • Changedadb_perf_snapshot1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_permission_audit3 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedInput schema / properties / packageName / description
        Previous value: -"Package name to audit (e.g., 'com.example.app')"New value: +"Package name to audit (e.g., 'com.example.app'). AZ7 fix: enforces Java-identifier shape so injection attempts are rejected at the schema layer before reaching validateShellArg."
      • addedInput schema / properties / packageName / pattern
        Added value: +"^[a-zA-Z][a-zA-Z0-9_]*(\\.[a-zA-Z][a-zA-Z0-9_]*)+$"
    • Changedadb_profile_detect1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_profile_save1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_pull1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_push1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_qemu_connect1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_qemu_disconnect1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_qemu_guest_shell1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_qemu_images1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_qemu_setup1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_qemu_start1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_qemu_stop1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_reboot1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_registry_install1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_registry_search1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_regression_baseline1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_regression_check1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_regression_history1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_resolve_intents1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_restart_app1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Addedadb_result_drop
    • Addedadb_result_get
    • Addedadb_result_list
    • Changedadb_reverse5 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedInput schema / properties / local / description
        Previous value: -"Local (host) spec, e.g., 'tcp:3000'"New value: +"Local (host) spec, e.g., 'tcp:3000'. AF2 fix: format-validated."
      • addedInput schema / properties / local / pattern
        Added value: +"^(tcp:\\d{1,5}|localabstract:[A-Za-z0-9_./-]+|localreserved:[A-Za-z0-9_./-]+|localfilesystem:[A-Za-z0-9_./-]+|dev:[A-Za-z0-9_./-]+|jdwp:\\d+)$"
      • changedInput schema / properties / remote / description
        Previous value: -"Remote (device) spec, e.g., 'tcp:3000'"New value: +"Remote (device) spec, e.g., 'tcp:3000'. AF2 fix: format-validated."
      • addedInput schema / properties / remote / pattern
        Added value: +"^(tcp:\\d{1,5}|localabstract:[A-Za-z0-9_./-]+|localreserved:[A-Za-z0-9_./-]+|localfilesystem:[A-Za-z0-9_./-]+|dev:[A-Za-z0-9_./-]+|jdwp:\\d+)$"
    • Changedadb_reverse_remove3 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedInput schema / properties / remote / description
        Previous value: -"Remote spec to remove (e.g., 'tcp:3000'). Omit to remove all reverse forwards."New value: +"Remote spec to remove (e.g., 'tcp:3000'). Omit to remove all reverse forwards. AF2 fix: format-validated."
      • addedInput schema / properties / remote / pattern
        Added value: +"^(tcp:\\d{1,5}|localabstract:[A-Za-z0-9_./-]+|localreserved:[A-Za-z0-9_./-]+|localfilesystem:[A-Za-z0-9_./-]+|dev:[A-Za-z0-9_./-]+|jdwp:\\d+)$"
    • Changedadb_revoke_permission1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_ril_poll1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_ril_start1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_ril_stop1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_rm1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_root_shell1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_screen2 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedInput schema / properties / action / description
        Previous value: -"Screen action"New value: +"Screen action — one of: wake (power on + dismiss keyguard if no PIN), sleep (power off), toggle (flip current state), lock (force keyguard), unlock (dismiss keyguard, with PIN if supplied)"
    • Changedadb_screen_size1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_screen_state1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_screencap1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_screencap_annotated1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_screenrecord_start1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_screenrecord_stop1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_screenshot_baseline3 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / result_handle
        Added value: +{
        +  "description": "Optional. If provided, store this tool's result under `result://<tool>/<name>` for retrieval after compaction. Name must be 1-32 chars, [a-zA-Z0-9_-]. Existing handles with the same tool+name are overwritten. Use adb_result_list to see active handles, adb_result_get or the MCP Resource URI to retrieve.",
        +  "maxLength": 32,
        +  "minLength": 1,
        +  "pattern": "^[a-zA-Z0-9_-]+$",
        +  "type": "string"
        +}
      • addedInput schema / properties / result_handle_ttl
        Added value: +{
        +  "description": "Optional. TTL in seconds for the result handle (60 to 604800). Default 43200 (12 hours). Ignored if result_handle is not provided.",
        +  "maximum": 604800,
        +  "minimum": 60,
        +  "type": "integer"
        +}
    • Changedadb_screenshot_compressed1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_screenshot_diff3 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / result_handle
        Added value: +{
        +  "description": "Optional. If provided, store this tool's result under `result://<tool>/<name>` for retrieval after compaction. Name must be 1-32 chars, [a-zA-Z0-9_-]. Existing handles with the same tool+name are overwritten. Use adb_result_list to see active handles, adb_result_get or the MCP Resource URI to retrieve.",
        +  "maxLength": 32,
        +  "minLength": 1,
        +  "pattern": "^[a-zA-Z0-9_-]+$",
        +  "type": "string"
        +}
      • addedInput schema / properties / result_handle_ttl
        Added value: +{
        +  "description": "Optional. TTL in seconds for the result handle (60 to 604800). Default 43200 (12 hours). Ignored if result_handle is not provided.",
        +  "maximum": 604800,
        +  "minimum": 60,
        +  "type": "integer"
        +}
    • Changedadb_screenshot_history2 fields changed
      • addedInput schema / properties / result_handle
        Added value: +{
        +  "description": "Optional. If provided, store this tool's result under `result://<tool>/<name>` for retrieval after compaction. Name must be 1-32 chars, [a-zA-Z0-9_-]. Existing handles with the same tool+name are overwritten. Use adb_result_list to see active handles, adb_result_get or the MCP Resource URI to retrieve.",
        +  "maxLength": 32,
        +  "minLength": 1,
        +  "pattern": "^[a-zA-Z0-9_-]+$",
        +  "type": "string"
        +}
      • addedInput schema / properties / result_handle_ttl
        Added value: +{
        +  "description": "Optional. TTL in seconds for the result handle (60 to 604800). Default 43200 (12 hours). Ignored if result_handle is not provided.",
        +  "maximum": 604800,
        +  "minimum": 60,
        +  "type": "integer"
        +}
    • Changedadb_scroll_until1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_selinux_denials1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_selinux_status1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_sensor_read1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_settings_get2 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / key / minLength
        Added value: +1
    • Changedadb_settings_put4 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedInput schema / properties / key / description
        Previous value: -"Setting key"New value: +"Setting key (e.g., 'screen_brightness' for system namespace, 'wifi_on' or 'airplane_mode_on' for global, 'location_providers_allowed' for secure). Use `adb_shell` with `settings list <namespace>` to enumerate available keys for a device."
      • addedInput schema / properties / key / minLength
        Added value: +1
      • changedInput schema / properties / value / description
        Previous value: -"Value to set"New value: +"Value to write. Type depends on the key — typically a string, integer, or 0/1 for booleans. The setting framework accepts everything as a string and parses on read."
    • Changedadb_shell1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_signal_detail1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_snapshot_capture1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_snapshot_compare1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_snapshot_restore_settings1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_start_activity1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_start_app1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_tap_element1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_tcpdump_start1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_tcpdump_stop1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_tcpip1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_telephony1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_test_gen_from_intents1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_test_gen_from_ui1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_test_gen_save1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_test_session_start1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_test_step1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_thermal_compare1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_thermal_snapshot1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_top1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Addedadb_tunnel_close
    • Addedadb_tunnel_list
    • Addedadb_tunnel_open
    • Changedadb_ui_dump1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_ui_find1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_uninstall1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_wait_element1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_wait_stable1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_wifi1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedadb_wifi_firmware2 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / maxLines
        Added value: +{
        +  "default": 200,
        +  "description": "Lines of dumpsys output to inspect (50-2000, default 200). Raise for verbose vendor builds where firmware info appears late in dumpsys output.",
        +  "maximum": 2000,
        +  "minimum": 50,
        +  "type": "integer"
        +}
    • Changedadb_workflow_run2 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / variables / propertyNames
        Added value: +{
        +  "type": "string"
        +}
    • Changedadb_workflow_validate1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
  3. 198 tool updatesv1.1.1
    • First observedadb_a11y_audit
    • First observedadb_a11y_touch_targets
    • First observedadb_a11y_tree
    • First observedadb_airplane_cycle
    • First observedadb_airplane_mode
    • First observedadb_apex_list
    • First observedadb_at_batch
    • First observedadb_at_cross_validate
    • First observedadb_at_detect
    • First observedadb_at_probe
    • First observedadb_at_send
    • First observedadb_avd_list
    • First observedadb_baseband_info
    • First observedadb_batch_actions
    • First observedadb_battery
    • First observedadb_battery_drain
    • First observedadb_bluetooth_firmware
    • First observedadb_bugreport
    • First observedadb_build_and_install
    • First observedadb_carrier_config
    • First observedadb_cat
    • First observedadb_cell_identity
    • First observedadb_ci_device_ready
    • First observedadb_ci_run_tests
    • First observedadb_ci_wait_boot
    • First observedadb_clear_data
    • First observedadb_clipboard
    • First observedadb_connect
    • First observedadb_crash_logs
    • First observedadb_current_activity
    • First observedadb_device_info
    • First observedadb_device_state
    • First observedadb_devices
    • First observedadb_disconnect
    • First observedadb_dumpsys
    • First observedadb_emulator_start
    • First observedadb_emulator_stop
    • First observedadb_extract_apks
    • First observedadb_farm_matrix
    • First observedadb_farm_results
    • First observedadb_farm_run
    • First observedadb_file_checksum
    • First observedadb_file_chmod
    • First observedadb_file_chown
    • First observedadb_file_copy
    • First observedadb_file_fsinfo
    • First observedadb_file_move
    • First observedadb_file_replace
    • First observedadb_file_stat
    • First observedadb_file_touch
    • First observedadb_file_write
    • First observedadb_find
    • First observedadb_firmware_diff
    • First observedadb_firmware_history
    • First observedadb_firmware_probe
    • First observedadb_force_stop
    • First observedadb_forward
    • First observedadb_forward_list
    • First observedadb_forward_remove
    • First observedadb_getprop
    • First observedadb_gps_firmware
    • First observedadb_gradle
    • First observedadb_grant_permission
    • First observedadb_grep
    • First observedadb_health_check
    • First observedadb_heap_dump
    • First observedadb_iio_read
    • First observedadb_input
    • First observedadb_input_double_tap
    • First observedadb_input_drag
    • First observedadb_input_fling
    • First observedadb_input_long_press
    • First observedadb_input_pinch
    • First observedadb_input_text
    • First observedadb_install
    • First observedadb_install_bundle
    • First observedadb_list_packages
    • First observedadb_list_permissions
    • First observedadb_list_splits
    • First observedadb_location
    • First observedadb_logcat
    • First observedadb_logcat_clear
    • First observedadb_logcat_crash
    • First observedadb_logcat_poll
    • First observedadb_logcat_sessions
    • First observedadb_logcat_start
    • First observedadb_logcat_stop
    • First observedadb_ls
    • First observedadb_market_export
    • First observedadb_market_install
    • First observedadb_market_search
    • First observedadb_mirror_start
    • First observedadb_mirror_status
    • First observedadb_mirror_stop
    • First observedadb_mkdir
    • First observedadb_mobile_data
    • First observedadb_modem_logs
    • First observedadb_multi_compare
    • First observedadb_multi_install
    • First observedadb_multi_shell
    • First observedadb_multi_test
    • First observedadb_neighboring_cells
    • First observedadb_network
    • First observedadb_network_auto_connect
    • First observedadb_network_connections
    • First observedadb_network_device_ip
    • First observedadb_network_scan
    • First observedadb_nfc_firmware
    • First observedadb_notifications
    • First observedadb_open_url
    • First observedadb_orientation
    • First observedadb_ota_check
    • First observedadb_ota_fingerprint
    • First observedadb_ota_history
    • First observedadb_package_info
    • First observedadb_pair
    • First observedadb_perf_snapshot
    • First observedadb_permission_audit
    • First observedadb_plugin_info
    • First observedadb_plugin_list
    • First observedadb_profile_detect
    • First observedadb_profile_list
    • First observedadb_profile_save
    • First observedadb_pull
    • First observedadb_push
    • First observedadb_qemu_connect
    • First observedadb_qemu_disconnect
    • First observedadb_qemu_guest_shell
    • First observedadb_qemu_images
    • First observedadb_qemu_setup
    • First observedadb_qemu_start
    • First observedadb_qemu_status
    • First observedadb_qemu_stop
    • First observedadb_reboot
    • First observedadb_registry_install
    • First observedadb_registry_installed
    • First observedadb_registry_search
    • First observedadb_regression_baseline
    • First observedadb_regression_check
    • First observedadb_regression_history
    • First observedadb_resolve_intents
    • First observedadb_restart_app
    • First observedadb_reverse
    • First observedadb_reverse_remove
    • First observedadb_revoke_permission
    • First observedadb_ril_poll
    • First observedadb_ril_start
    • First observedadb_ril_stop
    • First observedadb_rm
    • First observedadb_root_shell
    • First observedadb_screen
    • First observedadb_screen_size
    • First observedadb_screen_state
    • First observedadb_screencap
    • First observedadb_screencap_annotated
    • First observedadb_screenrecord_start
    • First observedadb_screenrecord_stop
    • First observedadb_screenshot_baseline
    • First observedadb_screenshot_compressed
    • First observedadb_screenshot_diff
    • First observedadb_screenshot_history
    • First observedadb_scroll_until
    • First observedadb_selinux_denials
    • First observedadb_selinux_status
    • First observedadb_sensor_read
    • First observedadb_settings_get
    • First observedadb_settings_put
    • First observedadb_shell
    • First observedadb_signal_detail
    • First observedadb_snapshot_capture
    • First observedadb_snapshot_compare
    • First observedadb_snapshot_restore_settings
    • First observedadb_start_activity
    • First observedadb_start_app
    • First observedadb_tap_element
    • First observedadb_tcpdump_start
    • First observedadb_tcpdump_stop
    • First observedadb_tcpip
    • First observedadb_telephony
    • First observedadb_test_gen_from_intents
    • First observedadb_test_gen_from_ui
    • First observedadb_test_gen_save
    • First observedadb_test_session_end
    • First observedadb_test_session_start
    • First observedadb_test_step
    • First observedadb_thermal_compare
    • First observedadb_thermal_snapshot
    • First observedadb_top
    • First observedadb_ui_dump
    • First observedadb_ui_find
    • First observedadb_uninstall
    • First observedadb_wait_element
    • First observedadb_wait_stable
    • First observedadb_wifi
    • First observedadb_wifi_firmware
    • First observedadb_workflow_list
    • First observedadb_workflow_run
    • First observedadb_workflow_validate

TDQS

B3.1/5.0

Scored across 209 tools

Disambiguation2/5

Many tools overlap in purpose: adb_screencap, adb_screencap_annotated, adb_screenshot_compressed, adb_screenshot_baseline, adb_screen_state, adb_device_state, and adb_current_activity all partially overlap on screenshots/state. Likewise adb_input vs. adb_input_tap/swipe/text/drag/fling/long_press/double_tap/pinch/batch_actions, and adb_health_check vs. adb_runtime_audit vs. adb_ci_device_ready create real selection ambiguity. Descriptions help, but an agent can easily pick a plausible-but-suboptimal tool.

Naming Consistency4/5

Nearly all tools use the adb_ prefix with snake_case and mostly action-oriented names, which is predictable. Minor deviations exist in ordering and abstraction level (adb_file_chmod vs. adb_chmod-style naming, adb_screen vs. adb_screencap, and mixed resource/action ordering), but the convention is still readable.

Tool Count1/5

209 tools is far beyond what is appropriate even for a broad ADB automation platform, and many tools are narrow wrappers or convenience combinations. The surface is large enough to overwhelm tool selection and materially increases the chance of misselection.

Completeness4/5

Coverage is unusually broad: device management, file operations, UI automation, input, networking, telephony/radio, firmware, QEMU, testing, workflows, and plugins are all represented. There are minor lifecycle gaps such as deletion/cleanup for saved profiles, baselines, or workflows, but core workflows are well covered.

Maintenance

ActivityNo data
ResponsivenessSyncing

Related MCP Connectors

Related MCP Servers

  • F
    license
    A
    quality
    C
    maintenance
    A MCP server that enables AI assistants to control Android devices via ADB, supporting device info, screen control, input simulation, app management, shell execution, file transfer, and UI parsing.
    20
    -
  • F
    license
    Not graded
    quality
    D
    maintenance
    A powerful MCP server that provides comprehensive Android device automation capabilities through ADB, enabling AI agents to interact with Android devices for testing, automation, and device control tasks.
    1
    -
  • A
    license
    Not graded
    quality
    D
    maintenance
    An MCP server that wraps Android ADB functionality into AI assistant tools, enabling device management, shell execution, file operations, app management, media capture, and log analysis via natural language.
    22 npm
    2
    MIT