android-root-mcp
Provides tools for perceiving and controlling a rooted Android device: reads the OS-reported UI hierarchy to identify controls, performs taps, swipes, and key events through native input injection, and learns the effects of unnamed controls by probing and remembering them.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@android-root-mcpOpen Settings, tap Wi-Fi, and tell me which networks are listed."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
android-root-mcp
An MCP server that drives a rooted Android phone the way a person does: it reads what the operating system reports, and it remembers what happened the last time it touched something.
Not a screenshot pipeline. Not OCR. Not a blind coordinate tapper.
flowchart LR
A[AI agent] -->|MCP tool call| B[android-root-mcp]
B --> C[Perception<br/>ui_semantics.py]
B --> D[Action<br/>native_input.py]
B --> E[Learning<br/>probe_engine.py]
C --> F[(one hierarchy dump)]
D --> G["/data/local/tmp/pfdaemon<br/>uid 0 · /dev/input/event7"]
E --> H[(control_memory.json)]
F --> I[Android device]
G --> I
H --> CWhy this exists
Every agent that touches Android hits the same wall, and it is not a latency wall. It is an information wall.
We audited how much the operating system actually tells a controller, across five real apps — 889 hierarchy nodes, every app foreground-verified before dumping:
app | tappable nodes | named by the OS | bare |
launcher ( | 15 | 93.3 % | 6.7 % |
notes ( | 7 | 100 % | 0 % |
browser ( | 24 | 41.7 % | 58.3 % |
settings ( | 14 | 21.4 % | 78.6 % |
taobao ( | 44 | 25.0 % | 75.0 % |
WeChat ( | 0 | — | 100 % |
Only 43.3 % of tappable controls carry any OS label. 56.7 % carry none.
WeChat reports 44 hierarchy nodes with zero
clickable="true". It draws custom views and handles touch inonTouchEventwithout ever callingsetClickable(true). Any agent that enumerates controls by theclickableflag sees WeChat as an empty screen — and reports it confidently.Six richer accessibility fields never reach the dump on this ROM:
tooltip-text,state-description,pane-title,actions/action-list,input-type,important-for-accessibility.hintappeared twice in 889 nodes.dumpsys activity topyields no view ids and no text on this ROM (verified:mID=,mText,android:textall zero lines).
An agent built on "screenshot → guess → tap" is therefore guessing on more than half the screen. This server takes the three positions that remain available: read what the OS did say, watch what a control actually does, and say "unknown" when it is unknown.
Related MCP server: MobileMCP
What it costs
Measured through the real tool paths on a Xiaomi 2210132C (HyperOS 3.0.310, Android 16 / SDK 36, 1080×2400, KernelSU).
operation | before | after |
tap | 95–114 ms ( | 40.8 ms |
swipe (300 ms gesture) | 664 ms | 310.9 ms — 300 ms gesture + 11 ms overhead |
key event | 75–114 ms | 16.5–41 ms |
5-step workflow, no UI return | 663 ms | 215.9 ms |
5-step workflow with UI return | 1028 ms | 597.4 ms |
| — | 231 ms |
full hierarchy snapshot | — | ~330 ms |
| 1895 ms | raw path 615 ms, host decode 0.00 ms |
The "before" column is the ordinary path: adb shell input tap starts a JVM on every single call. The "after" column comes from a resident daemon that writes packed input_event structs straight to the touchscreen node.
Architecture
1. Perception — src/ui_semantics.py
One hierarchy dump becomes typed, addressable controls:
field | meaning |
|
|
| best human name, and where it came from: |
| only capabilities the OS actually reported for that node |
| stable identity — contains no coordinates: |
|
|
|
|
interactive_mode="inferred" recovers the controls the clickable flag loses — the WeChat case — while excluding full-viewport containers and sub-pixel dots. Inferred candidates are marked needs_probe and confidence-capped, so a caller can always tell a system fact from a deduction.
Cost: 51.1 ms for 2000 nodes, deterministic to the byte across runs.
2. Action — src/native_input.py + native/pfdaemon
A resident root daemon (app_process, uid 0, setsid) writes packed input_event bursts to /dev/input/event7. ABS maxima are read from the hardware at startup (maxX=14399, maxY=31999, 13.333× scale) — not hardcoded. Fallback chain: injectInputEvent (binds as UID 2000, no root needed) → uiautomator2 → adb input.
The agent-facing verb returns the interaction and its consequence in one round trip:
act(action="tap", selector={"semantic_key": "com.miui.home|button|天气"})
# -> {"success": true,
# "effect": "opened a different screen (activity changed to ...)",
# "snapshot_id": "...", "current_package": "..."}Observation reuses the snapshot already cached from the caller's last look, so reporting what changed costs one capture, not two. There is no separate "now perceive again" step to forget.
3. Learning — src/probe_engine.py + src/control_memory.py
This is the answer to the 56.7 %. For a control the OS refuses to name, the server does what a person does: it touches the thing once and remembers.
Pick the highest-value unknown control on screen (unlabeled, not yet learned, content and bottom bars before system chrome).
Refuse anything destructive or financial — 删除 / 支付 / 退出登录 / uninstall / password fields — and record the refusal rather than pressing.
Tap it, diff the screen, persist the observed effect per
(package, activity, control identity).Later
ui_describecalls surface it aslearned_effect.
diff_screens classifies navigation / dialog_appeared / dialog_dismissed / scrolled / selection_changed / content_changed / no_visual_change. Any node added or removed is always reported, so no_visual_change strictly means nothing detectable differs — and it is never treated as proof that a control is inert.
Cost: 9.45 ms diffing 2000 × 2000 nodes.
Quick start
Requirements
adbonPATH(orADB_PATHpointing at it)A rooted device — KernelSU or Magisk. Root is a design requirement, not a convenience.
Python 3.10+ (developed and measured on 3.12)
Android SDK build-tools (
d8+android.jar) — only to build the native daemon
Install
git clone https://github.com/<you>/android-root-mcp.git
cd android-root-mcp
python -m pip install -e .
.\install.ps1 # optional helper: checks adb, root, python, SDKStart the native input daemon
# build, push, and start as root; prints the pidfile and the forwarded port
python native\run.py start
python native\verify.py ping # -> uid 0, route "devnode", touch /dev/input/event7If you skip this step the server still works — every gesture falls back to uiautomator2 and adb input — it is simply slower. Speed is the only thing you lose.
Point your MCP client at it
{
"mcpServers": {
"android-root": {
"command": "python",
"args": ["D:/Tools/android-root-mcp/src/server.py"],
"env": {
"ADB_PATH": "D:/Tools/platform-tools/adb.exe",
"ANDROID_MCP_STATE_DIR": "D:/Tools/android-root-mcp/state"
}
}
}
}First three calls
Perceive. Ask the OS what is on screen. This is the call that replaces screenshots.
{"name": "ui_describe", "arguments": {"max_controls": 40}}Returns a one-line summary, an ordered control list carrying role / label / actions / semantic_key / interactive_source, the screen structure (top bar, ordered bottom-nav labels, dialogs, scroll containers, primary action), and a coverage block telling you how much the OS actually named.
Act. Address a control by identity, not by pixel. The response tells you what happened.
{"name": "act", "arguments": {
"action": "tap",
"selector": {"semantic_key": "com.miui.home|button|天气"}
}}{ "success": true,
"effect": "opened a different screen (activity changed to ...)",
"effect_detail": { "classification": "navigation" },
"snapshot_id": "…", "current_package": "…" }Learn. Teach it the controls the OS will not name.
{"name": "learn", "arguments": {"budget": 2}}{ "success": true,
"rounds": [
{ "label": "天气",
"effect": "opened a different screen (activity changed to ...)",
"kind": "navigation" }
],
"memory": { "screens": 1, "controls": 1 } }Those learned effects are annotations on the next ui_describe — the same screen, now partly understood.
How this differs
screenshot + OCR + blind tap |
| android-root-mcp | |
How a control is identified | pixels | accessibility text | OS-reported role, label with provenance, stable |
When the OS has no label | OCR guess, often wrong | reports nothing |
|
Apps that never set | works, slowly | sees an empty screen |
|
Latency per tap | 1–2 s round trip | ~95–114 ms | 40.8 ms |
What a new screen costs | a screenshot into context | ~330 ms dump | one dump, typed, delta-addressable |
Persistent knowledge | none | none | per-app control memory on disk |
Fabrication | whatever the model infers | none | none — unlabeled stays unlabeled |
The distinction that matters: this server will tell you "I don't know what this control is, here is where it is, and here is what happened when I tapped it." That is more useful than a confident hallucination, and it is the only honest answer available for 56.7 % of real controls.
Safety design
No OCR, no template matching, no vision. Ever. Every semantic claim traces to a system-reported attribute or an observed consequence.
Nothing is fabricated. A control with no name gets
label: "". There is no "unknown button 3".Provenance is mandatory.
label_sourceandinteractive_sourcelet any caller separate a system fact from an inference, per field, per control.learnrefuses dangerous targets — delete, pay, log out, uninstall, password fields — and records the refusal instead of pressing. Absence of aclickableflag is never grounds for refusal; that is the condition it exists to resolve.Learned effects are observations, not claims — stored with
observed_atand the before/after snapshot ids they were derived from.
Honest limitations
These are real and you should read them before adopting this.
Unicode text does not go through the native daemon. HyperOS rejects key injection via
injectInputEvent, the touchscreen node carries no keyboard usage codes, and there is no root clipboard CLI on this ROM. Text uses uiautomator2set_text. Gestures are native; typing is not.Controls without a
semantic_keyuse a position-anchored geometric identity (~43 px bucket). A list scrolled further than that will re-learn the row. Keying on document order instead would survive scrolling but mis-attribute after any insertion — re-learning is the safer failure. Controls that do carry asemantic_keyare unaffected.Rotation other than 0 is implemented but unverified on this device.
A planned LSPosed module is designed but not built. It would read the live
Viewobject (including whether anOnClickListeneris attached) — the only route to naming controls that are invisible to both the accessibility dump and behavioural probing. Not shipped.The persistent adb-shell accelerator was measured slower than plain adb on this host (106 ms vs 66 ms per command) and is therefore gated off by default:
ANDROID_MCP_FASTPATH=1to enable.Root is required by design. This is not a sandboxed or user-consent automation tool.
Repository layout
path | contents |
| FastMCP entry point, tool registration, single-flight lock |
| perception layer: roles, labels, provenance, |
| snapshot cache, selector resolution, gestures, |
| client for the resident input daemon |
| screen diffing, probe selection, safety guard |
| persistent per-app control knowledge, atomic and bounded |
| the single adb subprocess primitive |
| live controller: transport, device selection, u2 session |
| root file / XML / SQLite / archive operations |
| app lifecycle, intents, permissions, settings |
| the input daemon ( |
| daemon lifecycle and the verification harness |
| binder bridge experiment (launch/focus/settings without JVM spawn) — not wired in |
|
|
| pytest suites: transport, automation, data, settings, MCP, stdio |
| full architecture write-up with the measurements |
| generated schema for all tools |
| install helpers and packaging |
Roughly 57 MCP tools across perception, action, workflows, app control, root data access, and device diagnostics.
Scope
This project automates devices you own and control. It requires root and it injects input at the kernel input-node level; treat it with the same care as any other privileged automation, and do not point it at hardware you are not authorised to operate.
中文简介
android-root-mcp 是一个 MCP 服务器,让 AI 真正"会用手机":不是截图、OCR、盲点坐标,而是读系统上报的控件,再靠动手观察学会系统不肯命名的那些。
要解决的问题
在一个 889 个节点、5 个真实 App 的实测里(每个 App 都先确认在前台):
App | 可点节点 | 系统给出名字 | 无名 |
桌面(com.miui.home) | 15 | 93.3 % | 6.7 % |
便签(com.miui.notes) | 7 | 100 % | 0 % |
夸克(com.quark.browser) | 24 | 41.7 % | 58.3 % |
设置(com.android.settings) | 14 | 21.4 % | 78.6 % |
淘宝 | 44 | 25.0 % | 75.0 % |
微信 | 0 | — | 100 % |
只有 43.3 % 的可点控件带系统标签,56.7 % 什么都没有。
微信 44 个节点里
clickable="true"是零——它自绘 View、在onTouchEvent里处理触摸,从不setClickable(true)。任何靠 clickable 标志枚举控件的方案,都会把微信报成一块空屏。这台 ROM 上还有 6 个富字段根本进不了 dump:
tooltip-text、state-description、pane-title、actions/action-list、input-type、important-for-accessibility。hint在 889 个节点里只出现两次。dumpsys activity top在这台机器上拿不到任何 view id 和文本(mID=、mText、android:text全为 0 行)。
所以本项目的立场只有三条:系统说了就照抄,能动手就观察,不知道就说不知道。
实测性能
操作 | 改造前 | 改造后 |
点击 | 95–114 ms | 40.8 ms |
滑动(300 ms 手势) | 664 ms | 310.9 ms(手势 300 + 开销 11) |
按键 | 75–114 ms | 16.5–41 ms |
5 步流水线(不返 UI) | 663 ms | 215.9 ms |
5 步流水线(返 UI) | 1028 ms | 597.4 ms |
一次 | — | 231 ms |
一次完整层级快照 | — | ~330 ms |
| 1895 ms | 原始路径 615 ms |
提速来源是一个常驻 root daemon:直接往 /dev/input/event7 写打包的 input_event,不再每次调用都启动一个 input 进程的 JVM。ABS 上限从硬件读(maxX=14399、maxY=31999,13.333 倍缩放),没有硬编码。回退链依次是 injectInputEvent(免 root,UID 2000)→ uiautomator2 → adb input。
三层结构
感知 —— 一次 dump 变成有类型的控件:
role、带来源标注的label(text/desc/hint/resource_name)、actions、不含坐标的稳定身份semantic_key、region,以及标明"这是系统说的还是我推的"的interactive_source。2000 个节点 51.1 ms。行动 ——
act()一次往返就同时返回"做了什么"和"结果是什么",观察复用上一帧缓存,只多花一次截图。学习 ——
learn()专门对付系统不肯命名的控件:挑最该学的一个,危险词(删除/支付/退出登录/卸载/密码框)直接拒绝并记录,点它、比对前后、按(包名, Activity, 控件身份)落盘。下次ui_describe就以learned_effect带出来。2000×2000 节点比对 9.45 ms。
安全与边界
不做 OCR、不做模板匹配、不做视觉猜测;没有名字的控件 label 就是空字符串,绝不编造;每个字段都带来源标注;学习过程拒绝破坏性和支付类控件。已知短板也写在文档里:中文输入走不了原生 daemon(HyperOS 拒绝按键注入),无 semantic_key 的控件身份依赖位置(滚动超过约 43 px 会重新学),非 0 旋转未验证,LSPosed 模块只做了设计。
需要 root,面向你自己拥有并有权操作的设备。
MIT licensed. Architecture details and every measurement: docs/ADAPTIVE-SEMANTICS.md.
Available Tools
57 toolsactA
One human-shaped verb: perform an interaction AND report what changed, in a single round trip. action = tap/long_click/double_click/set_text/append_text/clear/check/uncheck/read/scroll/key. Target a control with selector (supports role, label_contains, semantic_key, text, resource_id - semantic addressing needs no coordinates) or pass x/y. Returns effect, a plain sentence describing what actually happened (navigation, dialog appeared, list scrolled, no visible change) plus the new snapshot_id, so you do NOT need a follow-up perceive call. Set observe=false for tight loops where you will observe later yourself.
| Name | Required | Description | Default |
|---|---|---|---|
| x | No | ||
| y | No | ||
| value | No | ||
| action | No | tap | |
| observe | No | ||
| selector | No | ||
| direction | No | up | |
| duration_ms | No | ||
| wait_timeout | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description does real work: it discloses the return shape ('effect', a plain sentence describing navigation/dialog/scroll/no-change, plus snapshot_id) and the observe toggle. It stops short of warning about irreversible side effects (clear wipes text, taps may trigger destructive flows) or timeout behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the combined act+observe premise, then targeting, then return value, then the observe escape hatch — a logical order with little waste. The opening 'One human-shaped verb' is slightly rhetorical, and the dense parenthetical list of selector fields is a bit compressed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers the essentials for a high-traffic interaction tool: what it does, how to target, what comes back, and the no-observe fast path. Gaps remain for the scroll/key-specific params (direction, duration_ms) and the wait_timeout that governs how long it blocks.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 9 params, so the description must compensate. It well documents `action`, the selector predicates (role, label_contains, semantic_key, text, resource_id) and `observe`, but leaves `value`, `direction`, `duration_ms`, and `wait_timeout` entirely unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a concrete verb and effect: 'perform an interaction AND report what changed, in a single round trip,' then enumerates the action space (tap/long_click/set_text/.../key). It implicitly separates itself from the pure-inspect siblings (ui_snapshot, get_ui_tree) by saying no follow-up perceive call is needed.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear condition for the alternate mode ('Set observe=false for tight loops where you will observe later yourself') and explains the two targeting routes (semantic selector vs x/y). It does not explicitly say when to prefer sibling tools like tap_element, input_text, or element_action, which leaves some routing ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
adb_commandB
Raw selected-device ADB command escape hatch (e.g. bugreport, jdwp, shell am instrument). Arguments passed directly to native adb, no host shell. Prefer typed tools for timeouts and validation.
| Name | Required | Description | Default |
|---|---|---|---|
| args | Yes | ||
| timeout | No | ||
| max_output_bytes | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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 important traits: arguments go straight to native adb (no host shell) and the command targets the selected device. But it says nothing about the destructive potential of arbitrary adb, whether output is validated or exit codes are surfaced, or what error conditions appear, which for an unannotated raw-command tool is a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero filler, and the core identity (raw escape hatch) plus the operative constraint (no host shell) are front-loaded before the routing advice. Nothing could be cut without losing information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The output schema means return values need not be explained, and the description covers the tool's nature and target device. For a raw unvalidated command executor with three undocumented parameters and no annotations, though, it should warn about destructive scope and explain args construction to be genuinely complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must explain args, timeout, and max_output_bytes. It adds nothing: no format or example for the args array, no note that timeout is in seconds with a 30s default, no mention that max_output_bytes truncates output at 64KB. The one nod — that typed tools handle timeouts better — is indirect and doesn't define the parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource combination: a raw ADB command escape hatch targeting the selected device, with concrete examples (bugreport, jdwp, shell am instrument). It also implicitly distinguishes itself from the typed siblings, though it does not name the closest overlaps such as shell_execute or root_shell.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Prefer typed tools for timeouts and validation" implies this is a fallback for cases the typed tools don't cover, which is useful guidance. However, it never states the positive condition for choosing this over shell_execute, shell_batch, or root_shell, so the agent must infer where this tool sits among several similarly-scoped siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
agent_profileB
Apply/list/restore an Agent speed profile. Saves exact original animation/stay-awake values BEFORE changes and restores them (including absent keys) by profile_id on the same device.
| Name | Required | Description | Default |
|---|---|---|---|
| action | No | apply | |
| profile_id | No | ||
| stay_awake | No | ||
| zero_animation | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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 add real behavioral content: it mutates device settings, snapshots exact original values before changing them, and restores them including absent keys, tied to the same device. It still leaves out whether elevated privileges/root are required, whether applied changes survive reboot, and what list returns, which matter 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with no filler, front-loading the action set and then the save/restore guarantee. The second sentence is dense but every clause (BEFORE, including absent keys, same device) carries distinct information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Return values need not be explained because an output schema exists, and the save/restore contract is covered. For a four-parameter, zero-schema-coverage tool with no annotations and many adjacent device-setting siblings, it is only minimally complete: action vocabulary, privilege requirements, and cross-tool selection are all absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description has to compensate, and it partially does by mapping profile_id to restore and connecting stay_awake/zero_animation to the saved values. It never states that apply/list/restore are the legal values of the otherwise un-enumerated action parameter, nor what the booleans do on list or restore.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names three specific verbs (apply/list/restore) and a concrete resource (Agent speed profile), plus the mechanism (save original animation/stay-awake values, restore by profile_id). It does not, however, differentiate itself from the closely related sibling optimize_device_for_agent, which an agent could 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied rather than stated: the mention of 'restore ... by profile_id on the same device' signals that restore requires a prior apply on that device, and the save-before-change wording implies apply is the entry point. There is no explicit when-to-use versus when-not-to-use, and no guidance on choosing between actions or against optimize_device_for_agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
app_actionC
List/info/paths/launch/stop/restart/clear/enable/disable/uninstall apps; install/install_multiple local APKs (base+splits), explicit downgrade/test/permission switches. clear/uninstall remove user data.
| Name | Required | Description | Default |
|---|---|---|---|
| action | No | list | |
| package | No | ||
| user_id | No | ||
| activity | No | ||
| apk_paths | No | ||
| allow_test | No | ||
| include_system | No | ||
| allow_downgrade | No | ||
| grant_permissions | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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 one genuinely useful thing: disclosing that clear/uninstall remove user data, and that downgrade/test/permission behaviors are explicit opt-in switches. However, it says nothing about root/privilege requirements, what launch/stop do to running state, whether install replaces existing data, or side effects of enable/disable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is short and front-loads the action inventory, with no filler sentences. The dense slash-separated style sacrifices readability for brevity and forces the agent to parse a token stream rather than read structured statements.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 9-parameter, no-annotation, multi-mode tool, the definition is thin: an output schema exists so return values need not be described, but action semantics, parameter roles, and privilege requirements are all missing. The action enumeration is the only substantive content.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 9 parameters, so the description must compensate. It partially does: 'apk_paths (base+splits)' maps to apk_paths, and 'explicit downgrade/test/permission switches' maps to allow_downgrade, allow_test, grant_permissions. But action (the primary discriminator), package, user_id, activity, and include_system are given no meaning at all.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific resource (apps) and enumerates the concrete verbs it supports: list/info/paths/launch/stop/restart/clear/enable/disable/uninstall plus install/install_multiple. An agent can tell this is the app-lifecycle tool. It does not distinguish itself from siblings like manage_app, app_permissions, or deploy_and_verify_apk, which appear to overlap.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no preconditions, and no routing to alternatives despite several overlapping siblings (manage_app, app_permissions, export_apks, deploy_and_verify_apk). The agent must infer action selection entirely from the slash-separated verb list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
app_data_archiveA
Backup/restore one app's CE or DE private data as tar+SHA256 manifest. Stops app. Restore validates member paths/manifest, keeps pre-restore data backup, restores UID/SELinux; replaces data, leaves app stopped. Keystore/TEE/external storage excluded.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | ||
| package | Yes | ||
| storage | No | ce | |
| user_id | No | ||
| local_path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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 does substantial work: it discloses that the app is stopped, that restore replaces the data and leaves the app stopped, that member paths and the manifest are validated, that a pre-restore backup is retained, and that UID/SELinux context is restored. It omits privilege requirements (root/shell), error/failure behavior, and whether a failed validation aborts before mutation, which matter 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose and output format are front-loaded in the first sentence, and every subsequent clause carries operational information with no filler. It is written in dense telegraphic fragments ('Stops app.', 'replaces data, leaves app stopped') that save tokens but slightly reduce readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutating, side-effect-heavy tool with no annotations, the description covers the important behavioral surface: app stoppage, data replacement, pre-restore backup, and validation. An output schema exists so return values need no explanation, but the absence of any privilege/root requirement or user_id semantics leaves a gap given 0% schema coverage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for all five parameters. It implies the 'action' values (backup/restore), explains 'storage' as CE vs DE, and bounds 'package' to one app, but never enumerates the accepted action strings, gives no format for local_path beyond 'tar+SHA256 manifest', and never mentions user_id at all.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb pair (backup/restore), a precise resource (one app's CE or DE private data), and an output format (tar + SHA256 manifest), so an agent can tell this apart from read-only siblings like inspect_app_data. It stops short of naming a sibling or stating an explicit contrast, so it is clear but not fully differentiating.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Backup/restore one app's ... data' establishes the use case, and 'Keystore/TEE/external storage excluded' states a when-not boundary for data coverage. It does not route the agent to an alternative when the target data falls outside that boundary (e.g., use file_transfer_root or inspect_app_data instead), so the alternatives half of the guidance is missing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
app_permissionsB
Inspect/grant/revoke permissions or set a named appop. grant_runtime_all intersects declared permissions with device dangerous-runtime list and reports failures individually; does not silently enable all special privileges.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | allow | |
| action | No | list | |
| package | Yes | ||
| user_id | No | ||
| permission | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description bears the full disclosure burden. It does add real value by stating that grant_runtime_all intersects declared permissions with the device dangerous-runtime list, reports failures individually, and does not silently enable special privileges — but it says nothing about revoke's reversibility, or whether root/elevated access is required for any operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with the capability statement front-loaded and the behavioral caveat following. The only weakness is unexplained jargon: 'grant_runtime_all' appears as if it were a known term, but the schema offers no enum to map it to.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a five-parameter, zero-coverage, unannotated tool with multi-mode behavior, the description is too thin. It omits the action/mode value space, user scoping, permission string format, required access level, and whether revoke is destructive — an agent could easily call this incorrectly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across five parameters, and the description only obliquely touches 'permission' and a named appop. It never explains 'mode' (default allow), 'action' (default list), 'user_id', or the expected format of the permission string, so the parameters remain essentially undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States specific verbs and resource: inspect, grant, revoke permissions, plus setting a named appop. This clearly distinguishes it from siblings like app_action or system_settings, but the named mode/action values (grant_runtime_all) are never reconciled with the schema's generic 'action' field, leaving some ambiguity about what can actually be invoked.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool handles permission inspection, granting, revoking, and appop setting, but never says when to use this versus manage_app or app_action, nor which 'action' value selects which behavior. The one concrete condition given (grant_runtime_all intersects against the dangerous-runtime list) is behavioral detail 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.
batch_ui_actionsA
【王牌去人机感工具】单次调用连续执行多步手机操作流水线! 当能够预判接下来的 2~6 步操作时(例如:启动应用 -> 等待首页 -> 点击搜索框 -> 输入关键词 -> 按回车), 必须使用本工具一次性下发,彻底告别『点一下停几秒等下一轮』的卡顿体验! 若中途某一步失败,会自动中断并返回当前停留页面的 UI 树供纠错。
| Name | Required | Description | Default |
|---|---|---|---|
| steps | Yes | 要连续执行的动作数组。支持动作类型: 1. {'action': 'launch', 'package': 'com.xxx', 'activity': '可选'} 2. {'action': 'wait_for', 'text': '搜索', 'timeout': 5} 3. {'action': 'tap', 'text': '...', 'text_contains': '...', 'id': '...', 'index': 0, 'x': 100, 'y': 200} 4. {'action': 'input', 'text': '要输入的中文', 'hint': '搜索框提示词', 'clear': True, 'enter': True} 5. {'action': 'swipe', 'direction': 'up', 'scroll_to_text': '可选滚动查找文字'} 6. {'action': 'key', 'key': 'BACK'} 7. {'action': 'sleep', 'ms': 500} 8. {'action': 'root_cmd', 'cmd': '...'} | |
| return_ui_after | No | 批量执行完毕后是否附带最终 UI 树。默认 False——流水线跑完再由调用方决定是否观察;流水线中途失败仍会返回当时页面供纠错 |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description bears the full burden of behavioral transparency. It explicitly details a crucial operational behavior: upon failure mid-workflow, the tool automatically halts and returns the UI tree of the current state, enabling error correction. This is vital context for a batch process.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The structure is excellent, front-loading the core value proposition immediately. While the language is slightly marketing-oriented (e.g., '王牌去人机感工具'), the technical instructions are well-organized and highly focused.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of handling a nested array of diverse action types, the definition is exceptionally complete. It covers the 'what' (workflow execution), the 'when' (2-6 steps), and the 'if-then' (failure recovery mechanism), providing the agent with all necessary context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
While the schema defines the structure, the description provides a functional specification for the complex 'steps' parameter. It lists 8 concrete action types (e.g., `launch`, `wait_for`, `root_cmd`) and provides examples of their required parameters, transforming the abstract schema into an executable blueprint.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly defines the purpose: executing sequential, multi-step mobile operations in a single function call (a workflow or pipeline). This sharply differentiates it from the many single-action sibling tools, such as `tap_element` or `input_text`.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides excellent usage guidelines by stating the specific condition under which the tool *must* be used: when the agent can predict 2 to 6 consecutive steps. This directs the agent away from calling multiple single-step tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compare_screenshotB
Pixel regression check against a local baseline PNG/JPEG. Captures one frame, compares dimensions/changed-pixel ratio/bounds, optionally saves current/diff; useful for Canvas UI verification.
| Name | Required | Description | Default |
|---|---|---|---|
| max_width | No | ||
| threshold | No | ||
| baseline_path | Yes | ||
| save_diff_path | No | ||
| save_current_path | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations supplied, the description carries the behavioral burden and does disclose key behavior: it captures one frame, compares dimensions and changed-pixel metrics, and can optionally save current and diff outputs. It omits whether the operation is read-only, what permissions are required, and how threshold affects results, leaving meaningful 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single compact sentence-like statement that front-loads the core comparison behavior and follows with implementation details. Every clause adds useful information, 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.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The presence of an output schema reduces the need to describe return values, and the description covers the main comparison workflow and optional file saves. However, for a five-parameter tool with zero schema description coverage, it should explain threshold and max_width to be fully self-contained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for five undocumented parameters. It implies baseline_path and the optional save_current_path/save_diff_path usage, but it does not explain max_width or threshold semantics, defaults, or valid ranges, leaving important parameters ambiguous.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and resource: a pixel regression check against a local baseline PNG/JPEG. It also clarifies that it captures one frame and compares dimensions, changed-pixel ratio, and bounds, which distinguishes it from generic screenshot tools. It does not explicitly contrast with the sibling screenshot_annotated, but the 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a usage context by saying it is useful for Canvas UI verification. However, it does not state when to choose this over related tools such as screenshot_annotated or ui_snapshot, nor does it describe exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
content_providerA
Direct zero-UI ContentProvider query/insert/update/delete/call/gettype with typed bindings. update/delete require explicit where ('1' intentionally means all rows). ROM/provider authorization still applies.
| Name | Required | Description | Default |
|---|---|---|---|
| arg | No | ||
| uri | No | ||
| root | No | ||
| sort | No | ||
| where | No | ||
| action | No | query | |
| method | No | ||
| values | No | ||
| user_id | No | ||
| projection | No | ||
| max_output_bytes | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations at all, the description carries the full load. It does disclose two genuinely useful behaviors: update/delete demand an explicit where clause, and where='1' means all rows (a destructive-footgun warning), plus that ROM/provider authorization still applies. However it says nothing about permission failures, whether calls are reversible, or concurrency, so the mutation risk profile remains only partially disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two dense sentences with no filler, and the operation list is up front. The parenthetical about '1' meaning all rows interrupts the flow, and cramming two separate ideas (bindings, authorization caveat) into one sentence makes it slightly harder to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values needn't be explained. Given zero annotations and eleven undocumented parameters, the description is missing detail an agent would want: the meaning of root, user_id, max_output_bytes, and whether permissions must be pre-granted.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% across 11 parameters, so the description must compensate. It explains three of the most important parameters: action maps to the chosen CRUD verb, where is the selection filter, values carries the typed payload implicitly. It adds no meaning for uri, projection, sort, arg, method, root, user_id, max_output_bytes, so it falls short of full coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource (Android ContentProvider) and enumerates the concrete operations (query/insert/update/delete/call/gettype) plus the key qualifier 'zero-UI' and 'typed bindings'. That distinguishes it from UI-driven siblings, though it never names which sibling (e.g. query_system_provider, sqlite_database) it competes with.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implies usage via 'zero-UI' (bypass the UI layer and hit the provider directly) and gives one hard precondition for update/delete. It does not say when to prefer this over query_system_provider, shared_preferences, or sqlite_database, so the agent must infer the choice from the URI scheme.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
deploy_and_verify_apkA
【Android / LSPosed 开发一键联调闭环】 单次调用自动完成:
安装本地 APK (
adb install -r -d)记录日志起始时间,保留全局 Logcat 缓冲池
强杀并冷启动目标宿主应用 (
am force-stop+ 启动)等待页面渲染与 Hook 注入
自动汇总返回:是否有 Crash 堆栈 + 目标应用 Logcat + LSPosed 模块最新日志 + 当前屏幕 UI 控件树!
| Name | Required | Description | Default |
|---|---|---|---|
| apk_path | Yes | 本地电脑上编译好的 APK 绝对路径 | |
| log_keyword | No | 可选:过滤提取日志的关键词 | |
| wait_seconds | No | 启动后等待钩子执行与页面加载的秒数,默认 3.5 秒 | |
| target_package | Yes | 安装后需要强杀并冷启动验证的目标包名(如果是调试 LSPosed 模块,填宿主包名如 'com.example.app';如果是普通 App,填自身包名) | |
| launch_activity | No | 可选:指定启动的具体 Activity |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations supplied, the description carries the burden and discloses the important side effects: install uses -r -d (reinstall with downgrade), the target app is force-stopped and cold-started, and the global logcat buffer is retained. It does not cover permissions, adb/root prerequisites, or expected duration/failure modes, but the destructive footprint of the operation is made visible.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The header line establishes scope up front, followed by a numbered list of the five automated steps. Each item adds information; only the decorative bracket styling is noise. It is slightly long but front-loaded and scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a five-parameter, multi-step orchestration tool with an output schema, the description explains the sequence, what gets killed, and what is aggregated back (crash stack, logcat, LSPosed module logs, UI tree). Missing only prerequisites and failure handling, which leaves a small gap given no annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so apk_path, target_package, log_keyword, wait_seconds, and launch_activity are already documented in the input schema. The description adds no parameter-specific meaning beyond that, which matches the baseline for fully covered schemas.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a concrete multi-step workflow (install → capture logcat → force-stop/cold start → wait for hook → aggregate crash logs, module logs, UI tree) and titles it as an Android/LSPosed one-shot debug loop. That clearly separates it from single-purpose siblings such as adb_command, read_logcat_smart, and get_ui_tree.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It establishes the context in which it is the right tool: an LSPosed/Android development iteration where the agent needs install-and-verify in one call, and it notes that for module debugging the target_package is the host app. It does not name explicit alternatives or state when not to use it (e.g. use adb_command for a plain install without verification).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
device_connectionC
List/select ADB devices or connect/disconnect/pair host:port. Selection clears UI indices; no arbitrary default when multiple devices are attached.
| Name | Required | Description | Default |
|---|---|---|---|
| action | No | list | |
| serial | No | ||
| address | No | ||
| pairing_code | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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 genuine side effect: selection clears UI indices, plus the multi-device defaulting rule. It leaves out failure behavior (what connect returns on an unreachable host), whether pairing consumes the code, and permission/authorization needs, so the disclosure is partial rather than rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with the operation list front-loaded and the caveats second; no filler. The telegraphic style ('List/select...') costs a little readability but every clause carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need no explanation, but for a stateful connection tool with four undocumented parameters and zero annotations, the description is too thin. It omits required-field expectations (nothing is required, so which params select which action), prerequisites for pairing, and post-connect state.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and all four parameters are undocumented in the schema, so the description must compensate. It only maps partially: 'host:port' hints at the address format and 'pair' implies the pairing code, but serial (the key selector for multi-device selection) and the enumerated action values are never explained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names concrete verbs (list/select/connect/disconnect/pair) against a concrete resource (ADB devices, host:port), so the agent knows this is the device-connection lifecycle tool rather than a control/status tool. It is clear enough to separate from siblings like device_control or get_device_status, 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It conveys a situational hint ('no arbitrary default when multiple devices are attached') but gives no when-to-use vs when-not guidance and does not name any sibling or alternative path. Nothing says when to use pair versus connect, or what prerequisite state a device must be in for each.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
device_controlB
Control wifi/bluetooth/mobile_data/airplane_mode, brightness, rotation, screen_size, density, volume, wake/sleep/dismiss_keyguard, notifications/quick_settings/collapse_panels, reboot/recovery/bootloader/shutdown. ROM support varies. Reboot/network changes may disconnect ADB.
| Name | Required | Description | Default |
|---|---|---|---|
| root | No | ||
| value | No | ||
| action | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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 two genuinely useful behavioral traits: ROM-dependent support and that reboot/network changes may disconnect ADB. It omits other important behavior — whether reboot/shutdown are irreversible, what permissions or root are needed (despite a 'root' parameter defaulting to true), and what the tool returns on unsupported actions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The capability list is front-loaded and dense with no filler, and the two trailing caveat sentences each add distinct risk information. The enumeration is an unstructured comma list rather than grouped by domain, which slightly hurts scanability but wastes no words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained. For a 3-parameter, high-blast-radius control tool, though, the definition should say what 'value' expects per action and when root is required; those gaps remain after the (admittedly broad) action enumeration.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does partially by enumerating the accepted action values (including the underscore naming convention). However 'value' — whose meaning clearly changes per action (brightness level, volume level, screen density, etc.) — and 'root' are given no semantics anywhere, leaving the caller to infer formats.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description enumerates the concrete resource domains the tool manipulates (wifi/bluetooth/mobile_data/airplane_mode, brightness, rotation, volume, reboot/shutdown, etc.), which makes the scope of 'device_control' tangible rather than tautological. It never differentiates itself from overlapping siblings such as system_settings, press_key, or adb_command, so an agent must guess the boundary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 for overlapping tasks (e.g. system_settings for settings changes, root_shell for raw commands). 'ROM support varies' is a caveat about reliability, not a selection rule.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
device_diagnosticsB
Collect summary/memory/cpu/graphics/network/crashes/activity/services/power or bundle. Executes probes in one ADB session; optional persistent host report directory for regression evidence.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | summary | |
| package | No | ||
| output_dir | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden; it does disclose two real behavioral traits — probes run inside a single ADB session (implying a bounded round-trip cost) and output_dir creates a persistent host-side report. It says nothing about device state requirements (root/ADB auth), expected runtime, or whether the operation is read-only and safe, which matters for a tool whose name could imply probing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two dense sentences with the kind enumeration and the operational notes front-loaded; no filler. It is telegraphic and relies on slash-separated lists, but every clause carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return value explanation is rightly omitted, and the kind enumeration plus session/report notes cover the core invocation. Gaps remain around the `package` scope parameter, prerequisites such as root or connection state, and roughly how heavy each kind is, which an agent needs to choose this over lighter siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it partially does: it enumerates the domain of the `kind` parameter (summary/memory/cpu/graphics/network/crashes/activity/services/power/bundle) and explains `output_dir` as a persistent host report directory. The `package` parameter, presumably scoping data to one app, is left completely unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a concrete verb ("Collect") with an explicit enumeration of the diagnostic categories it can gather, so an agent knows this returns device health/diagnostic data rather than acting on the device. It does not differentiate itself from plausible siblings such as get_device_status, device_doctor, or read_logcat_smart, 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase "optional persistent host report directory for regression evidence" implies a use case (capturing a snapshot you want to keep for later comparison), but there is no explicit when-to-use rule, no exclusions, and no named alternative among the many sibling diagnostic tools. Usage must be inferred from the kind list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
device_doctorA
Probe actual Root UID, ROM/SDK, installed command/dependency capabilities. initialize_u2 starts the UIAutomator2 helper and resets a failed connection.
| Name | Required | Description | Default |
|---|---|---|---|
| initialize_u2 | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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 probe's targets and the side effect of initialize_u2 (starting a helper process and resetting a broken connection), but says nothing about whether the probe is read-only, whether it restarts ADB or disrupts active sessions, or how long a probe takes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with no filler, and the primary probe purpose leads. Sentence one is a terse noun list that reads more like a capability dump than prose, which slightly blunts front-loading, but nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need not be described, and the single parameter is explained. Still, 'dependency capabilities' is unspecified, and the description omits whether the U2 initialization can disturb existing sessions — meaningful context for a diagnostic tool that also mutates connection state.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% beyond the bare boolean named initialize_u2, so the description must supply the meaning and it does: the flag starts the UIAutomator2 helper and resets a failed connection. Without that sentence the parameter would be opaque.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names specific resources being probed (Root UID, ROM/SDK, installed command/dependency capabilities) and explains the flag's action (starts UIAutomator2 helper, resets a failed connection). It conflates two functions — capability probing and U2 initialization — and never distinguishes itself from the sibling device_diagnostics, so it stops 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is one implicit usage trigger: set initialize_u2 when a UIAutomator2 connection has failed. Beyond that, there is no statement of when to call device_doctor versus device_diagnostics, device_connection, or get_device_status, and no preconditions such as whether root is required for the probe.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
device_filesA
Root file manager: list/stat/read/write/append/hash/mkdir/chmod/copy/move/delete. Text or base64, atomic replacement, preserve existing ownership/mode, backup by default, optional compare-and-swap SHA256. Use transfer for large files/trees.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | 600 | |
| path | Yes | ||
| root | No | ||
| text | No | ||
| action | Yes | ||
| backup | No | ||
| encoding | No | utf-8 | |
| max_bytes | No | ||
| recursive | No | ||
| destination | No | ||
| expected_sha256 | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations supplied, the description carries the safety burden well: it discloses atomic replacement, preservation of existing ownership/mode, backup-by-default, and optional compare-and-swap via SHA256 — all non-obvious behaviors that materially change how an agent should write. It stops short of flagging which actions are irreversible/destructive (delete, recursive delete, move) or whether elevated privilege is required, which matters given no destructiveHint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three telegraphic sentences, front-loaded with the operation list, then behavior guarantees, then the sibling routing rule. Every clause carries distinct information and there is no filler; the dense fragment style is appropriate for an 11-parameter dispatcher.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The return shape is covered by the existing output schema, and core write semantics are stated, but for a tool this broad (11 params, mixed read/write/delete actions, zero annotations, zero schema descriptions) the definition leaves too much unresolved — notably max_bytes/recursive/destination semantics and which actions can destroy data. Adequate as a signpost, incomplete as a specification.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 11 parameters, so the description is the only source of parameter meaning, and it does supply the action vocabulary (no enum in schema), plus text-vs-base64 encoding, backup default, and expected_sha256 as a CAS guard. However, several parameters remain entirely unexplained: max_bytes (truncation limit?), recursive, destination, root, and mode's interaction with 'preserve existing ownership/mode'. It compensates partially, not fully.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific noun phrase ('Root file manager') and enumerates the concrete operations (list/stat/read/write/append/hash/mkdir/chmod/copy/move/delete), so an agent knows exactly which file operations live here rather than elsewhere. It also names the boundary against the sibling 'file_transfer_root' for large files/trees, which no other sibling would supply.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides one explicit routing rule with its condition: 'Use transfer for large files/trees', which maps onto the sibling file_transfer_root. What is missing is guidance on prerequisites (e.g. that this is a root/privileged surface) and when to prefer other siblings such as app_data_archive or inspect_app_data for app-scoped paths.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
device_jobB
Background device processes: list/start/status/output/cancel/cleanup. Use for logcat, instrumentation, perfetto, tcpdump if installed. Persistent handles, bounded stdout/stderr, incremental byte offsets and PID-reuse checks. timeout=0 explicitly allows indefinite work.
| Name | Required | Description | Default |
|---|---|---|---|
| root | No | ||
| label | No | ||
| limit | No | ||
| action | No | list | |
| job_id | No | ||
| offset | No | ||
| stream | No | stdout | |
| command | No | ||
| timeout | No | ||
| encoding | No | utf-8 | |
| max_output_mb | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does supply real behavioral facts: persistent handles, bounded stdout/stderr, incremental byte offsets, PID-reuse checks, and timeout=0 semantics. It omits mutation consequences (what cancel/cleanup destroy), privilege/root behavior, and any pagination details, leaving meaningful gaps for a lifecycle tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the action list and use cases, then adds behavioral constraints, with minimal wasted wording. The telegraphic style is dense but efficient for an agent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-value explanation is not required. For a complex 11-parameter multi-action tool with no annotations, the description covers lifecycle and some behavior but leaves privilege, mutation effects, and most parameter meaning unspecified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% across 11 parameters, so the description must compensate. It does clarify the action value set, offset/stream/limit semantics via 'incremental byte offsets' and 'bounded stdout/stderr', and timeout=0 behavior, but leaves root, label, command, job_id, encoding, and max_output_mb undocumented in both schema and description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the resource (background device processes) and enumerates the concrete actions (list/start/status/output/cancel/cleanup), giving a clear verb+resource picture. It also lists target workloads (logcat, instrumentation, perfetto, tcpdump), though it never explicitly distinguishes itself from siblings like shell_execute or adb_command.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives when-to-use hints via the workload list ('Use for logcat, instrumentation, perfetto, tcpdump if installed') and mentions timeout=0 for indefinite work. However, it offers no when-not guidance and no explicit routing to alternatives such as adb_command or shell_execute, so the agent must infer which tool to pick.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
element_actionA
Act on exactly one matching element: tap/long_click/double_click/set_text/append_text/clear/check/uncheck/read. Ambiguous/stale/disabled targets fail explicitly. Returns a compact ack, not a tree: set return_ui=true only when the next step needs the whole page, otherwise observe with ui_snapshot(since_snapshot_id=...) and pay only for the delta.
| Name | Required | Description | Default |
|---|---|---|---|
| value | No | ||
| action | No | tap | |
| timeout | No | ||
| selector | Yes | ||
| return_ui | No | ||
| duration_ms | No | ||
| press_enter | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With zero annotations the description carries the full burden and does disclose meaningful behavior: ambiguous/stale/disabled targets fail explicitly rather than silently picking a match, and the return is a compact ack rather than a UI tree. It stops short of stating prerequisites (whether a prior snapshot_id is required, which actions demand a `value`) or what timeout/duration_ms actually govern.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences with the action vocabulary front-loaded and no filler; the failure-mode and return-shape points follow in priority order. Phrasing like "pay only for the delta" is idiomatic but still clear in context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so the ack need not be expanded, and the description covers the core select-only (no annotation) behavioral story. For a mutation tool with seven parameters it still leaves gaps: text-entry prerequisites (value for set_text/append_text), timeout semantics, and what duration_ms affects are unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% at the top level, so the description must compensate — and it does add real value by supplying the `action` enum that is entirely absent from the schema, plus the semantics of `return_ui`. However `value`, `timeout`, `duration_ms`, and `press_enter` are never explained, leaving four of seven parameters undocumented anywhere outside their names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb-plus-scope ("Act on exactly one matching element") and enumerates the exact action vocabulary (tap/long_click/double_click/set_text/.../read), so an agent knows precisely what surface it covers. It does not name the near-siblings (tap_element, input_text, act) to differentiate itself, 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is explicit when/when-not guidance for one parameter: set return_ui=true only when the next step needs the whole page, otherwise pick up the delta via ui_snapshot(since_snapshot_id=...). Nothing tells the agent when to reach for element_action instead of tap_element, input_text, or fill_form, so sibling 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.
export_apksA
Export an installed app's base APK and ALL split APKs to a host directory for development/testing.
| Name | Required | Description | Default |
|---|---|---|---|
| package | Yes | ||
| output_dir | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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 discloses two useful traits: that ALL splits are captured (not just the base) and that output lands on the host rather than the device. It omits whether root is required, whether existing files are overwritten, and what happens if the package 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence with the action, the resource (including the ALL-splits detail), the destination, and the intended use case — no filler and nothing buried.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no explanation, and the tool is simple at two required parameters. Still, for an operation that may require root or elevated privileges and writes files, the absence of any permission, failure, or overwrite note leaves real gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and both parameters are bare titles, so the description must compensate. It partially does: 'an installed app's' clarifies that 'package' is the installed app identifier, and 'host directory' clarifies that 'output_dir' is a path on the host machine. It adds no format examples or path conventions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb ('Export') plus a precise resource ('an installed app's base APK and ALL split APKs') and destination ('host directory'). No sibling tool in the list covers APK extraction, so disambiguation is achieved implicitly, but 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'for development/testing' signals the intended context, which is a genuine usage hint. However, there is no guidance on when to prefer this over adjacent tools such as app_data_archive, deploy_and_verify_apk, or file_transfer_root, and no prerequisites (root, device connection state) are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
file_transfer_rootB
【Root 级跨端文件推拉】利用 /data/local/tmp 中转与 Root 提权,支持直接拉取或替换 /data/data/、/data/adb/ 等任意私有目录文件。
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | 'pull'(从手机任意 Root 路径拉取到电脑)或 'push'(从电脑推送到手机任意 Root 路径) | |
| file_mode | No | push 时赋予的目标文件权限,默认 '644' | 644 |
| local_path | Yes | 电脑本地绝对路径 | |
| device_path | Yes | 手机端路径(支持 /data/data/... 或 /data/adb/... 等受保护路径) |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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 does disclose valuable mechanics — Root escalation, /data/local/tmp staging, and the ability to replace files inside private directories (a destructive overwrite). However it omits whether push overwrites existing files, whether the target app must be stopped, and what happens to file ownership/SELinux context when writing into /data/data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single compact sentence with the bracketed capability tag front-loaded, followed by the mechanism and the supported path scope. No filler, though the tag is somewhat redundant with the sentence that follows.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained. Still, for a Root-level mutation tool with zero annotations, the definition should say whether push is destructive/overwriting and what the agent must verify beforehand; those gaps keep it at minimum-viable rather than complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter including action, file_mode, local_path and device_path is already documented in the schema. The description adds only the general framing of 'cross-device pull/push' and no per-parameter 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.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific action (pull/push files between host and device) and a specific resource scope (any Root-protected path such as /data/data/ and /data/adb/). The mechanism is also named — routing through /data/local/tmp with Root escalation. It is distinguishable from generic file tools like device_files or app_data_archive, 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied rather than stated: an agent must infer that this tool is for the root-only paths that ordinary file transfer cannot reach. There is no explicit 'use this instead of X when Y' routing, and no note on preconditions such as requiring Root to be granted first.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fill_formA
Fill several fields (including Chinese/Emoji) and optionally submit in one tool call. Stops at the first failed field. One tree dump total, not one per field.
| Name | Required | Description | Default |
|---|---|---|---|
| fields | Yes | ||
| submit | No | ||
| return_ui | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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 two genuinely useful traits: it aborts at the first failed field and performs a single UI-tree dump rather than one per field. It does not say whether a partial failure prevents submission, whether already-filled fields persist after the abort, or anything about permissions/visibility requirements, so the failure-handling picture stays incomplete.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, the batch capability and the submit option are front-loaded, and each clause carries distinct information (capability, failure behavior, performance characteristic). Nothing is repeated or padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and the core batch/failure behavior is covered. However, for a tool whose only required parameter is a nested array of selector/value pairs, the description leaves the array ordering, the meaning of `return_ui`, and post-failure submit behavior unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate and it largely does not: `fields` is never described as an ordered selector/value list, and `return_ui` is never mentioned anywhere in the schema or the description. Only `submit` gets any gloss via "optionally submit", and the Selector $defs itself does the heavy lifting for matching semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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 ("Fill several fields ... and optionally submit in one tool call"), which immediately distinguishes it from the single-field input_text and gesture/act siblings by making the batch nature explicit. It stops short of naming an alternative tool outright, 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"in one tool call" and "One tree dump total, not one per field" give a clear context signal: use this instead of repeated per-field filling when multiple fields must be set. "Optionally submit" tells the agent the trailing submit action is conditional. No explicit exclusions or edge conditions (e.g., when not to batch) are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_elementsA
Query UI with AND-combined text/id/class/package/state/region predicates, regex and explicit nth. Does not click; returns all matches plus snapshot_id.
| Name | Required | Description | Default |
|---|---|---|---|
| selector | Yes | ||
| max_results | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the load; it usefully discloses that the tool never performs clicks and that results carry a snapshot_id for follow-up actions. It says nothing about result limits, truncation behavior when matches exceed max_results, or cost/latency of a full-tree scan.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tightly packed sentences, front-loaded with the verb and the AND-combination rule, with the read-only caveat and return payload in second position. Dense but no filler; "explicit nth" is terse yet the selector schema repeats the ambiguity rule.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described. For a query tool of moderate complexity the description covers the predicate model, conjunction semantics, non-mutating behavior, and the snapshot_id handoff to action tools — what 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across ~25 selector fields, so the description must compensate. It does map the major predicate families (text, id, class, package, state flags, region, regex, nth) and confirms AND-combination, but leaves hint, semantic_key, index, label_contains, description_contains, snapshot_id and max_results entirely unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Query UI") plus the predicate vocabulary it accepts and what it returns (all matches plus snapshot_id). The clause "Does not click" implicitly separates it from action siblings like tap_element/element_action, 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The "Does not click" note implies this is the read-only lookup step to run before an action tool, but there is no explicit when-to-use or when-to-prefer guidance versus get_ui_tree, inspect_view_hierarchy, ui_query, or element_action. The agent must infer the workflow.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_device_statusA
获取当前连接的 Android 设备状态:设备型号、Android/SDK 版本、实际 Root UID、 当前前台包名与 Activity、屏幕分辨率及 UIAutomator2 可提供的亮屏状态。
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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 convey that this is a passive read of live device state and that the root UID reported is the 'actual' one, which hints at privilege context. However, it says nothing about behavior when no device is connected, latency, or whether root access is required to populate the root UID field.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence that leads with the action and then lists the returned fields, with no filler. The enumerated field list is dense but each item earns its place by telling the agent what data is available.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description need not detail return structure, and it still summarizes the key fields. For a zero-parameter read tool this is nearly complete; the only gap is the absence of any note about failure modes when no device is attached.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 correctly adds no parameter discussion, keeping focus on the returned data.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource ('获取当前连接的 Android 设备状态') and then enumerates exactly what is returned: model, Android/SDK version, root UID, foreground package/Activity, resolution, and screen-on state. That makes the tool's scope unambiguous. It stops short of naming how it differs from close siblings such as device_diagnostics, system_property, or device_connection, so it is clear but not sibling-differentiated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 snapshot to call before acting on a device, but the description never states when to prefer it over device_diagnostics or system_property, nor any preconditions. No exclusions or alternatives are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_ui_treeA
【核心感知工具 - 替代慢速截图】通过高速 RPC 提取当前屏幕的语义化 UI 控件树。
返回每个元素的 [#index] 编号、类名、文本 (text)、描述 (desc)、id、中心坐标与可交互标志 (flags)。
后续可直接调用 tap_element(index=N) 或 tap_element(text="...") 精准操作!
| Name | Required | Description | Default |
|---|---|---|---|
| keyword | No | 可选过滤关键词(匹配 text、desc、resource-id 或类名),留空返回全部 | |
| max_elements | No | 最多返回的元素数量,默认 100 | |
| only_interactive | No | 是否只返回有文本或可交互(可点击/可输入/可滚动)的控件。默认 True 过滤无意义布局容器 |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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 does disclose that extraction happens over a fast RPC path and that returned elements carry [#index] handles for later targeting. It does not cover failure modes (missing accessibility service, empty trees) or read-only guarantees, but the behavioral picture is substantially richer than the name alone.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short lines, front-loaded with the core purpose, then the return shape, then the next-step affordance. Almost no wasted tokens despite the marketing framing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, and the description still summarizes the payload (index, class, text, desc, id, coordinates, flags), which is more than required. The remaining gap is disambiguation from the crowded set of sibling perception tools, which the definition never addresses.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and all three parameters (keyword, max_elements, only_interactive) are self-documented in the schema. The description mentions none of them, so it adds no meaning beyond the structured fields and the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (extract the semantic UI control tree of the current screen) and explicitly positions itself against a named alternative mechanism ('replaces slow screenshots'), so an agent can tell what it gets and why it beats screenshot_annotated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Clear usage context: use this for perception, then call tap_element(index=N) or tap_element(text=...) for the follow-up action. It stops short of distinguishing itself from the many overlapping perception siblings (ui_snapshot, inspect_view_hierarchy, find_elements, ui_describe, ui_query), so the agent must still guess among those.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
input_textA
极速中文/Unicode 文本输入工具。 可一步完成『聚焦输入框 -> 清空旧内容 -> 注入中文字符串 -> 按回车提交 -> 返回新界面 UI 树』,并自动保护系统原输入法不被篡改。
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | 要输入的文本;UIAutomator2 通道支持中文和 Emoji,不可用时明确返回失败 | |
| index | No | 可选:输入前先点击聚焦的输入框元素编号 #index | |
| clear_first | No | 输入前是否清空原有内容,默认 True | |
| press_enter | No | 输入完成后是否自动按下回车/搜索键,默认 False | |
| resource_id | No | 可选:输入前先点击聚焦的输入框 resource-id | |
| hint_or_text | No | 可选:输入前先点击聚焦的输入框提示词或文本 | |
| return_ui_after | No | 输入后是否附带完整 UI 树。默认 False——每次重抓全树约 200ms 并吃掉大量上下文;要看结果用 ui_snapshot(since_snapshot_id=...) 只取差异 |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations given, the description carries the full load, and it does well: it discloses the multi-step side effects (focus, clear, inject, optional Enter), says the system IME is preserved and not modified, states that the UIAutomator2 channel supports Chinese and Emoji and fails explicitly when it is unavailable, and warns that refetching the full tree costs about 200ms and much context. It does not mention required permissions, what is lost when clear_first deletes existing content, or partial-failure behavior, so it falls short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact lines that lead with the core capability and then list the pipeline in execution order. The wording is essentially all substantive, though '极速' is marketing filler with no operational meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter tool with an output schema, the description covers the execution flow, the IME-safety guarantee, the Unicode/Emoji support boundary, and the context cost of the optional UI tree return. The remaining gap is routing guidance versus fill_form and element_action, which keeps it from being complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 in the schema, including defaults and the resource_id/hint_or_text/index focusing alternatives. The description adds only the ordering of the composite pipeline, which largely restates what the individual parameters already say. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource ('文本输入工具') and spells out the composite action: focus the field, clear it, inject the string, optionally press Enter, return the UI tree. This clearly differs from generic gesture tools. However, it does not say how it differs from siblings such as fill_form or element_action, which also enter text.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit statement of when to use this tool, when not to use it, or which sibling to use instead. The only choice guidance is indirect and appears in the return_ui_after parameter: use ui_snapshot(since_snapshot_id=...) rather than refetching the full tree. The default-value cues (clear_first=true, press_enter=false) imply typical usage, but that is inference, not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
inspect_app_dataA
【零界面数据穿透工具】直接通过 Root 读取或查询 /data/data/<package>/ 下的 SharedPreferences 配置与 SQLite 数据库!
无需打开应用界面,直接核查开关状态、缓存数据与内部表记录。
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | 操作模式: - 'list': 列出应用私有目录下的 shared_prefs、databases 和 files - 'read_prefs': 读取 SharedPreferences XML 配置内容 - 'sql_query': 对应用私有 SQLite 数据库执行 SQL 查询 | list |
| package | Yes | 目标应用包名(如 'com.example.app') | |
| pref_key | No | 当 mode='read_prefs' 时可选过滤的配置键名关键词 | |
| sql_query | No | 当 mode='sql_query' 时执行的 SQL 语句(留空默认查询所有表名与表结构) | |
| target_file | No | 当 mode 为 'read_prefs' 时填 XML 文件名(留空读全部);当 mode 为 'sql_query' 时填数据库文件名(如 'data.db') |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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 important behavioral traits of Root dependency and the exact path scope (/data/data/<package>/), and '读取或查询' implies read-only. However, it says nothing about what happens on non-rooted devices, permission requirements, or the risk/behavior of the sql_query mode (whether writes are possible, statement restrictions).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short lines with the core capability (root-level private data inspection) front-loaded before the supporting detail. The bracketed label and exclamation marks are mild marketing padding but do not obscure the meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-parameter tool with one required param, full schema coverage, and an output schema, the description supplies enough context to select and invoke it: what data is reachable, that it requires Root, and that no UI launch is needed. Missing only failure-mode guidance for non-root scenarios.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the schema already documents mode, package, pref_key, sql_query, and target_file in detail. The description only names the data sources (SharedPreferences, SQLite) without adding format or interaction constraints beyond the schema, so it lands at the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (read/query) and a precise resource: SharedPreferences XML and SQLite databases under /data/data/<package>/, accessed via Root without opening the UI. An agent can tell this is a root-level private-data inspector. It does not explicitly distinguish itself from the shared_preferences and sqlite_database siblings, 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage — verifying toggle states, cached data, and internal table records without launching the app — but never states when to prefer this over shared_preferences or sqlite_database, nor any exclusions such as non-rooted devices. Usage context 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.
inspect_lsposedA
【LSPosed / Xposed / KernelSU 专属调试工具】
直接通过 Root 读取 /data/adb/lspd/log/modules_*.log 最新模块日志与已安装的 KernelSU/Zygisk 模块列表,
快速验证 Hook 是否生效、是否有 StackOverflowError / ClassNotFoundException 等异常!
| Name | Required | Description | Default |
|---|---|---|---|
| lines | No | 返回最新日志行数,默认 100 | |
| keyword | No | 可选:过滤 LSPosed 日志中的关键词(如模块名、宿主包名、Hook 标记) | |
| include_verbose | No | 是否读取 LSPosed 框架底层 verbose 日志,默认 False 读模块日志 |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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 access happens through Root and which on-device files are read, plus that a boolean toggles framework verbose logs. It does not describe failure behavior when the lspd log directory is missing or root is unavailable, nor any size/rate constraints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short, front-loaded lines with the tool scope first and the diagnostic use case second. The bracketed marketing-style header and exclamation mark are mild fluff, but nothing is redundant or bloated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only diagnostic tool with an output schema and fully documented parameters, the description covers the data source, root requirement, and intended diagnostic purpose. The only meaningful gap is what happens on missing root/logs, which matters for a tool that depends on a specific filesystem path.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all three parameters (lines, keyword, include_verbose) are already documented in the schema. The description only adds the log-source distinction (module log vs framework verbose log) and does not elaborate on keyword matching syntax or line-limit behavior, so baseline 3 is right.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: read the newest module logs from `/data/adb/lspd/log/modules_*.log` and list installed KernelSU/Zygisk modules. The 'LSPosed / Xposed / KernelSU 专属' framing separates it from generic log tools like read_logcat_smart, though no sibling is named outright and it is slightly ambiguous whether the module list is always returned alongside the logs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear use case: verifying a hook actually took effect and detecting StackOverflowError / ClassNotFoundException style exceptions. It does not state when NOT to use it or point at alternatives (read_logcat_smart, root_shell) for non-LSPosed troubleshooting, so it stops short of 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.
inspect_view_hierarchyA
【仅用于已知能吐出 View 树的 ROM】通过 dumpsys activity top 取 Activity/Task 记录。
注意:本机 HyperOS(Android 16)实测该命令不返回任何 View 层级——mID=、mText、
android:text 均为 0 行,微信整份输出只有 776 字节。所以在该机型上它拿不到控件信息,
需要理解界面请直接用 ui_describe(OS 语义,非 OCR)。
在确实支持 AOSP 式 dumpsys activity top 的 ROM 上,本工具可能额外给出:
真实的自定义 View 类名;2. 16 进制资源 ID 锚点;3. 被隐藏的 GONE/INVISIBLE 节点。
| Name | Required | Description | Default |
|---|---|---|---|
| keyword | No | 可选过滤关键词(如自定义 View 类名、0x7f 资源号、id 名称),留空返回顶层起全部视图 | |
| max_lines | No | 最大返回视图行数,默认 180 | |
| visibility_filter | No | 可见性过滤:'ALL'(全部,含 GONE/INVISIBLE 隐藏广告锚点)、'VISIBLE'(仅可见)、'GONE'(仅隐藏) | ALL |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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: it discloses the underlying shell command, a concrete known-failure case (zero `mID=`/`mText` lines, 776-byte output for WeChat), and what data is only conditionally available. It does not state whether root/shell privileges are required to run `dumpsys activity top`, which is the main remaining behavioral gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the applicability restriction and the negative result first, then the upside, which is the right order for an agent deciding whether to call it. The WeChat/776-byte anecdote is slightly more forensic detail than needed, but it substantiates the warning rather than padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and the description covers mechanism, applicability, failure mode, and fallback. Missing only operational prerequisites (privilege level, expected latency) for a shell-backed inspection tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 enum-like values for `visibility_filter` and the default for `max_lines`. The description's mention of resource IDs and hidden nodes loosely maps to `keyword` and `visibility_filter` but adds no syntax or format detail 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.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific mechanism (`dumpsys activity top`) and resource (Activity/Task records / View hierarchy), and enumerates the three extra data classes it can surface: custom View class names, hex resource IDs, and GONE/INVISIBLE nodes. It is clearly distinguishable from the UI-inspection siblings because it names `ui_describe` as the different path.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly scopes use to ROMs that emit AOSP-style View trees, explicitly excludes the current device (HyperOS / Android 16) with measured evidence, and redirects the agent to `ui_describe` for interface understanding. Both the when and the when-not, plus the alternative, are spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
learnA
Teach the agent what an app's unnamed controls DO, by probing and remembering. Many apps expose no label for their buttons (measured: 56.7% of tappable controls carry no text/description/id, and some apps report no clickable flag at all), so the only honest way to learn them is to act and observe. This taps one unknown control at a time, diffs the screen before/after, and persists the observed effect (opened a screen / dialog appeared / list scrolled / no visible change) under the current app+activity. Destructive and financial controls (delete, pay, logout, uninstall, password fields) are refused and recorded as refused, never pressed. Results appear as learned_effect on later ui_describe calls, so the agent stops guessing. budget = how many controls to probe this call (1-5).
| Name | Required | Description | Default |
|---|---|---|---|
| budget | No | ||
| settle_ms | No | ||
| allow_restore | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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 on safety: destructive/financial controls are refused and recorded as refused, never pressed, and each probe taps only one control with a before/after diff. It still omits important behavior — whether this requires an accessibility service or root, what happens to screen state after a probe that navigates (only the parameter name allow_restore hints at restoration), and failure/partial-budget behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Structure is front-loaded: what it does, why it is necessary, then the mechanics, then the safety refusal, then the payoff. The measurement parenthetical (56.7%) supports the rationale rather than padding, though the sentence chain is long enough that the key refusal rule is buried mid-paragraph.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a high-risk UI-mutating prober, the description covers the probing loop, persistence key, refusal policy, and budget, and an output schema exists so return shape needs no explanation. The remaining gap is the two unexplained parameters, especially the restore behavior, which an agent needs to invoke it safely.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it only explains one of three parameters: budget, correctly, with the 1-5 range that the schema's bare default of 2 does not convey. settle_ms and allow_restore are never mentioned, and allow_restore in particular looks safety-relevant for a tool that navigates and mutates UI state.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence names a specific verb and resource — tap unknown/unnamed controls, diff the screen, and persist the observed effect under app+activity. It also implicitly separates itself from direct-action siblings like tap_element or act by scoping to controls with no label or clickable flag, and states where results surface (learned_effect on ui_describe).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a clear triggering condition (apps whose tappable controls carry no text/description/id, or report no clickable flag) and a budget of 1-5 probes per call, which tells the agent the expected scope of use. It never explicitly names an alternative tool for labeled elements or says when not to call it, leaving that routing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_appC
应用生命周期与权限管理工具(信息、停止、重启、清空数据、逐项尝试授予运行时权限)。
| Name | Required | Description | Default |
|---|---|---|---|
| action | No | 操作类型: - 'info': 查看版本名、versionCode、APK路径、UID、进程PID、签名与组件信息 - 'stop': 强行停止应用 (am force-stop) - 'restart': 强杀并重新冷启动应用 - 'clear_data': 清空应用数据与缓存 (pm clear) - 'grant_all_permissions': 尝试授予已声明的危险运行时权限,逐项返回结果;特殊权限需 app_permissions 明确设置 | info |
| package | Yes | 目标应用包名 |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description alone must carry the behavioral burden. It does not disclose that stop is a force-stop, that clear_data irreversibly wipes data and cache, that restart is a cold restart, or that grant_all_permissions may partially succeed, with special permissions being out of scope. The only hint of destructiveness is the word '清空数据' in the parenthetical.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is a single short parenthetical sentence with no wasted prose, and its core nouns lead. However, it duplicates the schema's action list instead of front-loading the higher-value information, such as the destructive nature of clear_data or when to prefer a sibling tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and the 2-parameter schema is fully documented. But for a tool that can force-stop, cold-restart, and irreversibly wipe an app with zero annotations, the description omits the risk and side-effect information that an agent would need before invoking it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and every action is documented in detail at the parameter level, including per-action semantics. The description adds nothing about package format, defaults, or action interactions that the schema does not already state, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
It names a specific resource (app) and enumerates the five operations (info, stop, restart, clear_data, grant permissions), so the general purpose is discernible. But the enumeration simply reproduces what the schema already declares, and it never distinguishes the tool from close siblings such as app_action or app_permissions, which overlap heavily with lifecycle and permission work.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use statements, no preconditions, and no explicit exclusions. The agent must infer that this tool should be chosen over app_permissions for granting or app_data_archive or inspect_app_data for data-related tasks; the description gives no guidance on that choice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
optimize_device_for_agentB
【设备极速模式调优】一键将手机调校为最适合 AI Agent 高速操控与调试的状态:
关闭系统窗口与过渡动画 (
animation_scale = 0),消除页面切换等待时间开启连接电源时屏幕常亮 (
stay_on_while_plugged_in)自动唤醒屏幕并滑开锁屏层 (
wm dismiss-keyguard)
| Name | Required | Description | Default |
|---|---|---|---|
| zero_animation | No | 是否将系统过渡动画缩放设为 0.0;修改前保存原值,恢复用返回的 profile_id。默认 True | |
| wake_and_unlock | No | 是否立即唤醒并解除锁屏遮挡,默认 True | |
| stay_awake_while_plugged | No | 是否开启 USB 连接时保持屏幕常亮不息屏,默认 True |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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 real side effects (animation scales set to 0, keyguard dismissed, screen woken, stay-awake enabled). It does not say whether root/ADB privileges are required, whether the changes persist across reboots, or what happens if one step fails.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded Chinese header followed by a tight numbered list of exactly the three effects; no filler. The bracket-styled title is slightly decorative but still informative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Outputs are covered by the output schema and parameters are fully described, so the essentials are present. For a state-mutating device tool with zero annotations, missing prerequisites (root/ADB), reversibility guarantees, and partial-failure behavior leave a real gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and each parameter already documents its default and the profile_id restore path, so the schema does the heavy lifting. The numbered list loosely maps to the three boolean flags but adds no new semantics beyond the field descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (tune the device into agent-optimal mode) and enumerates the three concrete mutations, so an agent can tell it apart from granular siblings like system_settings or device_control. It stops short of naming those siblings explicitly, 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The framing 'best state for AI Agent high-speed control and debugging' implies the use case (preparing a device before automation), but there is no explicit when-to-use, when-not-to-use, or named alternative such as changing individual settings via system_settings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
perform_gestureC
Perform a multi-point swipe path or pinch_in/pinch_out gesture through uiautomator2, avoiding repeated tap/swipe tool round trips.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | ||
| points | No | ||
| percent | No | ||
| duration | No | ||
| selector | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full disclosure burden. It reveals the backend (uiautomator2) and the batching rationale, but says nothing about what happens on an invalid action string, whether gestures block until completion, or what the response contains beyond the mere existence of an output schema. For a device-mutating input-driving tool with zero annotation coverage, 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler or redundancy. It is efficient, though its terseness comes at the cost of the missing parameter and behavior detail noted elsewhere.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The output schema relieves it of explaining return values, but for a 5-parameter tool with 0% schema description coverage and no annotations, the description should define the action vocabulary, the points coordinate format, and the meaning of percent/duration/selector. None of that is present, leaving an agent to guess at call shape.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 5 parameters, so the description must compensate and largely does not. It hints that 'points' is the swipe path and that 'action' values include pinch_in/pinch_out, but leaves 'percent', 'duration', and 'selector' entirely undefined, and never enumerates the full set of valid action strings for a free-form required string.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a concrete verb (perform) and concrete gesture resources (multi-point swipe path, pinch_in/pinch_out), plus the backend (uiautomator2). This distinguishes it from the plain swipe path implied by the sibling swipe_screen, 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'avoiding repeated tap/swipe tool round trips' implies when to reach for this tool over single-action siblings, but it is indirect. There is no explicit 'use X instead when...' routing and no stated preconditions (e.g., screen must be idle, gesture must start from a valid UI state).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
port_forwardB
ADB forward/reverse list/add/remove for tcp/localabstract/localfilesystem/jdwp endpoints. tcp:0 allocates a port. No host shell; no-rebind avoids replacing another debugger's mapping.
| Name | Required | Description | Default |
|---|---|---|---|
| local | No | ||
| action | No | list | |
| remote | No | ||
| reverse | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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 useful behavior: tcp:0 allocates an ephemeral port, and the no-rebind default avoids clobbering another debugger's mapping. It does not state that add/remove mutate the device forwarding table, whether changes persist, or what 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the verb and resource, with no filler. The dotted-domain phrasing is terse but each clause adds information; it stops just short of being cryptic.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Since an output schema exists, return values need not be described, and the description covers endpoint types, port allocation, and the no-rebind safety behavior. Remaining gaps (mutation effects of add/remove, prerequisite adb authorization) are real but modest for a 4-parameter tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate, and it partially does: 'tcp:0 allocates a port' clarifies the endpoint spec syntax, and 'forward/reverse' and 'list/add/remove' map onto the reverse and action parameters. It never explains the local/remote string formats per endpoint type or enumerates valid action values, so the compensation is incomplete.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the specific resource (ADB forward/reverse mappings) and the operations (list/add/remove) plus supported endpoint types (tcp/localabstract/localfilesystem/jdwp). An agent can distinguish this from generic command tools, though it does not name the closest sibling (adb_command) explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use guidance or routing advice relative to adb_command or shell_execute. The phrase 'No host shell' hints at a boundary but is a constraint, not a condition that selects this tool over alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
press_keyC
发送系统物理/虚拟按键(返回、主页、多任务、回车、电源唤醒等),并自动返回最新界面结构。
| Name | Required | Description | Default |
|---|---|---|---|
| key | No | 按键名称或代码:'BACK'、'HOME'、'APP_SWITCH'、'ENTER'、'DEL'、'VOLUME_UP'、'VOLUME_DOWN'、'POWER'、'WAKEUP'、'SLEEP' | BACK |
| wait_after_ms | No | 按键后等待毫秒数,默认 0 | |
| return_ui_after | No | 按键后是否附带完整 UI 树。默认 False——按返回键后通常只需知道动作已送达,需要时再 ui_snapshot |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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 claims the tool automatically returns the latest UI structure, which conflicts with the schema's return_ui_after default of false, and it says nothing about permission requirements or side effects of POWER/SLEEP presses on device state, nor how long the call blocks when wait_after_ms is used.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence that states the action and its postcondition without padding. The trailing 'etc.' and the vague '等' slightly blur the exact key set, but overall the wording is efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so the description need not explain return values, and the operation itself is simple. However, for a tool capable of POWER/SLEEP and WAKEUP — device-state-affecting keys — the absence of any note on permissions, irreversibility, or how the UI-return behavior relates to the return_ui_after parameter leaves meaningful gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all three parameters (key, wait_after_ms, return_ui_after) are already documented in the schema and a baseline of 3 applies. The description's mention of key names merely echoes the schema's enum-like examples and adds no syntax, format, or default-behavior detail beyond it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a concrete verb+resource — sending physical/virtual system key presses — and lists representative keys (BACK, HOME, APP_SWITCH, ENTER, POWER/WAKEUP), so the agent knows exactly what operation this performs. It does not distinguish itself from sibling input tools such as swipe_screen, tap_element, perform_gesture or send_intent, 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use guidance: nothing says when a key press is preferable to perform_gesture, element_action, or send_intent, and no prerequisites or exclusions are given. The key list implies navigation scenarios, but the agent must infer selection criteria on its own.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query_system_providerB
【后台零界面取证工具】无需下拉通知栏或打开短信 App,直接通过 Root 提取通知栏消息、短信验证码或读写系统剪贴板。
| Name | Required | Description | Default |
|---|---|---|---|
| source | No | 数据源类型: - 'notifications': 抓取当前系统通知栏所有未读通知详情(含验证码、推送标题与正文) - 'sms': 直接读取短信收件箱最新消息 - 'clipboard_get': 读取当前手机剪贴板文本 - 'clipboard_set': 写入文本到手机剪贴板 - 'custom_uri': 查询自定义 ContentProvider URI | notifications |
| value_or_uri | No | 当 source='clipboard_set' 时为要写入的文本;当 source='custom_uri' 时为 content://... 路径 |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations supplied, the description must carry the behavioral load; it does disclose the important Root prerequisite and that the operation is UI-free/background, which is real added value. It does not warn that 'clipboard_set' overwrites existing clipboard content, nor what happens if Root is unavailable or the source is empty.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with a bracket tag identifying the tool class, followed by the concrete extraction targets. Nothing is wasted, though it is dense and omits the write-side behavior of the clipboard operation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is small (2 optional params, full schema coverage, output schema present), so return values need no explanation. The remaining gaps are behavioral: no mention of Root failure handling, permission implications, or the mutating nature of clipboard_set, which matters for a forensics tool an agent may invoke autonomously.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with every enum value of 'source' and the dual meaning of 'value_or_uri' already documented in the schema. The description only restates the source categories at a high level, adding no format, constraint, or interaction detail beyond the schema; baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific capability set — extracting notifications, SMS verification codes, and reading/writing the clipboard through Root without touching the UI — which is far more concrete than the name alone. It stops short of differentiating itself from plausible siblings such as content_provider or inspect_app_data, which also read device-side data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase '无需下拉通知栏或打开短信 App' implies the scenario (headless background collection where UI interaction is undesirable), so an agent can infer when this is preferable to tap_element or app_action flows. However, no explicit when-not conditions, prerequisites (Root availability), or tool-alternative routing are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_logcat_smartB
【智能 Logcat 诊断工具】支持按包名自动绑定进程 PID、一键提取闪退堆栈 (crash_only=True)、按 Tag 或关键词精准过滤日志。
| Name | Required | Description | Default |
|---|---|---|---|
| tag | No | 按 Log Tag 过滤(如 'MapAdKiller'、'AndroidRuntime') | |
| level | No | 最低日志级别:'V', 'D', 'I', 'W', 'E', 'F',默认 'I' | I |
| lines | No | 返回的最新日志行数,默认 100 | |
| package | No | 按应用包名自动解析 PID 过滤日志(如 'com.example.app') | |
| crash_only | No | 是否仅读取崩溃缓冲池 (logcat -b crash),查闪退必开!默认 False | |
| clear_first | No | 是否清空旧日志缓冲池 (logcat -c),默认 False | |
| grep_keyword | No | 按正文中包含的关键词过滤 |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the burden, and it does disclose non-obvious behavior: automatic PID resolution from a package name and the switch to the crash ring buffer. However, it never warns that clear_first wipes the log buffer — a destructive side effect only visible in the schema — and says nothing about permissions or device prerequisites. The presence of an output schema excuses it from explaining return values.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single bracketed label followed by one dense sentence that front-loads the core capability and then lists the three distinguishing modes. Nothing is padded, though the bracketed Chinese tagline duplicates the tool name rather than adding information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a seven-parameter, fully optional tool with an output schema, the description covers the main operating modes adequately. What it omits is material: the destructive nature of clear_first, any guidance on combining filters, and any differentiation from the generic adb/shell siblings that could also read logs.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every one of the seven parameters is already documented in structured form, which sets the baseline at 3. The description restates a few of them (package-based PID binding, crash_only, tag/keyword filtering) without adding format, precedence, or interaction rules — e.g. what happens when both package and grep_keyword are set.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific resource (Logcat) and three concrete capabilities: automatic PID binding by package name, one-click crash stack extraction via crash_only=True, and filtering by Tag or keyword. An agent can tell this is a filtered log-read tool, not a generic shell or adb wrapper, even though no sibling (e.g. adb_command, shell_execute) is named as an alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: the mention of crash_only=True for 闪退 (crash) investigation hints at the crash-diagnosis scenario, but there is no explicit when-to-use statement, no when-not-to-use, and no routing to alternatives such as adb_command or shell_execute for raw logcat access. The agent must infer the context from the feature list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
record_screenA
Background MP4 recording: start/status/stop/pull. Start immediately returns job_id; stop sends SIGINT for MP4 finalization, pull after completion. ROM screenrecord limits apply.
| Name | Required | Description | Default |
|---|---|---|---|
| action | No | start | |
| job_id | No | ||
| seconds | No | ||
| bit_rate | No | ||
| local_path | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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 real behavior: the operation is asynchronous (start returns job_id immediately), stop sends SIGINT specifically to finalize the MP4, and pull must follow completion. It omits permission/root requirements, where the artifact is written, and what happens if pull is called early, which keeps it below a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three terse sentences, front-loaded with the resource and action set, with no filler. The compressed 'start/status/stop/pull' notation and the trailing 'ROM screenrecord limits apply' are slightly telegraphic but each sentence carries distinct information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and the description covers the async lifecycle and finalization constraint that an agent must respect. The remaining gap is operational prerequisites (root/permissions, output location) and the meaning of local_path, which is a real but limited omission for a device recording tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across five parameters, so the description must compensate. It effectively enumerates the valid 'action' values (start/status/stop/pull) that the schema leaves as a bare string, and explains job_id's role in the lifecycle, but says nothing about seconds, bit_rate, or local_path beyond the vague 'ROM screenrecord limits apply'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource (background MP4 recording) and enumerates the four lifecycle actions (start/status/stop/pull), so the agent knows exactly what the tool does. It does not explicitly differentiate itself from sibling capture tools like screenshot_annotated or compare_screenshot, which is the only reason 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The sequence is implied rather than stated: 'Start immediately returns job_id' and 'pull after completion' tell the agent the correct ordering, but there is no explicit when-to-use guidance or named alternative (e.g., use screenshot_annotated for a single frame). Usage must be inferred from the lifecycle phrasing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
root_shellB
【Root 上帝模式直通车】通过 su -c 在手机上执行任意 Root 特权 Shell 命令。
可执行诸如修改系统属性 (resetprop/setprop)、查看内核/挂载信息、操作 /data/ 私有目录、管理防火墙等任意底层指令。
| Name | Required | Description | Default |
|---|---|---|---|
| command | Yes | 要在手机上以 uid=0(root) 执行的 Linux / Android Shell 命令 | |
| timeout | No | 命令超时秒数,默认 20.0 |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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. It does add real value by disclosing that execution happens through `su -c` at uid=0, which tells the agent a rooted device is required. What it omits is the risk profile: arbitrary root execution is destructive and irreversible, yet there is no warning, no mention of failure when root is unavailable, and no note on blocking/timeout behavior beyond 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The capability statement comes first and the example command families follow, so it is front-loaded correctly. The '上帝模式直通车' framing is filler rather than information, but it costs only a few characters. Two short sentences for a two-parameter tool is proportionate.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists and the parameters are fully described, so the return-value burden is lifted. What is missing for a tool of this power level is the operational envelope: required root state, expected failure modes, and any caution about irreversible system mutation. Adequate, but thin for an unrestricted root shell.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both `command` and `timeout` are already fully documented in the schema, including the uid=0 execution context and the 20s default. The description adds no syntax, quoting, or multi-command guidance beyond what the schema states. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: execute arbitrary Root-privileged shell commands via `su -c`, and lists concrete command families (resetprop/setprop, kernel/mount inspection, /data/ access, firewall). An agent knows exactly what it does. However, it never distinguishes itself from close siblings like `shell_execute`, `adb_command`, or `file_transfer_root`, 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The enumerated examples imply the use case: operations that require uid=0. But there is no explicit statement of when NOT to use it or which sibling to prefer for non-root commands, which matters because `shell_execute` and `adb_command` overlap heavily. Usage is implied, not prescribed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_workflowB
Execute a fully prevalidated UI/Root workflow in ONE call: launch/tap/input/key/swipe/wait/assert/shell/if/repeat/sleep/read_text. Supports per-step postconditions, on_error, bounded loops/deadline and trace. No blind retries of non-idempotent actions.
| Name | Required | Description | Default |
|---|---|---|---|
| workflow | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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 usefully discloses postconditions, on_error, bounded loops/deadline, trace, and warns against blind retries of non-idempotent actions, but it does not cover permission/root requirements, detailed failure behavior, or side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two dense sentences front-load the core operation and then summarize key capabilities. Every clause adds information without repetition or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a complex nested workflow tool with no annotations and no schema property descriptions. The description lists actions and a few features, but it is not complete enough to guide correct construction of the nested workflow object without significant schema inspection.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for a deeply nested workflow object. The description lists the action enum values, but it does not explain workflow-level fields like timeout, return_ui, or max_executed_steps, nor selector predicates, Condition kinds, or per-step semantics, leaving most parameter meaning to inference.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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 prevalidated UI/Root workflow in one call, and lists the supported action types. It is clear what the tool does, but it does not distinguish itself from siblings such as batch_ui_actions, workflow_control, or saved_workflow.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'in ONE call' weakly implies use over multiple atomic calls, but there is no explicit when-to-use guidance, no mention of alternatives like batch_ui_actions or workflow_control, and no conditions for choosing this tool over saved_workflow or individual action tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
saved_workflowB
Persist/reuse named workflows: list/save/load/run/delete. Save validates all steps before atomic storage; works across MCP restarts.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| action | No | list | |
| workflow | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description is the sole source of behavior, and it does disclose two genuinely useful traits: save validates all steps before atomic storage, and saved workflows survive MCP restarts. It says nothing about whether delete is recoverable, what run returns, whether concurrent runs are allowed, or what happens on a name conflict.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences, front-loaded with the resource and operation vocabulary before the behavioral detail about validation and persistence. No filler, though the action list could be formatted more scannably.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The heavy nested Workflow/WorkflowStep/Selector schema carries the bulk of the structural contract and an output schema exists, so the description only needs to frame the operations and key behaviors, which it largely does. The gap is per-action parameter requirements and the overlap with the run_workflow siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the action parameter is a bare string with no enum, so the list of action values in the description is doing essential work the schema does not. However, it does not explain how name and workflow must be supplied per action (e.g. that save requires a workflow, load/run/delete require a name), leaving the caller to infer the per-action contract.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"Persist/reuse named workflows" states a concrete verb and resource, and the list/save/load/run/delete enumeration makes the multi-operation nature explicit. It does not distinguish itself from siblings like run_workflow or workflow_control, which appear to overlap on the run capability, so an agent cannot tell from the description alone 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The action names imply what the tool can do but there is no guidance on when to persist a workflow here versus executing it via run_workflow, workflow_control, or batch_ui_actions. No prerequisites, no mention of when a workflow should be saved at all or what a name collision means.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
screenshot_annotatedA
【视觉兜底与界面审查工具】获取手机屏幕截图。安全图层/DRM 等限制仍可能导致空白或拒绝。
默认开启 Set-of-Mark (annotate_elements=True),在图上直接标出 [#0], [#1] 红框编号,
看图后无需猜像素坐标,直接调用 tap_element(index=编号) 即可!
注意:日常操作请优先使用 get_ui_tree,仅在 Canvas/地图渲染/游戏或视觉验证时调用本工具。
| Name | Required | Description | Default |
|---|---|---|---|
| max_width | No | 图片最大宽度(等比缩放以加速传输),默认 720 | |
| save_path | No | 可选:将截图保存到本地磁盘的绝对路径 | |
| annotate_elements | No | 是否在截图上自动绘制可点击元素的红色边框与 [#index] 编号(Set-of-Mark)。默认 True |
TDQS
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 a real behavioral constraint: secure layers / DRM can produce a blank image or a refusal. It also documents that annotation is on by default and that optional disk saving exists. Missing detail on whether the image bytes or a path is returned, which matters given there is 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose, then limitations, then the default/annotation workflow, then the routing note. The exclamation marks and mixed brackets are slightly noisy but every sentence carries distinct information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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, the description covers the key gaps: DRM failure modes, the default annotation behavior, and the downstream action. Only the return shape (image payload vs. saved path) is left implicit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 meaning the schema does not: it explains why `annotate_elements=True` matters (indices feed directly into `tap_element`) rather than just restating the flag. `max_width` and `save_path` are left to the schema, which is adequate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('获取手机屏幕截图') and immediately adds the distinguishing capability: the Set-of-Mark `[#0]`, `[#1]` overlays. It also names `get_ui_tree` as the different sibling, so an agent can tell the two 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit routing: prefer `get_ui_tree` for daily operations, use this only for Canvas / map rendering / games / visual verification. Both the when and the when-not are stated, plus the follow-up action `tap_element(index=编号)`.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_intentB
Root/nonroot typed Intent: activity/broadcast/service/foreground_service/stop_service, internal components, DeepLinks, MIME/categories/flags, bool/int/long/float/string/null extras. Reports am errors even if exit code is zero.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | activity | |
| root | No | ||
| wait | No | ||
| flags | No | ||
| action | No | ||
| extras | No | ||
| package | No | ||
| user_id | No | ||
| activity | No | ||
| data_uri | No | ||
| mime_type | No | ||
| categories | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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 supply one genuinely useful behavioral fact: 'Reports am errors even if exit code is zero,' which warns the agent not to trust exit status alone. It also flags the root/nonroot distinction. However, it says nothing about side effects of dispatching intents, permission requirements, or whether a failed dispatch partially applies.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is a single dense, telegraphic sentence with no wasted filler, which is efficient. But the run-on colon-separated list is hard to parse and the capability enumeration is not front-loaded as a clear statement of what the tool does.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 12-parameter, zero-annotation tool, the description covers a decent share of the surface (kinds, extras typing, MIME, categories, flags, root mode) and an output schema exists to explain returns. It still leaves wait and user_id unexplained and gives no example of a valid call, which is a meaningful gap for a tool this broad.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% (titles and defaults only), so the description must compensate, and it does partially: it maps to kind, extras types (bool/int/long/float/string/null), flags, categories, mime_type, data_uri (DeepLinks), and package/activity (internal components). But action, wait, and user_id are never mentioned, so several of the 12 parameters remain opaque.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the tool name plus an enumeration of what the Intent can be (activity/broadcast/service/foreground_service/stop_service, internal components, DeepLinks, extras types), so an agent can tell this is the general-purpose Intent dispatcher. It does not explicitly differentiate itself from the sibling start_activity_root, which overlaps with the 'activity' kind, 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.
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. The description never says to prefer this over start_activity_root for simple activity launches, nor when root vs nonroot or wait=true should be selected, leaving the agent to infer routing from a feature list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
shell_batchA
Run 1..200 CLI commands in ONE ADB process/Root session. Per-command exit codes and output, optional fail-fast; avoids one subprocess/tool call per command.
| Name | Required | Description | Default |
|---|---|---|---|
| root | No | ||
| timeout | No | ||
| commands | Yes | ||
| stop_on_error | No | ||
| max_output_bytes | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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 real behavior: single shared process/session, per-command exit codes and output, and optional fail-fast. It omits important traits for arbitrary shell execution — whether root privileges are required, whether the session persists between calls, whether timeout applies per command or to the whole batch, and how 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the core action and scope, with the rationale clause last. No filler, and the hard 200-command cap is stated up front where an agent will see it.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-value explanation is correctly omitted, and the batching model is conveyed. For a high-blast-radius arbitrary shell tool with zero annotations and zero schema descriptions, gaps around permissions/root requirement, timeout semantics, and output truncation leave the agent under-informed before invoking it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate and only partly does: "1..200" clarifies the commands array bounds, "optional fail-fast" maps to stop_on_error, and "Root session" hints at root. It says nothing about timeout (per-command vs total), max_output_bytes truncation behavior, or the label field.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Run 1..200 CLI commands") plus a scope constraint (all in ONE ADB process/Root session), which an agent can distinguish from a single-command tool. It stops short of naming the sibling to use instead (e.g., shell_execute or adb_command), which is what a 5 would require.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Avoids one subprocess/tool call per command" implies the use case is multi-command workloads and is a useful hint, but usage is only implied. There is no explicit statement of when to prefer shell_execute/adb_command for a single command, nor any exclusion or prerequisite condition.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
shell_executeB
Run an arbitrary Android shell command, optionally su uid=0. Returns real exit_code/stdout/stderr/timeout/truncation. Device-side timeout when supported; never invokes a host shell.
| Name | Required | Description | Default |
|---|---|---|---|
| root | No | ||
| command | Yes | ||
| timeout | No | ||
| max_output_bytes | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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 execution is device-side only ("never invokes a host shell"), that timeouts are device-side when supported, that root is achieved via su uid=0, and that output may be truncated — but it omits what happens if the device is not rooted, whether commands are destructive, and permission/error behavior. The return-field listing largely duplicates the output schema, so real added value is moderate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense, front-loaded sentences with no filler; the key constraint (host shell exclusion) lands early. The telegraphic phrasing ("optionally su uid=0", "real exit_code/stdout/stderr") is efficient but slightly opaque to a non-expert reader.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 4-parameter, unannotated, high-risk arbitrary-execution tool, the description covers the execution model and output shape but leaves side-effect risk, root prerequisites, and per-parameter tuning undocumented. The existing output schema offsets the need to explain return values in detail.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate. It explains `root` semantics (su to uid 0) and gesture at `timeout` (device-side) and `max_output_bytes` (truncation), but gives no units, defaults, or guidance on choosing values, and `max_output_bytes` is never named directly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a concrete verb+resource ("Run an arbitrary Android shell command") and adds the distinguishing scope detail "never invokes a host shell," which separates it from the adb/host-shell siblings. It doesn't name specific siblings like root_shell or shell_batch, so differentiation is implied 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: "arbitrary" suggests this is the catch-all shell tool, and the host-shell note hints at when to prefer it over adb_command. There is no explicit when-to-use vs root_shell, shell_batch, or device_files, and no stated prerequisites for root mode.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sqlite_databaseA
Query a private SQLite DB without a phone sqlite3 binary; copies DB+WAL+SHM, parameterized SQL, BLOB base64 and bounded rows. write=true requires package+stop_app=true; backs up sidecars and installs an atomic checkpointed DB, leaving app stopped. Live reads are best effort. SQLCipher needs its own engine/key.
| Name | Required | Description | Default |
|---|---|---|---|
| sql | No | ||
| write | No | ||
| package | No | ||
| database | Yes | ||
| max_rows | No | ||
| stop_app | No | ||
| parameters | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations supplied, the description carries the burden and delivers real operational detail: it copies DB+WAL+SHM rather than touching the live file, backs up sidecars, installs an atomic checkpointed DB, leaves the app stopped, and returns BLOBs as base64 with bounded rows. It still omits whether root is required, whether the app is restarted afterwards, and how the pre-write backup is restored, which keeps it off a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core capability, then semicolon-delimited clauses each carrying distinct information; nothing is redundant. It is telegraphic to the point of being slightly cryptic in places ('bounded rows', 'sidecars'), but no sentence is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex seven-parameter tool with a write path that alters app state, the description covers the pipeline, the write prerequisites, and known limitations, and an output schema exists so return values need not be explained. The remaining gap is argument shape rather than behavior, so it is close to complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so all seven parameters rely on the description, which does add meaning for several: 'parameterized SQL' covers sql/parameters, 'bounded rows' maps to max_rows, and 'write=true requires package+stop_app=true' explains a three-parameter interaction. But it never says what format `database` takes (absolute path? package-relative?), what the max_rows ceiling or default behavior is, or what `parameters` accepts positionally, leaving material gaps.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource pair ('Query a private SQLite DB') and immediately states a distinguishing constraint (no phone sqlite3 binary required), which tells an agent this is an in-process query path rather than a shell invocation. It does not name any of the many sibling data tools (inspect_app_data, shared_preferences, content_provider) to differentiate, so the routing value 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives strong conditional prerequisites for the write path ('write=true requires package+stop_app=true') and an exclusion ('SQLCipher needs its own engine/key'), plus a quality caveat ('Live reads are best effort'). However it never states when to pick this tool over sibling data-access tools, so the agent must infer the choice from the tool list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
start_activity_rootB
【Root 页面直达工具】利用 Root 权限强行穿透拉起任意内部私有 Activity (exported=false) 或 DeepLink Scheme,
直接一步跨越繁琐的开屏广告与多级菜单跳转!
| Name | Required | Description | Default |
|---|---|---|---|
| action | No | 可选:Intent Action(如 'android.intent.action.VIEW') | |
| extras | No | 可选:Intent Extras 键值对(自动识别 str/int/bool 转换为 --es/--ei/--ez) | |
| package | No | 应用包名(如 'com.example.app' 或 'com.android.settings') | |
| activity | No | 目标 Activity 名称(支持未导出的私有 Activity,如 '.map.main.MainActivity'),留空则启动应用默认主页 | |
| data_uri | No | 可选:DeepLink URI / Scheme(如 'baidumap://map/direction?...' 或 'https://...') | |
| return_ui_after | No | 启动后是否附带界面 UI 树。默认 False——启动本身有耗时,重抓全树会让等待翻倍;需要确认落地页再 ui_snapshot | |
| force_stop_first | No | 启动前是否先强行停止该应用以确保冷启动,默认 False |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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 disclose the two most important behavioral facts — root privilege is required and the normal exported=false restriction is bypassed. It says nothing about failure behavior (missing package, non-existent Activity), whether root absence causes an error or fallback, or side effects of the launch 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with a bracketed label and the core capability, which is good structure. However the exclamation marks and promotional phrasing ('强行穿透', '繁琐的开屏广告与多级菜单跳转') trade precision for marketing tone rather than stating constraints.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists and all seven parameters are documented in the schema, so return-value explanation is not required. For a root-level, security-bypassing launcher with zero annotations, the description is thin on preconditions (root availability, app installed) and on what the caller should do after launch.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the parameters (action, extras, package, activity, data_uri, return_ui_after, force_stop_first) are already fully self-documenting. The description adds conceptual context about targeting private activities and DeepLinks but no syntax, format, or precedence rules beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a concrete action (force-launch an Activity via root) and a concrete target class (internal private activities with exported=false, or DeepLink schemes), so an agent knows exactly what the tool does. It does not differentiate itself from closely related siblings such as send_intent or app_action, which leaves ambiguity about which tool owns plain intent dispatch.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied through the benefit statement about skipping splash ads and multi-level menu navigation, which hints at the 'reach a deep screen fast' scenario. There is no explicit when-to-use / when-not-to-use rule and no named alternative (e.g. send_intent for normal exported intents, ui_snapshot to verify the landing page).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
swipe_screenA
智能滑动与滚动查找工具。
支持四向滑动、自定义坐标拖拽,或设置 scroll_to_text="目标文字" 让工具自动滚屏寻找目标!
| Name | Required | Description | Default |
|---|---|---|---|
| x1 | No | 自定义起点 X | |
| x2 | No | 自定义终点 X | |
| y1 | No | 自定义起点 Y | |
| y2 | No | 自定义终点 Y | |
| scale | No | 滑动幅度比例 (0.2 ~ 0.9),默认 0.6 | |
| direction | No | 滑动方向:'up'(手指上滑浏览下方内容)、'down'、'left'、'right' | up |
| duration_ms | No | 滑动耗时毫秒数,默认 350 | |
| scroll_to_text | No | 可选:自动连续滚动屏幕直到出现包含该文本的元素为止! | |
| return_ui_after | No | 滑动后是否附带完整 UI 树。默认 False——连续滑动时每步重抓全树会拖慢节奏;滚屏找元素请直接用 scroll_to_text |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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 add real behavioral detail beyond the schema: scroll_to_text performs repeated automatic scrolling until a matching element appears, and return_ui_after is discouraged during continuous swipes for performance. However it omits critical behavior for a looping tool — any iteration cap, timeout, or what happens when the target text never appears — and says nothing about failure modes or that swiping mutates screen state.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the purpose followed by the three modes in ascending order of sophistication. Minor waste remains: '智能' (intelligent/smart) is unsubstantiated marketing framing, and the exclamation mark adds no information, though the text is otherwise tight for a 9-parameter tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and the description covers the three invocation modes adequately. The gap is behavioral completeness for the most complex mode: scroll_to_text can run unbounded, and nothing is said about termination, failure, or how much it scrolls before giving up — information an agent needs to decide whether to call it or to use find_elements instead.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 genuinely adds meaning the schema cannot: it groups x1/y1/x2/y2 into a 'custom drag' mode, direction into 'four-direction swipe', and scroll_to_text as a distinct auto-scroll mode, making the mode selection legible. The return_ui_after sentence also explains the tradeoff behind a parameter whose schema text only gives the default.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first line names a specific verb+resource pair (swipe/scroll the screen) and then enumerates the three operating modes: four-direction swipe, custom coordinate drag, or scroll_to_text search. An agent can tell what it does without opening the schema. It does not name a sibling (e.g. perform_gesture) as the alternative, 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied rather than stated: the agent infers 'use this when you need to scroll or drag on screen', and the description hints that scroll_to_text is the right choice for finding an element by text. There is no explicit when-not guidance, no mention of how this differs from perform_gesture, batch_ui_actions, or find_elements + tap_element, which are the obvious neighbors.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
system_propertyA
Read Android properties or set them using setprop; resetprop=true explicitly requests the installed Root resetprop utility. Does not install/assume Magisk.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| value | No | ||
| action | No | get | |
| resetprop | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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 a genuine behavioral constraint — that resetprop requires an already-installed Root resetprop utility and will not provision Magisk — which is real value. It says nothing about whether setprop writes need root, whether changes persist across reboot, or what happens on failure, which matters for a mutation-capable tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences, front-loaded with the read/write distinction, and the resetprop caveat follows immediately. Every clause carries information; the phrasing 'explicitly requests the installed Root resetprop utility' is slightly awkward but not wasteful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described, and the description covers the read/write split plus the resetprop prerequisite. What is missing is the accepted values for 'action' and the failure semantics of a property write on a non-rooted or Magisk-less device. Given the tool's simplicity and the presence of an output schema, that gap is moderate rather than severe.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for four undocumented parameters. It explains only resetprop's meaning and implies name/value for the property pair, but never states what values the 'action' parameter accepts (default is 'get' with no enum) or what name/value formatting rules apply. That leaves a meaningful share of the parameter space unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific resource (Android system properties) and two concrete operations (read, set via setprop), plus a separate mode (resetprop). It is clear what the tool does, though it never names the closest sibling, system_settings, 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives one conditional routing rule — use resetprop=true when you specifically want the Root resetprop utility — and a negative constraint that Magisk is not installed or assumed. There is no guidance on when to prefer this over system_settings or root_shell, and no stated prerequisites such as needing root for writes.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
system_settingsA
Read/list/put/delete exact Android global/system/secure settings; returns command failure rather than claiming unsupported settings succeeded.
| Name | Required | Description | Default |
|---|---|---|---|
| key | No | ||
| value | No | ||
| action | No | get | |
| user_id | No | ||
| namespace | No | global |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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 add a genuinely useful behavior — returning command failure instead of falsely reporting success on unsupported settings — but omits prerequisites such as root/permission needs and the destructive nature of the delete action, leaving significant gaps for a write-capable tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler; the operation list comes first and the failure-semantics caveat follows, and every clause carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values needn't be explained, and the description covers scope plus error behavior. It is slightly incomplete regarding permissions and per-action parameter meaning, but sufficient for an agent to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across five parameters, so the description must compensate. It partially does by mapping the verbs to action values and naming the global/system/secure namespaces, but user_id and the key/value semantics for each action remain unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names concrete operations (read/list/put/delete) against a precise resource (Android global/system/secure settings), so an agent knows exactly what the tool manipulates. It lacks an explicit contrast with the sibling system_property tool, which would be needed for a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied by the resource (Android settings) and the namespaces listed; there is no statement of when to choose this over system_property, content_provider, or settings-adjacent siblings, and no exclusions. Adequate orientation but no routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tap_elementA
智能语义点击工具。支持按 #index、text、text_contains、resource_id、description 或 (x, y) 点击。
点击即返回确认与耗时,不默认回抓整棵树——观察交给 ui_snapshot 的差异模式,节奏才跟得上手。
| Name | Required | Description | Default |
|---|---|---|---|
| x | No | 兜底直接点击的横坐标 X | |
| y | No | 兜底直接点击的纵坐标 Y | |
| text | No | 精确匹配元素文本(如 '设置'、'确定') | |
| index | No | 来自 get_ui_tree 或标注截图的元素编号(如 0, 1, 2) | |
| long_click | No | 是否长按,默认 False | |
| description | No | 匹配元素的 content-desc 无障碍描述 | |
| resource_id | No | 匹配元素的 resource-id 或短 id(如 'search_box' 或 'com.xxx:id/btn') | |
| wait_timeout | No | 若按文本/ID查找,最多等待元素出现的秒数,默认 3.0 秒 | |
| text_contains | No | 模糊包含匹配元素文本 | |
| wait_after_ms | No | 点击后等待界面响应的毫秒数,默认 0ms;需要等待请用条件 | |
| return_ui_after | No | 点击后是否附带完整新界面 UI 树。默认 False——这次重抓是全流程里最贵的一步(全树约 200ms + 大量上下文);连续点击时保持 False,需要看变化用 ui_snapshot(since_snapshot_id=...) 只取差异 |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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 return contract (confirmation + elapsed time), the default of not re-capturing the UI tree, and a concrete cost figure for the expensive path (~200ms full tree + heavy context). It still says nothing about failure behavior when no element matches or about precedence when multiple selectors are passed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the selector inventory then the behavioral caveat. Slightly rhetorical phrasing ('节奏才跟得上手') is the only filler; everything else earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values needn't be re-explained, and the description covers the cost tradeoff well. But for an 11-parameter tool with six mutually-overlapping selector inputs and zero annotations, the missing precedence rules and not-found behavior are meaningful gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so every one of the 11 parameters is already documented in the schema with defaults and semantics. The description's selector list mirrors the schema rather than adding syntax, precedence, or combination rules beyond it; the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('智能语义点击工具') and immediately enumerates the six selector strategies (#index / text / text_contains / resource_id / description / (x,y)), which lets an agent distinguish it from generic siblings like act or perform_gesture 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes post-click observation to ui_snapshot's diff mode ('观察交给 ui_snapshot 的差异模式') and reinforces the when-not condition for return_ui_after. It does not, however, disambiguate against sibling action tools such as element_action, act, or batch_ui_actions, which an agent would have to infer.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tool_catalogC
Discover v2 capabilities and the efficient Agent operating rules (no device connection needed).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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 add one genuinely useful fact — no device connection is required — implying a safe, static read, but it never states whether the call is side-effect free, whether results are static or version-dependent, or what the "operating rules" actually are. For an unannotated 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with the most useful constraint in parentheses, so nothing is padded. The phrasing is dense with unexplained terminology ("v2", "Agent operating rules") rather than being front-loaded on what the agent gets back.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With zero parameters and an output schema, the definition does not need to document arguments or return shape. However, for a discovery/onboarding tool the description should say what the catalog covers and how the returned rules should be applied; "v2 capabilities" leaves that ambiguous.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing for the description to disambiguate; the baseline of 4 applies. The description correctly presents this as a no-argument call.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"Discover v2 capabilities and the efficient Agent operating rules" gives a verb and a rough object, but "v2 capabilities" is undefined jargon and the description never says it returns a catalog of tools/actions. It is not differentiated from plausible siblings such as learn or agent_profile, which an agent could easily 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The only usage signal is the parenthetical "no device connection needed," which hints the tool can be called before a device is attached. There is no statement of when this should be preferred over learn, agent_profile, or device_connection, and no exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ui_describeA
Read the screen as CONTROLS, not pixels. Each tappable/viewable element is described from what Android itself reports - view class, resource-id name, accessibility description, supported action flags - never from OCR or vision. Returns a one-line summary, an ordered control list with role/label/actions/state, screen structure (top bar, bottom nav, dialogs, scroll containers, primary action), and a coverage line telling you how much the OS actually named. Prefer this over screenshots for understanding a screen.
| Name | Required | Description | Default |
|---|---|---|---|
| role | No | ||
| region | No | ||
| max_controls | No | ||
| include_containers | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description must carry the full behavioral burden. It usefully discloses the data provenance (Android-reported attributes only, no OCR/vision) and that a coverage line reports how much of the UI the OS actually named — a real caveat about output quality. It omits anything about permissions, whether the call is read-only in effect, latency, or what happens when max_controls truncates the list.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the key distinction, then data source, then return shape. A portion of the third sentence enumerates return components that the output schema already covers, which is mild redundancy, but the framing sentence earns its length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so the detailed return-value enumeration is largely redundant, while the genuinely undocumented area — the four input filters and how they narrow the result — is skipped entirely. For a tool whose whole value is targeted screen description, the filtering behavior should have been described.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across four parameters (role, region, max_controls, include_containers), so the description must compensate and does not — none of the four filters is mentioned or explained. The only hints are indirect ('ordered control list', 'include_containers' defaults), leaving the agent to guess valid role/region values and the meaning of the control cap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource and frames it decisively: 'Read the screen as CONTROLS, not pixels', with the data source spelled out (view class, resource-id, accessibility description, action flags, never OCR/vision). This immediately separates it from screenshot/vision-based siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Prefer this over screenshots for understanding a screen' gives an explicit alternative and a selection condition. However, the sibling set contains many overlapping hierarchy/introspection tools (get_ui_tree, inspect_view_hierarchy, ui_snapshot, find_elements), and the description does not say when to choose this one over those.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ui_queryA
Find controls by OS-derived semantics instead of coordinates or pixels. Filter by role (button/text_input/toggle/tab/nav_back/nav_close/list_item/search), by label substring, by text substring, by stable semantic_key, or by region. Returns matches with their semantic_key, which stays valid when the layout moves - use it to replay an action on the same control later without storing a tap position.
| Name | Required | Description | Default |
|---|---|---|---|
| role | No | ||
| region | No | ||
| max_results | No | ||
| enabled_only | No | ||
| semantic_key | No | ||
| text_contains | No | ||
| label_contains | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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 partially does so by stating what a match contains (semantic_key) and why the key stays valid across layout moves. However it omits notable runtime behaviors visible in the schema defaults: enabled_only defaults to true, so disabled controls are silently excluded, and max_results defaults to 25, so results are silently truncated — neither is disclosed. It also says nothing about whether the target UI must be in the foreground or what happens on zero matches.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the core mechanism and followed by the payoff (a stable key for replay). Every clause adds information; there is no restatement of the name or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return formatting needn't be explained, and the description still usefully says matches carry a semantic_key. For a read-only query tool with seven optional parameters this is nearly sufficient; the residual gap is the undisclosed enabled_only default filter and max_results truncation, which could cause an agent to misinterpret empty or partial results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it largely does: it documents role with the full accepted value set (button/text_input/toggle/tab/nav_back/nav_close/list_item/search), plus label_contains, text_contains, semantic_key, and region as filter modes. Only max_results and enabled_only — two parameters with real behavioral consequences — go unmentioned in both schema and description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource ("Find controls") and immediately differentiates the mechanism from coordinate/pixel-based lookup, which is the distinction an agent needs when several UI-inspection siblings exist. The enumerated filter dimensions (role, label, text, semantic_key, region) make the scope concrete.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a clear reason to use it — obtaining a semantic_key that survives layout changes so actions can be replayed later without storing a tap position — but never names or excludes alternatives such as find_elements, get_ui_tree, inspect_view_hierarchy, or element_action, despite many overlapping siblings. Usage is implied by the returned-key benefit rather than stated as 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.
ui_snapshotC
Fresh semantic UI snapshot with stable document-order indices and snapshot_id. Supply since_snapshot_id for added/removed/changed nodes; compact omits the full element array.
| Name | Required | Description | Default |
|---|---|---|---|
| compact | No | ||
| keyword | No | ||
| include_xml | No | ||
| max_elements | No | ||
| only_interactive | No | ||
| since_snapshot_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the behavioral load, and it does disclose real traits: each call produces a fresh snapshot, indices are stable in document order, a snapshot_id is returned, and compact mode omits the full element array. It says nothing about whether the snapshot is side-effect free, what happens when max_elements truncates the tree, or how the keyword filter affects results, which leaves meaningful behavioral gaps for a 6-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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two dense sentences with no filler, and the core capability is front-loaded before the parameter behavior. The second sentence packs two unrelated modes into one clause, which slightly hurts scannability but wastes no words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, but the tool exposes six parameters at 0% schema coverage with no annotations and several siblings competing for the same job. The description covers two parameters and no selection criteria, which is not enough for an agent to invoke this correctly on the first attempt.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must explain all six parameters and explains only two: since_snapshot_id and compact. keyword, include_xml, max_elements, and only_interactive are entirely undocumented in both schema and description, leaving the agent to guess at filtering and truncation semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a concrete resource (a fresh semantic UI snapshot) plus two defining properties: document-order indices that are stable, and a snapshot_id. That is far more specific than a name restatement. It never distinguishes itself from near-siblings such as get_ui_tree, inspect_view_hierarchy, or ui_describe, so an agent has no explicit basis for choosing among the snapshot-family tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The clause 'Supply since_snapshot_id for added/removed/changed nodes' is parameter guidance, not tool-selection guidance. There is no statement of when to call ui_snapshot versus ui_query, find_elements, or get_ui_tree, and no preconditions or exclusions are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wait_for_conditionB
Wait for exists/gone/foreground/shell-exit-and-output/stable UI. Missing UI transport never counts as 'gone'. Replaces blind sleep calls.
| Name | Required | Description | Default |
|---|---|---|---|
| timeout | No | ||
| condition | Yes | ||
| poll_interval | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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 add one genuinely valuable nuance — 'Missing UI transport never counts as gone' — which prevents a false-positive pass on the 'gone' condition. It says nothing about blocking vs. non-blocking behavior, what happens on timeout, or how polling/stability sampling works.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three very short sentences, front-loaded with the capability and followed by the key caveat and the motivating alternative. No filler; the telegraphic style ('shell-exit-and-output') is dense but slightly at the cost of readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, but with zero annotations and zero schema description coverage this tool's nested Condition/Selector structure is essentially undocumented in prose. For a wait primitive with subtle semantics (timeouts, stability sampling, transport absence), the definition does far too little.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description only glosses the condition kinds. The three top-level parameters (timeout, poll_interval, condition) and the large nested Selector object (~20 fields) get no semantic explanation — timeout units, poll cadence, and how selectors combine are all left to the agent to infer.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Uses an explicit verb ('Wait for') plus an enumeration of the wait kinds (exists/gone/foreground/shell-exit-and-output/stable) that maps onto the Condition.kind enum, so the agent knows exactly what the tool does. It does not name which sibling to use for adjacent needs (get_ui_tree, find_elements, ui_snapshot), so sibling 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Replaces blind sleep calls' gives a clear when-to-use signal against a common alternative. There is no when-not guidance, no mention of prerequisites (e.g. needing a prior snapshot or selector), and no steering toward other waiting/inspection siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
webview_controlB
Fast WebView/Chrome control using exposed DevTools sockets: discover/pages/dom/click/fill/evaluate/navigate/close. Uses DOM/CSS instead of pixel clicks; only debuggable WebViews. evaluate/click/fill require optional websocket-client.
| Name | Required | Description | Default |
|---|---|---|---|
| css | No | ||
| url | No | ||
| value | No | ||
| action | No | discover | |
| socket | No | ||
| page_id | No | ||
| timeout | No | ||
| max_nodes | No | ||
| expression | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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 transport (exposed DevTools sockets), the hard scope limit (debuggable WebViews only), and a dependency caveat for the mutating/executing actions. It does not state that click/fill mutate page state, what happens on timeout, or what a socket/page_id refers to, leaving meaningful gaps for a 9-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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two dense, front-loaded sentences with no filler; the operation list and the two hard constraints come immediately. The slash-separated action enumeration is terse to the point of being cryptic, which slightly undercuts readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained. Given the tool's complexity (9 params, multi-action dispatch, no annotations, 0% schema coverage), the description covers the important preconditions but omits how parameters combine per action, which is the main thing an agent still needs.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 9 parameters, so the description must compensate and largely does not. The action list hints at what the 'action' parameter accepts and implies that css/value/expression pair with click/fill/evaluate, but socket, page_id, timeout, and max_nodes are never explained and no parameter is mapped explicitly to its action.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a concrete verb+resource (WebView/Chrome control over exposed DevTools sockets) and enumerates the supported operations: discover/pages/dom/click/fill/evaluate/navigate/close. It also implicitly distinguishes itself from pixel-based UI siblings by stating 'Uses DOM/CSS instead of pixel clicks' and 'only debuggable WebViews'. It stops short of naming a specific sibling alternative, so it is not a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is real usage scoping: only debuggable WebViews are supported, and evaluate/click/fill need the optional websocket-client dependency. However, there is no explicit guidance on when to prefer this over the many sibling UI tools (tap_element, element_action, act, get_ui_tree) that operate on native views, nor any when-not conditions beyond the debuggable-WebView limit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
workflow_controlA
Inspect or cooperatively cancel an active workflow from another request. Cancellation stops subsequent steps; in-flight device/RPC calls finish or time out first.
| Name | Required | Description | Default |
|---|---|---|---|
| action | No | status | |
| run_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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 real work: it explains that cancellation only stops subsequent steps and that in-flight device/RPC calls either complete or time out first. That is exactly the kind of non-obvious side-effect semantics an agent needs before cancelling. It omits permission/precondition and what identifying a run requires.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero filler, and the operative distinction (inspect vs cancel) plus the key caveat (in-flight calls finish first) are both front-loaded. Nothing is repeated from structured fields.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Return values are covered by the output schema, and the cancellation semantics are well handled, so the two-sentence length is defensible. But for a tool whose only two parameters have zero schema documentation, the description should still say which action values exist and whether run_id is needed — that gap keeps it at minimum viable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the description never mentions either parameter. 'action' defaults to 'status' and 'run_id' defaults to null, yet the description gives no indication of valid action values (presumably status vs cancel), whether run_id is required for cancel, or what 'status' returns when run_id is omitted. The description therefore leaves the entire parameter surface undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description states a specific pair of verbs (inspect / cooperatively cancel) applied to a specific resource (an active workflow), and the 'from another request' framing separates it from the workflow-launching siblings run_workflow and saved_workflow. It stops short of enumerating the action values that drive the operation, but the core 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'from another request' hints at the intended context (out-of-band monitoring/kill from a different session), and 'cooperatively' signals that this is not a hard abort. However, it never states when to prefer this over just letting a workflow finish, nor does it name run_workflow/saved_workflow as the launching counterparts, 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.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
57 tool updates
v2.0.0- First observed
act - First observed
adb_command - First observed
agent_profile - First observed
app_action - First observed
app_data_archive - First observed
app_permissions - First observed
batch_ui_actions - First observed
compare_screenshot - First observed
content_provider - First observed
deploy_and_verify_apk - First observed
device_connection - First observed
device_control - First observed
device_diagnostics - First observed
device_doctor - First observed
device_files - First observed
device_job - First observed
element_action - First observed
export_apks - First observed
file_transfer_root - First observed
fill_form - First observed
find_elements - First observed
get_device_status - First observed
get_ui_tree - First observed
input_text - First observed
inspect_app_data - First observed
inspect_lsposed - First observed
inspect_view_hierarchy - First observed
learn - First observed
manage_app - First observed
optimize_device_for_agent - First observed
perform_gesture - First observed
port_forward - First observed
press_key - First observed
query_system_provider - First observed
read_logcat_smart - First observed
record_screen - First observed
root_shell - First observed
run_workflow - First observed
saved_workflow - First observed
screenshot_annotated - First observed
send_intent - First observed
shared_preferences - First observed
shell_batch - First observed
shell_execute - First observed
sqlite_database - First observed
start_activity_root - First observed
swipe_screen - First observed
system_property - First observed
system_settings - First observed
tap_element - First observed
tool_catalog - First observed
ui_describe - First observed
ui_query - First observed
ui_snapshot - First observed
wait_for_condition - First observed
webview_control - First observed
workflow_control
TDQS
Scored across 57 tools
Multiple clusters of near-duplicate tools exist: tap_element / act / element_action / batch_ui_actions all perform interactions; ui_snapshot / get_ui_tree / ui_describe / ui_query / find_elements / inspect_view_hierarchy all read the screen; shell_execute / root_shell / adb_command / shell_batch all run commands; shared_preferences / sqlite_database / inspect_app_data / content_provider all read app data. The surface is effectively two overlapping generations of API (v1 'classic' tools plus a 'v2' agent toolkit announced by tool_catalog), so an agent must guess which of several plausible tools to use.
Most names are snake_case, but the conventions vary widely: verb_noun (get_ui_tree, run_workflow, send_intent), noun_verb (device_control, app_action, device_files, record_screen), bare verbs (act, learn), and noun-only names (tool_catalog, saved_workflow, adb_command). Individually readable, but there is no predictable pattern an agent can rely on to infer a tool's name.
57 tools is far past the 3-15 sweet spot, and much of the bulk is duplicated capability across v1 and v2 layers rather than genuinely distinct functionality. The Android-automation domain is broad enough to justify a large surface, but the overlap makes the set feel accumulated rather than curated.
Coverage is unusually thorough: UI perception and interaction, gestures, forms, workflows with persistence and cancellation, root and non-root shell, background jobs, file management and transfer, app lifecycle/permissions/APK export, intents, WebView control, screen recording, pixel regression, logcat triage, and LSPosed/KernelSU debugging. Almost every lifecycle stage has an entry point, with no obvious dead ends.
Maintenance
Related MCP Connectors
Cloud Android phones for AI agents: read the screen, tap, type, install APKs, park and resume.
Cloud Android phones for AI agents: create a phone, read the screen, tap, type, install APKs, park.
Give your AI agent a real cloud Android phone: push APKs, drive it, get screenshots and logs.
Let AI agents control Android and iOS devices on Mobilerun Cloud: screen, input, apps, workflows.
Related MCP Servers
- AlicenseCqualityAmaintenanceA lightweight bridge enabling AI agents to perform real-world tasks on Android devices such as app navigation, UI interaction, and automated QA testing without requiring computer-vision pipelines or preprogrammed scripts.14915MIT
- AlicenseNot gradedqualityAmaintenanceEnables AI agents to operate a real Android phone through its accessibility service, exposing screen trees with stable refs, taps, typing, gestures, notifications, apps, and other device controls.4MIT
- AlicenseNot gradedqualityAmaintenanceLets AI agents see and use a real Android phone over Wi-Fi: read the screen, find elements by text or ID, tap, type, swipe, take screenshots and read notifications, without ADB or root.458MIT
- AlicenseAqualityAmaintenanceEnables AI agents to see and drive a real Android phone over plain ADB: screenshots and numbered UI trees, gestures, typing with accents and emoji, SMS/RCS reading and prepared replies, notifications, files, and settings, with no root and no app installed on the phone. Safeguards mask security codes and require explicit confirmation before sending, paying, deleting or confirming anything.182MIT