adb-mcp
Provides comprehensive control over Android devices via the Android Debug Bridge (adb), including UI automation, app management, file operations, logging, network configuration, and system inspection.
Supports root-level file operations and other privileged actions on devices rooted with Magisk, extending file management capabilities.
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., "@adb-mcplist installed packages"
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.
adb-mcp
A comprehensive, structured-output MCP server around the Android Debug Bridge.
Give an AI agent (Claude Code, or any MCP client) direct, first-class control of an Android device — launch apps, drive the UI, capture logs and screenshots, push/pull files, wire up port forwards — so the workflow becomes:
agent → launch_package() → capture_screen() → tap_element("Send") → logcat_dump() → pull() → analyse()…with no copy/paste of shell output, and no unrestricted adb shell tool (that
escape hatch is opt-in and off by default).
90 tools across 9 groups. Every tool returns structured JSON — never raw terminal text.
Why
The usual loop is: you type adb shell …, copy the output, paste it to the AI, it
reasons, tells you the next command, you type it. adb-mcp collapses that into tools the
agent calls itself. It was built for mobile reverse-engineering / QA automation, but
works for any adb task.
Related MCP server: DeepADB
Design principles
Idempotent, named operations —
force_stop(pkg),reverse_port(...)— notexecute_any_shell_command().Structured outputs —
{"pid": 8421, "status": "running"}, not a wall of text.Scoped, not omnipotent — no generic shell by default.
run_shellexists only as an explicit opt-in (ADB_MCP_ALLOW_SHELL=1). Destructive tools (delete_file,clear_app_data,uninstall) are clearly named anddelete_filerefuses protected roots (/,/system,/data, …).Multi-device aware — every device tool takes an optional
serial;get_devicesflagsis_usbso you can tell a USB phone from a network/emulator target (e.g. WSA).
Install
pip install adbmcp # from PyPI
# or from a clone:
pip install -e .PyPI package name is
adbmcp; the import package andpython -mtarget areadb_mcp, and the installed console command isadbmcp.
Requires Python ≥ 3.10 and the Android platform-tools (adb) on your machine.
adb is auto-detected from ANDROID_HOME, the default SDK location, scoop, or PATH;
override with ADB_PATH.
Register with an MCP client
An MCP server is just a program the client launches and talks to over stdio.
"Installing" it means telling your client what command to run plus any env — the
same three things everywhere: command, args, env. After pip install adbmcp
you get both an adbmcp command and python -m adb_mcp.server; use whichever your
client resolves (see the Windows PATH note if a bare adbmcp
isn't found). Sanity-check it launches:
adbmcp # starts and waits on stdio; Ctrl-C to exit. No output = healthy.claude mcp add adb --env ADB_SERIAL=RFCWC17BKJY -- adbmcpAdd --scope user to enable it in every project. Or drop a .mcp.json in a project
root (see examples/mcp.json):
{
"mcpServers": {
"adb": {
"command": "adbmcp",
"args": [],
"env": {
"ADB_SERIAL": "RFCWC17BKJY", // optional default device
"ADB_MCP_ALLOW_SHELL": "0" // set "1" to enable run_shell
}
}
}
}Run /mcp inside Claude Code to confirm it connected.
Edit claude_desktop_config.json (Windows: %APPDATA%\Claude\, macOS:
~/Library/Application Support/Claude/) and restart the app:
{
"mcpServers": {
"adb": {
"command": "adbmcp",
"args": [],
"env": { "ADB_SERIAL": "RFCWC17BKJY" }
}
}
}codex mcp add adb -- adbmcp, or add to ~/.codex/config.toml:
[mcp_servers.adb]
command = "adbmcp"
args = []
[mcp_servers.adb.env]
ADB_SERIAL = "RFCWC17BKJY"Add to opencode.json (project root) or ~/.config/opencode/opencode.json:
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"adb": {
"type": "local",
"command": ["adbmcp"],
"enabled": true,
"environment": { "ADB_SERIAL": "RFCWC17BKJY" }
}
}
}.cursor/mcp.json (project) or ~/.cursor/mcp.json (global) — same shape as Claude:
{
"mcpServers": {
"adb": { "command": "adbmcp", "args": [], "env": { "ADB_SERIAL": "RFCWC17BKJY" } }
}
}.vscode/mcp.json — note the servers key and explicit type:
{
"servers": {
"adb": { "type": "stdio", "command": "adbmcp", "args": [], "env": { "ADB_SERIAL": "RFCWC17BKJY" } }
}
}Any other MCP-capable client (Cline, Zed, Windsurf, …) works the same way — point it at
the adbmcp command with your env; only the config file location differs.
Windows PATH note. Clients spawn the server in their own environment and may not inherit your shell's PATH, so a bare
adbmcpcan fail to resolve. If a client won't start it, use the absolute interpreter + module form (and pinADB_PATHtoo):{ "command": "C:\\Users\\you\\AppData\\Local\\Programs\\Python\\Python312\\python.exe", "args": ["-m", "adb_mcp.server"], "env": { "ADB_PATH": "C:\\Users\\you\\AppData\\Local\\Android\\Sdk\\platform-tools\\adb.exe", "ADB_SERIAL": "RFCWC17BKJY" } }
Configuration
env var | meaning |
| Path to |
| SDK root used for adb auto-detection. |
| Default device serial. USB phone: |
|
|
Every device-facing tool also accepts a serial argument to override per call, and you
can switch the session default at runtime with set_default_device.
Tool reference (90)
Device (15)
get_devices · get_state · adb_version · get_device_properties · get_screen_info
· get_battery · connect · disconnect · wait_for_device · reboot
· set_default_device · get_default_device · root_adb · unroot_adb · remount
Apps (16)
list_packages · launch_package · launch_activity · force_stop · kill_background
· clear_app_data · app_status · get_current_activity · get_package_info
· install_apk · uninstall · grant_permission · revoke_permission
· set_package_enabled · start_service · send_broadcast
Input (12)
tap · long_press · swipe · drag · text · keyevent · press_home
· press_back · press_recents · press_power · press_enter · wake_and_unlock
UI automation (3)
dump_ui · find_elements · tap_element — parse the live view hierarchy
(uiautomator) and tap elements by text / resource-id / content-description instead of
guessing pixel coordinates.
Logs (8)
logcat_start · logcat_stop · logcat_dump · logcat_filter · logcat_clear
· get_crash_log · get_anr_traces · capture_bugreport — background capture with
parsed records {time, pid, tid, level, tag, message}.
Media (5)
capture_screen (inline PNG) · capture_screen_to_file · capture_screen_base64
· record_screen_start · record_screen_stop
Files (9)
list_files · file_exists · stat_file · pull · push · read_file
· write_file · make_dir · delete_file — read_file/write_file/list_files
support as_root (su -c …) for rooted devices (WSA/Magisk).
Network (11)
forward_port · reverse_port · list_forwards · list_reverses · remove_forward
· remove_reverse · clear_forwards · get_ip_address · set_wifi · set_mobile_data
· set_airplane_mode — reverse_port maps a device port to your PC (local API/CDN shims).
System (11)
get_prop · set_prop · get_setting · put_setting · list_processes · get_meminfo
· get_top · get_uptime · dumpsys (scoped to a named service) · list_services
· run_shell (opt-in)
Example: investigate an in-app action
Prompt: "Find what happens when I send a fleet."
launch_package("com.geargames.homeworld")
capture_screen() # observe
tap_element(text="Fleet") # navigate via the view hierarchy
logcat_start(clear=True)
tap_element(text="Send") # trigger
logcat_dump(tags=["Unity","libc"]) # structured records
pull("/sdcard/Android/data/com.game/files/save.db", "dumps/save.db")Local-server / shim workflow
reverse_port(device_port=7071, host_port=7071) # app's localhost:7071 -> your PC shim
reverse_port(device_port=7072, host_port=7072)
launch_package("com.geargames.homeworld")
logcat_filter(tags=["Curl","PlayFab"])Development
pip install -e ".[dev]"
pytest -q # device-free smoke tests (imports, registration, parsers)
ruff check .CI runs the same on Python 3.10–3.12.
Safety
MCP servers execute local commands and can touch files, logs, and devices, so overly permissive ones become dangerous when an agent chains their tools. adb-mcp is deliberately scoped:
No always-on arbitrary shell.
run_shellis the only general-shell tool and it is off unlessADB_MCP_ALLOW_SHELL=1.Injection-hardened.
adb shellconcatenates its args through the device'ssh, so every list-form command isshlex.quoted in one central place — a payload like"; rm -rf /sdcard"in a package name ordumpsysarg becomes a literal argument, never a second command. Covered by tests.Few, guarded mutating tools —
write_file,delete_file(refuses/,/system,/data, …),clear_app_data,uninstall,install_apk,set_prop,put_setting, theset_*network toggles.
Point it at a device you own and trust, run one server per intended device (use
ADB_SERIAL/serial), and leave ADB_MCP_ALLOW_SHELL off unless you need it.
See SECURITY.md for the full model.
License
MIT — see LICENSE.
Available Tools
90 toolsadb_versionA
Return the host adb client version string and the resolved adb path.
| 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 provided, so the description carries the full burden. It does disclose the returned content (version string plus resolved path) and implicitly signals a side-effect-free, read-only query, but it says nothing explicit about whether the adb binary is probed, what happens if adb is missing, or whether a device connection is required. Adequate but shallow.
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?
One front-loaded sentence with zero filler; both facts the caller needs are in the first clause. Nothing is repeated from the schema or 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?
For a no-parameter, output-schema-backed informational tool, the description is complete: it says what is returned and which side (host vs device) it applies to. Return-value formatting is already covered by the output schema, so no further detail is required.
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 per the rubric the baseline is 4. Nothing in the description contradicts or misrepresents the empty argument object.
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 ('Return') and precisely names the two resources produced: the host adb client version string and the resolved adb path. The phrase 'host adb client' disambiguates it from device-side siblings like get_prop, get_device_properties, or get_state, none of which report client-side binary information.
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, when-not-to-use, or alternative named. Usage is only implied by the description itself (call it when you need the adb client version or its resolved path), which is the definition of implied guidance. For a trivial zero-argument informational tool this is tolerable, but nothing is stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
app_statusC
Return {package, pid, running} for a package.
| Name | Required | Description | Default |
|---|---|---|---|
| serial | No | ||
| package | 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 of behavioral disclosure. It implies a read-only operation by saying 'Return', but does not state permissions, whether it runs on a specific device, how the optional serial parameter affects behavior, or what happens on failure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no wasted words. Its brevity is appropriate for a simple status lookup, though it is arguably too terse to be fully useful.
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 has two parameters and no annotations, and an output schema exists so return-value details are not required. However, the description omits guidance on the serial parameter, usage context, and behavioral constraints, leaving meaningful gaps for an agent invoking it 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%, so the description should compensate for undocumented parameters. It only indirectly references the required package parameter and gives no explanation of the optional serial parameter or its default/null behavior.
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 clear verb and resource: it returns package, pid, and running status for a package. This distinguishes it from broad listing tools like list_packages, though it does not explicitly differentiate itself from get_package_info or other status-related 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?
There is no guidance on when to use this tool versus alternatives such as get_package_info, list_processes, or get_state. The description merely states what is returned and leaves the agent to infer the appropriate context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
capture_bugreportB
Capture a full bugreport zip to local_path (slow; can take minutes).
| Name | Required | Description | Default |
|---|---|---|---|
| serial | 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, the description carries the full burden; it usefully discloses the performance characteristic (slow, minutes) and that the output is a zip written to local_path. However, it omits whether root/adb authorization or a specific device state is required, and gives no sense of size or failure conditions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with the destination first and the timing caveat parenthetically; every clause earns its place with no redundancy.
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 destination and latency. Still missing for a device-capture operation are authorization/root prerequisites and the meaning of the unexplained serial parameter.
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 2 parameters. The description clarifies that local_path is the zip destination, adding value, but the optional 'serial' parameter is left entirely unexplained and must be inferred from sibling patterns.
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 ('Capture') and resource ('full bugreport zip') plus the destination parameter ('local_path'), which an agent can distinguish from logcat_* and get_crash_log siblings. It is clear but stops short of explicitly contrasting itself with those narrower diagnostic 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?
The '(slow; can take minutes)' note hints at a cost-based tradeoff but gives no explicit when-to-use guidance and never names alternatives like get_crash_log or get_anr_traces that produce faster, narrower diagnostics.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
capture_screenA
Capture a screenshot and return it as an inline PNG image. If save_path is given, also writes the PNG there. Ideal for an observe->decide->tap loop / OCR.
| Name | Required | Description | Default |
|---|---|---|---|
| serial | No | ||
| save_path | No |
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 the return channel (inline PNG) and the conditional side effect of save_path, but says nothing about device/serial targeting, failure behavior when no device is connected, latency, or whether capture is safe/non-destructive.
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 with the core action and return value front-loaded, then the optional side effect, then 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?
For a two-parameter tool with no output schema and no annotations, the description covers the important output channel and the save_path side effect, which is genuinely helpful. It is still incomplete on the serial parameter and on error/no-device behavior.
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 for both parameters. It explains save_path well ('also writes the PNG there'), but serial is never mentioned, leaving an agent to guess its meaning and default behavior.
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 ('Capture a screenshot') and adds the return format ('inline PNG image'), which implicitly separates it from capture_screen_to_file and capture_screen_base64. It stops short of naming those siblings explicitly, so an agent must still infer which capture variant 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?
It gives a usage context ('Ideal for an observe->decide->tap loop / OCR'), which is more than nothing. However, it never states when NOT to use it or points to the closest alternatives (capture_screen_to_file, capture_screen_base64), so routing between the three capture tools is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
capture_screen_base64A
Capture a screenshot and return {format, bytes, base64} — for when a raw base64 payload is preferred over an inline image.
| Name | Required | Description | Default |
|---|---|---|---|
| serial | 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 carries the full burden. It does disclose the return payload keys (format, bytes, base64), which is useful, but says nothing about device selection, permission/auth requirements, or what happens when no device is connected.
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 the return shape with no filler. 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?
The tool is simple and an output schema exists, so return values needn't be re-explained. However, with zero annotations and an entirely undocumented 'serial' parameter, the description leaves device targeting and prerequisites unstated.
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?
There is one parameter, 'serial', with 0% schema description coverage, and the description does not mention it at all. It neither explains that it selects the target device nor what the default (null) resolves to, so it does not compensate for the schema gap.
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 ('Capture a screenshot') and specifies the return payload shape ({format, bytes, base64}). The trailing clause implicitly distinguishes it from the inline-image variant (capture_screen), but does not name 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?
Gives a clear selection condition: use when 'a raw base64 payload is preferred over an inline image.' This is a usable when-to-use rule, though it never names the alternative tool (capture_screen) or the file variant (capture_screen_to_file), leaving the routing partly inferential.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
capture_screen_to_fileA
Capture a screenshot and save it to save_path, returning {status, path, bytes}
(no inline image — use when you only need the file).
| Name | Required | Description | Default |
|---|---|---|---|
| serial | No | ||
| save_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, the description carries the full burden, and it does disclose the return shape ({status, path, bytes}) and confirms no inline image is returned. However it says nothing about whether an existing file at save_path is overwritten, whether parent directories are created, or what happens if the capture 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?
A single tight sentence plus a short parenthetical discriminator; the output artifact and the routing hint are front-loaded with zero wasted prose.
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 details are covered, and the description adds the key behavioral fact (file-only, no inline image) plus the destination parameter. The only real gap is the undocumented `serial` parameter and file-overwrite behavior.
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. It adequately explains save_path (the destination of the capture) but says nothing about `serial`, leaving the device-selection/default behavior 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?
States a specific verb and resource ('capture a screenshot and save it to save_path') and names the produced artifact. It also implicitly separates itself from the inline-image siblings by saying 'no inline image', though it never names capture_screen or capture_screen_base64 directly.
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?
'use when you only need the file' gives an explicit selection condition that routes the agent away from the inline-image variants. No exclusions or sibling names are given, but the criterion is concrete enough to choose correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
clear_app_dataB
Clear ALL app data for a package (destructive: wipes saves/cache/prefs).
| Name | Required | Description | Default |
|---|---|---|---|
| serial | No | ||
| package | 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 the destructive nature and what is wiped (saves/cache/prefs). However, it omits whether root is required, whether the app must be stopped first, and whether the operation is irreversible or prompts for confirmation.
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 zero filler; the destructive warning is embedded where it is immediately visible rather than 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 not be described, and the destruction warning covers the biggest risk. Still missing for a mutation tool with no annotations are the serial parameter's meaning and any operational prerequisites or post-state behavior.
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 two parameters. The description conveys that 'package' identifies the target, but the 'serial' parameter (device selection) is entirely unexplained in both schema and description, so the description does not compensate for the coverage gap.
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 ('clear') and resource ('ALL app data for a package'), and the parenthetical 'wipes saves/cache/prefs' sharpens the scope beyond a generic 'clear'. It does not explicitly differentiate from close siblings like uninstall or force_stop, which an agent might reasonably confuse with data wiping.
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?
No when-to-use guidance, no prerequisites, and no mention of alternatives such as uninstall (removes the app) or force_stop (stops it). The agent must infer that this is the reset-to-fresh-install operation from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
clear_forwardsB
Remove ALL forward and reverse rules for the device.
| Name | Required | Description | Default |
|---|---|---|---|
| serial | 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 burden. It does disclose that this is a destructive bulk removal of both forward and reverse rules, which is useful. However, it says nothing about required permissions/root, reversibility, or effects on active connections.
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?
One short sentence, front-loaded with the verb and the scope-critical word 'ALL'. Nothing extraneous.
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. But for a destructive, no-annotation tool with an undocumented parameter, the description leaves gaps around device targeting and operational prerequisites.
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 the single 'serial' parameter, so the schema provides no meaning. The description only hints at device targeting via 'for the device' and never explains what serial does or that it defaults to null (current/default device).
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 (remove/clear) and resource (forward and reverse rules), and the scope qualifier 'ALL' distinguishes it from the single-rule siblings remove_forward and remove_reverse. It doesn't name those siblings explicitly, so differentiation is implied rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'ALL' implies the bulk-clear use case versus individual removal, but there is no explicit statement of when to use this instead of remove_forward/remove_reverse or list_forwards, and no prerequisites 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.
connectB
adb connect ip:port — attach a network device (WSA, emulator, wireless).
| Name | Required | Description | Default |
|---|---|---|---|
| host_port | 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, yet it discloses nothing about failure modes (unreachable host, timeout), whether an adb server must be running, authentication requirements, or whether this mutates persistent device state. The 'adb connect' passthrough hints at a network handshake but no operational detail is given.
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 line with the underlying command and purpose front-loaded; nothing is wasted and no filler sentences dilute 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 values need not be explained, and the tool is simple with one parameter. Still, for a network-connection operation with zero annotations, the description omits failure behavior and preconditions an agent would want 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?
With 0% schema description coverage, the description must compensate for the single 'host_port' parameter. It does add the crucial 'ip:port' format hint, which is genuinely useful, but stops short of documenting port defaults, address syntax edge cases, or IPv6 handling.
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 (attach) and resource (network device) and lists concrete examples (WSA, emulator, wireless), so an agent understands this connects to a device over the network. It does not explicitly differentiate from the sibling 'disconnect', which is its direct inverse, but the purpose itself 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 'attach a network device' implies the usage context (network-attached targets rather than USB/local), which is meaningful given the many device-management siblings. However, it never states when-not to use it or names an alternative, leaving the agent to infer that 'disconnect' is the inverse and 'get_devices' checks the result.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_fileA
Delete a device file or (recursive=True) directory. DESTRUCTIVE. Refuses obviously dangerous roots like '/', '/system', '/data'.
| Name | Required | Description | Default |
|---|---|---|---|
| remote | Yes | ||
| serial | No | ||
| as_root | No | ||
| recursive | 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 and does disclose two important traits: the operation is DESTRUCTIVE and it refuses obviously dangerous roots like '/', '/system', '/data'. It stops short of covering irreversibility or the root/permission requirements of the as_root path.
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 operation, with the destructive warning and guardrail surfaced immediately. No 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?
An output schema exists, so return values need no explanation. For a destructive, unannotated file operation, the description covers the key safety signal and refusal behavior but omits permission/root semantics and irreversibility, leaving gaps an agent would want filled.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 4 parameters, so the description must compensate. It only clarifies recursive=True; the meaning of remote, serial, and especially as_root (root escalation requirements) is left 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?
States a specific verb and resource ('Delete a device file or ... directory') and scopes it to device files, distinguishing it from the many app-management and I/O siblings (write_file, pull, push, make_dir). An agent can identify the operation immediately.
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 by the description and the recursive flag is explained, but no alternatives are named (e.g., uninstall or clear_app_data for app data) and no prerequisites are stated for the as_root path. It does hint at a guardrail for dangerous roots, which is closer to behavior than usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
disconnectA
adb disconnect a network device (or all if host_port omitted).
| Name | Required | Description | Default |
|---|---|---|---|
| host_port | 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 one meaningful behavior — that omitting host_port disconnects ALL devices, which is an important blast-radius fact. However, it says nothing about whether the device must be connected, error behavior, or reversibility (that reconnection requires `connect`).
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?
One sentence, no filler, and the critical default behavior is placed immediately after the core action. Nothing is wasted or 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 a single-parameter tool needs little else. The description covers the action and the null-default case; only error/prerequisite behavior is missing, which is a minor gap at this complexity level.
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 schema only labels the field "Host Port" with a null default, so the description does the real work: it identifies host_port as the target device and explains that null means disconnect everything. That is exactly the semantics an agent needs and it goes 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?
States a specific verb (disconnect) and resource (network device), and the mention of `adb` grounds it in the tool family. It doesn't explicitly name `connect` as its counterpart sibling, but the operation is unambiguous and distinguishable from the other 80+ 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 parenthetical explains the omitting-host_port case, which is a usage condition, but it is really a parameter behavior note rather than guidance on when to pick this tool over `connect` or when disconnection is appropriate. Usage is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dragB
Drag (slow swipe) from (x1,y1) to (x2,y2). Alias of swipe with a longer default.
| Name | Required | Description | Default |
|---|---|---|---|
| x1 | Yes | ||
| x2 | Yes | ||
| y1 | Yes | ||
| y2 | Yes | ||
| serial | No | ||
| duration_ms | 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 carries the full burden. It does disclose one meaningful behavioral trait beyond the schema: that drag uses a longer default duration than swipe. However, it says nothing about the serial parameter's effect (target device), how duration_ms interacts with the 'default', or whether the gesture can fail/miss, leaving real gaps for a no-annotation gesture 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 short sentences with the gesture and endpoints front-loaded, followed by the alias relationship. No filler, though the parenthetical '(slow swipe)' is redundant with 'drag'.
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 6-parameter gesture tool with zero annotation coverage and zero schema descriptions, the description leaves the serial and duration_ms parameters unexplained and gives no failure/fidelity context, which is only minimally adequate.
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 there are 6 parameters, so the description must compensate and largely does not. It covers only the four coordinate arguments implicitly and never mentions serial (device targeting) or duration_ms beyond the vague hint of a 'longer default'. Two of six parameters remain semantically undefined.
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 (drag) plus the coordinate endpoints, and explicitly frames itself as an alias of swipe with a longer default, which lets an agent distinguish it from the sibling 'swipe' tool without opening either schema. The parenthetical '(slow swipe)' restates the gesture rather than adding new information, keeping it just 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 phrase 'Alias of swipe with a longer default' implicitly tells the agent to prefer drag over swipe when a slower gesture is desired, but it never states explicitly when to use drag versus swipe, nor any prerequisites (e.g., device selection via serial, coordinates relative to screen). Usage is inferable rather than spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dumpsysA
Run dumpsys <service> for a NAMED service (e.g. 'battery', 'wifi',
'activity', 'meminfo', 'connectivity') and return the raw text (capped).
Scoped to a service name — not an arbitrary shell.
| Name | Required | Description | Default |
|---|---|---|---|
| args | No | ||
| serial | No | ||
| service | Yes | ||
| max_chars | 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 carries the full burden. It usefully discloses the output shape ('raw text (capped)'), but says nothing about the read-only/diagnostic nature, side effects, permission requirements, or error behavior. It adds some context but is not rich for a no-annotation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, front-loaded with the command form and examples, with zero wasted words. The scoping caveat is placed at the end where it reads naturally.
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 detailed, and the 'raw text (capped)' note is a bonus. But for a four-parameter tool with 0% schema coverage and no annotations, the description should say more about `args` and `serial` to be 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 coverage is 0% for all four parameters. The description gives valuable examples for the required `service` param and hints at `max_chars` via 'capped,' but `args` and `serial` are left completely undocumented in both schema and description, so it only partially compensates.
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 ('Run `dumpsys <service>`') and concretely distinguishes itself from `run_shell` with 'not an arbitrary shell.' However it does not resolve overlap with siblings like get_battery, get_meminfo, or list_services, whose examples ('battery', 'meminfo') it echoes, so sibling differentiation is 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?
'Scoped to a service name — not an arbitrary shell' implies the agent should use run_shell for arbitrary commands, giving a negative-scoping hint. But it never explicitly states when to prefer this over the overlapping diagnostic siblings (get_battery, get_meminfo), leaving usage to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dump_uiA
Dump the current on-screen view hierarchy as a flat list of elements {text, resource_id, content_desc, class, clickable, enabled, bounds:{...,center_x,center_y}}.
non_empty_only drops nodes with no text/id/description (usually layout containers); clickable_only keeps only clickable nodes.
| Name | Required | Description | Default |
|---|---|---|---|
| serial | No | ||
| clickable_only | No | ||
| non_empty_only | 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 provided, so the description carries the full behavioral burden. It does disclose how the two boolean flags change the returned node set ('drops nodes with no text/id/description', 'keeps only clickable nodes'), which is genuine behavioral context, but it says nothing about device preconditions, the serial parameter, or whether a device must be connected.
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 written sentences, front-loaded with the return shape and followed by the filter semantics. The inline field list is arguably redundant with the existing output schema, but it is compact and aids immediate comprehension.
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 parameter behavior is well covered for two of three flags. The remaining gap is the serial parameter and any device-connection precondition, which leaves the definition slightly short for a tool with zero annotation 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, and it does for two of three parameters: non_empty_only and clickable_only are explained with meaning beyond their names, including the rationale ('usually layout containers'). The serial parameter is left entirely undocumented in both schema and description, keeping this short of a 5.
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 ('Dump the current on-screen view hierarchy as a flat list of elements') and even enumerates the returned element fields, so the purpose is unmistakable. It does not, however, differentiate itself from sibling inspection tools such as find_elements or tap_element, which an agent must choose between.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit 'use this when...' guidance or comparison to alternatives. Usage is only implied through the flag semantics: non_empty_only is for dropping layout containers and clickable_only is for isolating tappable targets, which hints at workflow but never says when this tool beats find_elements.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
file_existsC
Check whether a path exists on the device. Returns {exists, is_dir}.
| Name | Required | Description | Default |
|---|---|---|---|
| remote | Yes | ||
| serial | No | ||
| as_root | 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 but only states the return shape, which the output schema already covers. It says nothing about whether this is a safe read-only probe, how as_root affects execution, or which device is targeted when serial is omitted.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, purpose front-loaded, zero filler. Nothing to trim.
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 covers return values, so that omission is fine, but a 3-parameter tool with 0% schema coverage and no annotations leaves device targeting and root behavior undocumented. For a multi-device ADB surface this is 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 description coverage is 0% for all three parameters, so the description must compensate and does not. 'path on the device' loosely hints at remote, but serial (device selection) and as_root (privilege escalation) are never explained anywhere.
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 ('Check whether a path exists') and even names the return shape. It distinguishes itself from mutation siblings like write_file/delete_file, but does not explicitly differentiate from stat_file, which likely answers a similar question.
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?
No guidance on when to prefer this over stat_file or list_files, and no mention of prerequisites such as needing an attached device or root access. The agent is left to infer context entirely.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_elementsA
Find on-screen elements matching any of text / resource_id / content_desc. Substring match by default; exact=True requires a full match. Returns the same element records as dump_ui, each with a bounds.center for tapping.
| Name | Required | Description | Default |
|---|---|---|---|
| text | No | ||
| exact | No | ||
| serial | No | ||
| resource_id | No | ||
| content_desc | No |
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 and does fairly well: it discloses matching semantics (substring by default, exact=True for full match), that multiple criteria are OR-combined ('any of'), and the return shape (element records with bounds.center for tapping). It omits what happens on no-match or when no criteria are supplied, but for a read-only lookup this is a solid behavioral picture.
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 tight sentences with no filler; the match criteria and default matching mode are front-loaded before the return-shape note. The slash-separated selector list is dense but compact and readable.
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 detailed, yet the description usefully points to bounds.center for the follow-up tap. For a zero-required-parameter read tool this is nearly complete; only the undocumented serial parameter and absent when-to-use guidance keep it from being 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% across 5 parameters, so the description must compensate. It explains the three selector parameters and the exact flag's matching semantics, but the 'serial' parameter is never mentioned, and the interaction between selectors and the default state of a null selector is left unstated.
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 ('Find on-screen elements') and names the exact match criteria (text / resource_id / content_desc). It also implicitly distinguishes itself from dump_ui by noting it returns 'the same element records as dump_ui', framing itself as the filtered counterpart. It stops short of an explicit sibling contrast, 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?
Usage is only implied: a search-before-tap workflow is suggested by 'bounds.center for tapping', and the relationship to dump_ui is referenced. However, there is no explicit statement of when to call find_elements instead of dump_ui or tap_element, and no exclusions or prerequisites are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
force_stopB
Force-stop an app (idempotent). Returns {package, status}.
| Name | Required | Description | Default |
|---|---|---|---|
| serial | No | ||
| package | 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 burden. It does disclose two genuinely useful behavioral traits: idempotency and the return shape {package, status}. It omits required permissions, whether the app's data/state is affected, and whether it applies to all device users.
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 clauses, front-loaded with the action, with zero filler. Every element (action, idempotency, return shape) adds 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 elaboration. For a 2-parameter mutation with no annotations and 0% schema coverage, the unexplained 'serial' parameter and absent permission/effect details leave 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 description coverage is 0% for two parameters. The description mentions only 'an app', leaving the 'serial' device-selection parameter entirely unexplained and adding no format or constraint detail for 'package' beyond the schema's type declaration.
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 ('Force-stop an app'), which is unambiguous. However, it does not distinguish itself from near-siblings like kill_background or clear_app_data, which an agent could plausibly confuse with force-stopping.
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 guidance on when to use this versus alternatives such as kill_background or clear_app_data, nor any stated prerequisites. The parenthetical '(idempotent)' implies safe retry but not selection criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
forward_portA
adb forward tcp:local tcp:remote — forward a HOST port to a DEVICE port
(host connects locally, traffic reaches the device).
| Name | Required | Description | Default |
|---|---|---|---|
| serial | No | ||
| local_port | Yes | ||
| remote_port | 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 burden. It explains the direction of forwarding but says nothing about persistence (does the forward survive disconnect?), required device connectivity, port conflicts, permissions, or cleanup via remove_forward/clear_forwards. For a state-mutating setup tool, this 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?
A single sentence that front-loads the adb equivalent and then clarifies the direction. No filler; every clause 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?
With no annotations and 0% schema description coverage, the description should do more. It covers the core semantics but omits prerequisites, lifecycle (persistence/removal), and error conditions, and never references the related remove_forward or clear_forwards tools. An output schema exists, so return values needn't be explained.
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. It successfully maps local_port to the host port and remote_port to the device port via the `adb forward tcp:local tcp:remote` syntax, but the optional `serial` parameter is never mentioned, leaving one of three parameters 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 a specific verb and resource ('forward a HOST port to a DEVICE port') and explicitly defines the direction of traffic, which is the key distinction from the sibling reverse_port. An agent can tell it apart from reverse_port without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage by explaining that host connects locally and traffic reaches the device, but it never states when to use this versus reverse_port, nor does it name any alternatives or prerequisites (e.g., device must be connected). Usage is inferable but not guided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_anr_tracesA
Pull the most recent ANR trace file (/data/anr/traces.txt or /data/anr/). Returns {status, local, size} (needs root/permission on some devices).
| Name | Required | Description | Default |
|---|---|---|---|
| serial | 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. It usefully discloses the root/permission requirement and the return shape, but says nothing about whether an existing local file is overwritten, transfer size limits, or what happens when no trace exists.
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 and the exact file paths before the caveat. Every clause 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-value detail is optional (the description duplicates some of it anyway). The real gap is that a 2-parameter tool with zero schema coverage and no annotations leaves the agent without parameter guidance, making the definition only minimally 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% and the description never mentions either parameter. Neither 'serial' (device targeting) nor 'local_path' (destination) is explained; the mention of 'local' in the return object only hints at the latter. The description does not compensate for the coverage gap.
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?
Specific verb ('Pull') plus a precisely named resource ('most recent ANR trace file') with concrete paths (/data/anr/traces.txt or /data/anr/). This clearly separates it from siblings like get_crash_log, capture_bugreport, or logcat_dump.
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 name (ANR diagnostics); there is no explicit when-to-use guidance, no mention of when to prefer it over get_crash_log or capture_bugreport, and no stated prerequisites beyond a parenthetical about root.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_batteryB
Return battery level/status/health/temperature (from dumpsys battery).
| Name | Required | Description | Default |
|---|---|---|---|
| serial | 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 carries the full behavioral burden. It discloses the underlying source ('from dumpsys battery') and the read-only nature is implied by 'Return', but it says nothing about which device is targeted, behavior with multiple connected devices, or failure modes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single compact sentence that front-loads the verb and enumerates the payload; every word 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 need not be explained, and the read-only nature is inferable. However, with zero annotation coverage and an undocumented 'serial' parameter, the description leaves device targeting and multi-device behavior 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 description coverage is 0% and the sole parameter 'serial' is undocumented in both schema and description. The description never mentions device selection, so an agent gets no help in understanding what 'serial' does or how to pick a device.
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?
Specific verb ('Return') plus resource ('battery') and it enumerates the returned fields (level/status/health/temperature), which no sibling tool covers. It does not explicitly differentiate itself from siblings like get_device_properties or dumpsys, but the battery focus 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?
Usage is only implied by the tool name; the description gives no explicit when-to-use, prerequisites, or alternatives (e.g., use dumpsys for a full battery dump). Adequate but with a clear gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_crash_logB
Dump the 'crash' logcat buffer (native + Java crashes), newest tail records.
| Name | Required | Description | Default |
|---|---|---|---|
| tail | No | ||
| serial | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations, so the description carries the burden. It usefully discloses scope (native + Java crash buffer) and ordering (newest first), but says nothing about whether the buffer is cleared after dumping, device-selection behavior, or any auth/rate considerations.
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?
One tightly written sentence, front-loaded with the action and resource, with no filler. Backticks around `tail` tie it cleanly to the parameter 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?
A low-complexity, two-parameter read tool with an output schema, so return format needn't be explained. The description covers the essentials; only the meaning of `serial` and post-dump buffer state 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 coverage is 0%, so the description must compensate. It clarifies `tail` as the count of newest records returned, which adds real meaning over the bare integer, but `serial` (device targeting) is left entirely to the agent's 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?
States a specific verb ('Dump') and resource ('crash' logcat buffer), and narrows scope by naming native + Java crashes. That scoping distinguishes it from the general logcat_dump/logcat_filter siblings without needing to name them 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?
No when-to-use or when-not-to-use guidance. Given the dense sibling set (logcat_dump, logcat_filter, logcat_clear, get_anr_traces), the agent gets no help choosing between this and the other log-retrieval tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_current_activityB
Return the currently focused activity/package (foreground app).
| Name | Required | Description | Default |
|---|---|---|---|
| serial | 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 carries the full burden, but the verb 'Return' at least implies a non-mutating read with no side effects. It says nothing about what happens when no app is focused, whether a locked/asleep screen affects the result, or how the optional device serial is resolved.
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?
One short, front-loaded sentence with zero filler; the core resource is named immediately and nothing is repeated from the schema or annotations.
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 a simple read. However, the undocumented serial parameter and the unspecified behavior when no foreground activity exists leave meaningful gaps for a tool whose whole job is device-scoped state lookup.
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 single parameter (serial, nullable, default null) is never referenced in the description. The agent gets no explanation of whether omitting serial targets the default device or all connected devices, which is exactly the gap the description should close.
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 ('Return') and a clearly scoped resource ('currently focused activity/package (foreground app)'), with a parenthetical that removes any ambiguity about what 'activity' means. It does not explicitly differentiate itself from lookalike siblings such as get_state, app_status, or list_processes, 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?
The description gives no when-to-use guidance and never names an alternative, so an agent must infer that this is the lightweight foreground-app query versus app_status or get_state. There is also no mention of the multi-device condition that the serial parameter implies.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_default_deviceA
Return the currently active default device serial (runtime or ADB_SERIAL).
| 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 exist, so the description carries the full burden. It usefully discloses the resolution source (runtime override or the ADB_SERIAL variable), which is real behavioral context beyond the schema. However, it does not confirm side-effect-free semantics, describe failure behavior when nothing is set, or note any fallback ordering beyond the two named sources.
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 that front-loads the returned value and adds one clarifying clause. No filler, no 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?
Zero parameters, an output schema that covers the return type, and a clear statement of what value is produced. For a trivial getter this is nearly complete; the only omission is what happens when no default is configured and how it relates to set_default_device.
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 the schema has nothing to document and the baseline is 4. The description's mention of ADB_SERIAL usefully explains where the returned value originates rather than leaving the agent to guess.
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: returns the active default device serial. It distinguishes itself implicitly from the sibling set_default_device and from get_devices by naming the exact value returned. It does not explicitly contrast with those siblings, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance and no routing to alternatives. With siblings like get_devices and set_default_device present, the agent gets no signal about when this narrow getter is preferable to enumerating devices or how the two relate. The parenthetical hints at resolution order but is not usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_device_propertiesB
Return the target environment: model, manufacturer, abi, android release, sdk level, build fingerprint, and screen info. Tells the agent exactly what it is targeting before acting.
| Name | Required | Description | Default |
|---|---|---|---|
| serial | 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 carries the full burden. 'Return' implies a read-only operation, and the pre-action targeting advice adds some context, but it does not disclose whether the call has side effects, how the optional serial parameter selects a device, or what the default target is when serial is omitted.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences and front-loads the main purpose. The field enumeration is informative, though the second sentence slightly repeats the first sentence's intent.
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 simple and an output schema exists, so return values are covered elsewhere. However, the description is incomplete for multi-device targeting because it does not explain the optional serial parameter or default device behavior.
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 schema has 0% description coverage for the single optional 'serial' parameter, and the description never mentions it. The description therefore does not compensate for the missing schema documentation or explain that serial selects which device's properties are returned.
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 ('Return') and resource ('target environment'), then enumerates the returned fields. It is clear what the tool does, but it does not explicitly distinguish itself from siblings like get_devices, get_state, or get_screen_info.
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 'Tells the agent exactly what it is targeting before acting' implies a usage context (pre-action reconnaissance), but there are no explicit when-to-use/when-not-to-use conditions and no named alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_devicesA
List attached devices/emulators with state and transport.
Returns [{serial, state, is_usb, model, device, transport_id}]. is_usb is False for network devices (serials containing ':', e.g. WSA/emulators).
| 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?
With no annotations, the description carries the full burden, and it delivers useful behavioral detail: the exact return fields and the non-obvious convention that serials containing ':' are network devices (WSA/emulators) for which is_usb is False. It omits anything about error states or empty results, but the read-only nature of a list operation is self-evident.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, purpose front-loaded, and the return-shape convention placed second where it is most useful. No 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?
For a zero-parameter listing tool with an output schema available, the description supplies everything needed: what is listed, what comes back, and the one non-obvious field semantics. Nothing an agent needs to call it correctly is missing.
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 the baseline is 4. The description correctly adds no parameter discussion, which is appropriate for a parameterless listing 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?
States a specific verb ('List') and resource ('attached devices/emulators') plus the scope qualifier 'with state and transport'. It is clearly distinct from single-device siblings like get_state or get_device_properties, but it never names an alternative or explicitly contrasts itself with them.
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 by the purpose (enumerate devices before acting on one), but there is no explicit when-to-use guidance, no mention of ordering relative to connect/disconnect/wait_for_device, and no stated alternatives. Minimum viable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_ip_addressB
Return the device's IPv4 address on an interface (default wlan0).
| Name | Required | Description | Default |
|---|---|---|---|
| iface | No | wlan0 | |
| serial | 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. The word 'Return' implies a read-only query, which is the key behavioral trait, and 'default wlan0' discloses defaulting behavior. However, it says nothing about error/empty behavior (e.g., no address on the interface) or connectivity requirements.
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 that front-loads the action and resource, with the default parenthetically tucked in. Zero wasted 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, and the tool is a simple read. But the 'serial' parameter and any failure conditions are left unaddressed, leaving the definition adequate 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 coverage is 0% for two parameters, so the description must compensate. It explains the 'iface' parameter ('on an interface, default wlan0'), which is genuinely useful, but says nothing about the 'serial' parameter, leaving half the inputs 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 a specific verb and resource: 'Return the device's IPv4 address on an interface'. An agent can tell this retrieves a network address, distinct from siblings like get_prop or get_device_properties. No explicit sibling differentiation, but the resource is precise.
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 mention of alternatives (e.g., get_prop/get_setting for network values), and no prerequisites such as needing a connected device. Usage is only inferable from the purpose, which is thin for a tool among many get_* siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_meminfoA
Return memory info. With a package: that app's total PSS (kB); otherwise the global summary (Total/Free/Used/Lost RAM). Returns parsed fields + raw text.
| Name | Required | Description | Default |
|---|---|---|---|
| serial | No | ||
| package | 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 present, so the description carries the full behavioral burden. It discloses the return shape (parsed fields + raw text) and the output unit (kB), which is real added context, but says nothing about permissions, device/serial targeting, or failure modes for an adb-backed 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?
Three short clauses, front-loaded with the core action and the branch condition, then the return shape. No filler sentences.
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 detailed, and the description correctly focuses on scope and units. However, with zero annotation coverage and an entirely undocumented 'serial' parameter, an agent still lacks enough to target the right device confidently.
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 both parameters depend on the description. It explains what 'package' does (yields that app's total PSS in kB) but never mentions 'serial' at all, leaving device selection 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?
States a specific verb+resource ('Return memory info') and immediately branches into the two scopes it serves: per-package PSS with a package arg, global Total/Free/Used/Lost RAM otherwise. An agent can distinguish it from siblings like get_top or list_processes from the description alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The conditional behavior ('With a package... otherwise') impliedly tells the agent which argument selects which mode, which is usable context. But it never says when to prefer this over get_top, list_processes, or dumpsys meminfo, and offers no exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_package_infoB
Return structured package info: versionName, versionCode, targetSdk, minSdk, installer, firstInstall/lastUpdate times, and granted runtime permissions.
| Name | Required | Description | Default |
|---|---|---|---|
| serial | No | ||
| package | 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; it usefully discloses the read-only nature via 'Return' and enumerates the returned data, which is genuine behavioral context. However it says nothing about permission requirements, whether the package must be installed, or rate/device-serial considerations.
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 lists the return fields with zero filler. Every clause 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 the description need not explain return values (though it does helpfully preview them). The remaining gap is the undocumented inputs at 0% coverage and absent read-only/permission semantics for a tool with 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?
Two parameters exist at 0% schema description coverage, yet the description never mentions them. The meaning of 'package' (package name) and 'serial' (target device) is left entirely undocumented, so the description does not compensate for the schema gap.
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 (Return) and resource (structured package info) and enumerates the exact fields returned. It is clearly distinct from mutation siblings like launch_package or clear_app_data, though it does not explicitly contrast with list_packages or app_status.
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?
No when-to-use guidance, no prerequisites, and no mention of alternatives such as list_packages (batch listing) or app_status. The agent must infer context entirely on its own.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_propA
Read a single system property by name, or ALL props as a dict when name is
omitted (parses getprop).
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| serial | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full weight. It discloses the key behavioral trait — dual return shape (single value vs dict of all props) — which is genuinely useful. But it offers nothing on permissions, rate limits, error behavior for a missing property, or serial targeting semantics.
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?
One sentence, front-loaded with the primary action and immediately followed by the conditional mode difference. Every clause earns its place with zero 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?
For a 2-param read tool with no annotations and no output schema, the description covers the core call pattern and return shape but leaves the 'serial' parameter and any behavioral constraints undocumented. Adequate but with clear 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 0% and neither parameter is documented in the schema. The description explains 'name' behavior well (omit to get all), but 'serial' — a meaningful parameter selecting the target device — is completely unmentioned in both description and 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?
States a specific verb ('Read') plus the resource ('system property by name'), and explicitly distinguishes the two modes (single prop vs ALL props when name is omitted). The mention of parsing `getprop` grounds it against the large sibling set, including nearby tools like get_device_properties and set_prop.
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 implicitly clarifies when to call with vs without 'name' (omitting name returns all). However it gives no guidance on when to use this over get_device_properties or get_setting, despite those siblings clearly overlapping. No exclusions or alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_screen_infoB
Return effective display size and density: {width, height, density, raw}.
Prefers the Override size (what input coordinates map to) when set.
| Name | Required | Description | Default |
|---|---|---|---|
| serial | 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 a genuine behavioral trait — that the Override display size is preferred over the physical size — which the agent could not infer from the schema. However, it says nothing about device-selection behavior (serial vs default device) or what happens when no device is connected.
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, front-loaded with the return shape and followed by the one non-obvious behavioral rule. Every sentence earns its place with no 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?
An output schema exists, so return values need not be spelled out, though the description helpfully summarizes them. Given the tool's simplicity (one optional param), the main gap is the undocumented serial parameter and device-targeting behavior; the description is adequate but not 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?
The single optional 'serial' parameter has 0% schema description coverage and is not mentioned anywhere in the description. The description does not explain how serial selects the target device or that omitting it uses the default device, so an agent gets no semantic help for the only 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 ('Return') and resource ('effective display size and density') and enumerates the exact returned fields (width, height, density, raw). No sibling tool in the list returns display geometry, so an agent can identify this immediately as the display-metrics tool.
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 'what input coordinates map to' hints at the tap/swipe coordinate-mapping use case, but there is no explicit when-to-use instruction, no mention of prerequisites (connected device / serial), and no routing to or away from alternatives. The general context is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_settingB
Read an Android setting. namespace = 'system' | 'secure' | 'global'.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | ||
| serial | No | ||
| namespace | 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 behavioral burden. 'Read' clearly implies a non-mutating operation, and the output schema covers return values. However, it does not disclose required permissions, error behavior, or the role of the serial parameter.
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; the purpose is front-loaded and the namespace values are compactly presented.
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 simple getter with an output schema, the description covers the core purpose and namespace options. It remains incomplete because key and serial are not explained, and no annotations clarify behavior.
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. It adds meaning for namespace by listing valid values, but key and serial are not described at all, leaving most parameter semantics 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 ('Read') and resource ('Android setting'), making the tool's core function clear. It does not explicitly differentiate from sibling tools like get_prop or put_setting, 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?
It gives valid namespace values, which is useful context, but provides no guidance on when to use this tool versus put_setting or other getters. There is no explicit when/when-not or alternative selection guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_stateB
Return the connection state of a device: device / offline / unauthorized.
| Name | Required | Description | Default |
|---|---|---|---|
| serial | 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 carries the full behavioral burden. 'Return' implies a read-only query, and the enumerated states add some output context, but it does not explicitly state read-only behavior, permission requirements, or what happens when the serial parameter is omitted.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one front-loaded sentence with no wasted words. It directly states the action and the possible result states.
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 in detail. However, for a simple device-query tool, the description omits important context: how to target a device when 'serial' is omitted, whether it falls back to a default device, and when to use this tool instead of related device-listing or waiting tools.
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% for the single optional 'serial' parameter. The description refers vaguely to 'a device' but never names or explains the serial argument, its optionality, or the default-null behavior. It adds little meaning 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 states a specific verb and resource: 'Return the connection state of a device.' It enumerates the possible return states (device / offline / unauthorized), so the agent can infer scope. It does not explicitly differentiate this from siblings like get_devices or wait_for_device.
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. It does not mention alternatives such as get_devices, wait_for_device, or connect/disconnect, nor does it state when this tool should be preferred. Usage is only implied by the phrase 'connection state of a device.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_topB
Return a one-shot top snapshot of the top count processes by CPU (raw text).
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | ||
| serial | 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 output is raw text and that the call is a one-shot snapshot rather than a live stream, but says nothing about permissions, device targeting, or cost/latency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single tight sentence with the key qualifiers (one-shot, by CPU, raw text) front-loaded; 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?
An output schema exists so return formatting need not be re-explained, and the description correctly flags raw text. However, for a device-oriented tool the unexplained `serial` parameter and absence of usage routing leave 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%, so the description must compensate. It explains `count` (top count processes by CPU) but leaves `serial` completely undefined in both schema and description, despite it being the device-selection 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 (return), resource (top snapshot of processes by CPU), and scope (one-shot, top count). It is fairly distinct from list_processes, though it never names that sibling to sharpen the contrast.
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?
'one-shot' hints at a snapshot versus streaming, but the description gives no when-to-use guidance and never mentions the obvious alternative list_processes or get_meminfo for process/memory inspection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_uptimeB
Return device uptime (seconds + human string) from /proc/uptime and uptime.
| Name | Required | Description | Default |
|---|---|---|---|
| serial | 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 the data sources, which implies a read-only, non-destructive informational query, and states the output shape (seconds + human string). It does not state device-connection requirements, behavior when multiple devices are attached, or failure modes, 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?
A single tight sentence with the action and output format front-loaded; every clause (return type, sources) adds information and there is no 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?
An output schema exists, so return values need not be explained (and the description's format note is mildly redundant). The remaining gaps are the unexplained optional `serial` parameter and the absence of any context about device connection or default-device resolution, which an agent needs to call this correctly in a multi-device setting.
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 single `serial` parameter is never mentioned in the description, so there is no explanation of what it does or what happens when it is omitted (the null default implies a fallback to a default device, but this is unstated). The description therefore does not compensate for the schema's silence.
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 ('Return device uptime') and even names the underlying sources (/proc/uptime and the `uptime` command), which pins down exactly what is fetched. It is distinguishable from siblings like get_meminfo or get_state, though it does not explicitly contrast itself with them.
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 indication of prerequisites (e.g., that a device must be connected/selected), and no mention of when to prefer a sibling such as get_state. The agent must infer usage entirely from the name and the sibling list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
grant_permissionB
Grant a runtime permission, e.g. 'android.permission.CAMERA' (pm grant).
| Name | Required | Description | Default |
|---|---|---|---|
| serial | No | ||
| package | Yes | ||
| permission | 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 discloses little beyond naming `pm grant`. It does not say whether the grant takes effect immediately or requires an app restart, whether it persists across reboots, what happens if the permission is not declared in the manifest, or what errors look like.
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 tight sentence that front-loads the action and packs in the permission format plus the underlying ADB command. Nothing 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?
An output schema exists, so return values need not be explained, but this is a state-changing device operation with no annotations, no parameter documentation, and no prerequisites or side-effect disclosure. It is under-specified for a mutation 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 three parameters. The description clarifies only the `permission` parameter via an example string; the `package` format (application ID) and the `serial` device-selector parameter are left entirely 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 a specific verb (grant) and resource (runtime permission) and even names the underlying command `pm grant`, with a concrete example permission string. It does not explicitly distinguish itself from the sibling revoke_permission, but the action 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?
Usage is only implied: the agent can infer this applies to granting runtime permissions to an installed package. There is no statement of when to use this versus revoke_permission, nor prerequisites such as the target app being installed or the permission being declared in the manifest.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
install_apkA
Install an APK, or a split-APK set via install-multiple when >1 path given. replace=-r, grant_permissions=-g, downgrade=-d. Returns {status, message}.
| Name | Required | Description | Default |
|---|---|---|---|
| serial | No | ||
| replace | No | ||
| apk_paths | Yes | ||
| 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 burden. It usefully maps the boolean flags to their adb equivalents (replace=-r, grant_permissions=-g, downgrade=-d) and states the return shape, which is real behavioral value for a mutation tool. It still omits whether replacement destroys existing app data, permission requirements, and failure modes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, front-loaded with the core action and the multi-APK conditional, followed by compact flag mappings and return shape. No waste.
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 explaining {status, message} is redundant but harmless. For a 5-parameter mutation tool with zero annotation coverage and zero schema descriptions, the definition is still thin on the serial/path parameters and side effects on existing installs.
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 the meaning of replace, grant_permissions, and downgrade via adb flag equivalents, but leaves serial and apk_paths (including path format and whether multiple paths mean split APKs) undefined, so it only partially fills the gap.
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 ('Install an APK') and additionally clarifies a distinct mode ('split-APK set via install-multiple when >1 path given'). It does not name or contrast with siblings, but the purpose is unambiguous and install has no close sibling.
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 conditional rule: use the multi-APK path when more than one path is given. It does not address when to use this versus uninstall/reinstall workflows, prerequisites (device connection, serial resolution), or failure/retry guidance, so usage is implied rather than fully guided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
keyeventC
Send a key event. Accepts a numeric keycode or a name like BACK, HOME, ENTER, TAB, DEL, APP_SWITCH, VOLUME_UP (KEYCODE_ prefix optional).
| Name | Required | Description | Default |
|---|---|---|---|
| serial | No | ||
| keycode | Yes | ||
| longpress | 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, yet it discloses only the input format. It says nothing about side effects (e.g., that HOME/APP_SWITCH will change foreground state), what longpress does, whether a device serial is needed for multi-device setups, or what the tool returns. The behavioral profile is largely absent.
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 core action front-loaded and the keycode examples immediately following. No filler, though the example list is dense and could be trimmed slightly.
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 keycode format is well covered. But with no annotations, 0% schema coverage, and undocumented serial/longpress parameters, the definition is not complete enough for a tool whose key events can have meaningful device side effects.
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 does a good job on keycode (numeric or named, with examples and the optional KEYCODE_ prefix), but 'serial' and 'longpress' receive no explanation at all, leaving two of three parameters 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?
States a specific verb and resource ('Send a key event') and enumerates accepted keycode forms. However, it does not distinguish itself from the many overlapping siblings (press_home, press_back, press_enter, tap, long_press), so an agent cannot tell from the description when to prefer this generic tool over those convenience wrappers.
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 explains input format but gives no when-to-use guidance, no prerequisites, and no mention of the sibling alternatives that do the same thing for specific keys. The agent must infer usage entirely from context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kill_backgroundA
Kill an app's background processes (am kill, gentler than force-stop).
| Name | Required | Description | Default |
|---|---|---|---|
| serial | No | ||
| package | 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 burden. It usefully discloses the underlying mechanism (`am kill`) and the gentleness relative to force-stop, implying only background processes are affected. It does not say what happens to a foreground process, what privileges are needed, or confirm the operation is non-destructive to app 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 front-loaded sentence with the mechanism and the differentiator packed in; nothing is wasted and the key routing cue comes last where it is easy to catch.
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. However, for a tool with 0% schema description coverage and no annotations, the description leaves the device-targeting `serial` parameter and any permission/foreground-app 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 for two undocumented parameters, and it does not. 'An app's' loosely implies the required package, but the `serial` parameter (device targeting) is never mentioned in either the schema or the 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?
States a specific verb and resource ('Kill an app's background processes') and explicitly distinguishes itself from the sibling force_stop by calling itself 'gentler than force-stop.' An agent can pick between kill_background and force_stop without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Names the alternative (force-stop) and gives the condition that favors this tool (gentler behavior). It stops short of an explicit when-not-to-use rule, e.g. that a foreground app or data-clearing need should route to force_stop or clear_app_data.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
launch_activityB
Start an explicit activity, e.g. 'com.app/.MainActivity' (am start -n).
Returns the am output and resulting pid if resolvable.
| Name | Required | Description | Default |
|---|---|---|---|
| serial | No | ||
| component | 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 the underlying command semantics (`am start -n`) and what it returns (am output and pid if resolvable). However, it says nothing about side effects of launching an activity, failure/error behavior, or interaction with an already-running activity, which are relevant for a state-changing 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 tightly written sentences, front-loaded with the action and example, with zero filler. Every clause (command form, return value) 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 spelled out. But for a mutation tool with no annotations and 0% parameter coverage, the description should at least address the `serial` parameter and basic failure behavior; it is adequate but incomplete.
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% for both parameters. The description partially compensates by showing the expected format of the required `component` parameter, but the `serial` parameter is completely undocumented in both schema and description, leaving a real gap.
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 (Start) and resource (an explicit activity), and gives the concrete component format 'com.app/.MainActivity' plus the underlying `am start -n`. It is clear what the tool does, though it never explicitly contrasts itself with the sibling launch_package, so differentiation is only implied by the word '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?
There is no when-to-use, when-not-to-use, or alternative guidance. The agent is left to infer that this is for launching a named component versus launch_package for a package name; no prerequisites or exclusions are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
launch_packageB
Launch an app by package via its LAUNCHER intent (idempotent). Returns {package, pid, status}.
| Name | Required | Description | Default |
|---|---|---|---|
| serial | No | ||
| package | 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 idempotence, but omits permission requirements, device serial behavior, error cases, and whether launching brings the app to the foreground.
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 purpose and idempotence, then the return shape. It is well-sized, though the return shape duplicates the output schema and therefore does not fully earn 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?
With no annotations, 0% schema coverage, and an output schema, the description is only partially complete. Purpose and idempotence are covered, but the serial parameter and usage relative to launch_activity are 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 must compensate. It identifies 'package' but never mentions the optional 'serial' parameter or what it controls, leaving half the parameters 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 a specific verb ('Launch'), resource ('app by package'), and mechanism ('LAUNCHER intent'), which differentiates it from launch_activity in the sibling set. An agent can identify the right tool from this description alone.
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?
No explicit when-to-use guidance or named alternatives. The phrase 'by package' implies a condition, but it does not say when to prefer launch_activity or how to handle missing packages.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_filesA
List a device directory: [{name, size, is_dir, is_link, perms}].
as_root uses su -c ls on rooted devices. Symlinked dirs (e.g. /sdcard on
Samsung) are dereferenced so their contents are listed, not the link.
| Name | Required | Description | Default |
|---|---|---|---|
| serial | No | ||
| as_root | No | ||
| remote_dir | Yes |
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 behavioral burden. It does add real value: it discloses that as_root shells out via `su -c ls` and that symlinked directories are dereferenced rather than returned as links. However it omits permissions required, behavior when the directory does not exist, and whether traversal is recursive.
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 operation and its output shape, followed by two focused behavioral notes. Every sentence earns its place; only the slight informality of the second sentence keeps it from a 5.
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 document return values, yet the behavioral notes about root execution and symlink dereferencing add context an agent would otherwise lack. Missing error/permission behavior is a minor gap for a read-only list 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%, so the description must compensate across three parameters. It explains as_root's mechanism well, but says nothing about what `serial` selects (target device) or the format/scope of `remote_dir`, leaving two of three parameters 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?
States a specific verb+resource ('List a device directory') and even specifies the return shape, which separates it from single-file siblings like stat_file or file_exists. It does not explicitly name or contrast with those siblings, 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?
Usage is implied by the verb and the directory scope, but there is no explicit guidance on when to prefer this over stat_file, file_exists, or read_file, nor any prerequisites (e.g. device connection state). Adequate but with a clear gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_forwardsB
List active adb forward rules: [{serial, local, remote}].
| Name | Required | Description | Default |
|---|---|---|---|
| serial | 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 provided, so the description carries the full behavioral burden. The qualifier 'active' hints that inactive/dead rules are excluded, but the description does not state safety profile, permissions, or operational side effects for a tool in a device-mutating adb suite.
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 zero filler; the scope ('active') and return preview are packed efficiently. Nothing needs trimming.
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. However, the lone `serial` parameter is undocumented in both schema and description, and there is no routing guidance among the many forward/reverse siblings, leaving 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?
There is one optional parameter (serial) with 0% schema description coverage, and the description never explains what it does (device scoping/filtering). The `{serial, local, remote}` snippet describes the output shape, not the parameter, so it fails to compensate for the schema gap.
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 (List) and resource (active `adb forward` rules) and even previews the return shape. It is distinguishable from siblings like list_reverses, forward_port, remove_forward, and clear_forwards, though it never names them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied by the verb 'List' and the word 'active'. There is no explicit when-to-use, no condition selecting it over forward_port/list_reverses/remove_forward, and no note that it is a read-only inspection step.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_packagesA
List installed package names. filter = case-insensitive substring.
only_third_party excludes system apps; include_paths returns {package, apk}.
| Name | Required | Description | Default |
|---|---|---|---|
| filter | No | ||
| serial | No | ||
| only_enabled | No | ||
| include_paths | No | ||
| only_third_party | 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 provided, so the description carries more burden. It mentions that include_paths changes the return shape to {package, apk}, which is useful behavioral detail. However, it does not clarify default behaviors of bools (e.g., only_enabled defaults to false) or potential side effects, though it's a read-only listing.
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 concise sentences, zero waste, front-loaded with the main action and then parameter semantics. Very 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?
Output schema exists, so return format needn't be fully described, but the description adds a return shape note. It covers key parameters but omits serial and only_enabled semantics. Given no annotations, some gaps remain, but overall sufficient for a list 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 description must compensate. It explains filter (case-insensitive substring), only_third_party (excludes system apps), and include_paths (adds apk path). It doesn't explain serial or only_enabled, but covers the most ambiguous ones.
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 'List' and resource 'installed package names', clearly distinguishing from siblings like list_files or list_processes. The scope 'installed' is 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 implied by the description (e.g., filter to narrow results, only_third_party to exclude system apps), but no explicit when-to-use or when-not-to-use guidance or alternatives is given. Adequate for a simple list tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_processesA
List running processes (ps -A): [{pid, ppid, name, user}]. filter = name substring.
| Name | Required | Description | Default |
|---|---|---|---|
| filter | No | ||
| serial | 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 provided, so the description carries the behavioral burden. It discloses the returned fields and the filter semantics, which is useful. However, it doesn't state that this is a read-only, non-destructive operation, nor any device/connection prerequisite, which is a gap for a tool in a mutation-heavy sibling set.
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 dense sentence plus a clause, front-loaded with the verb and resource. Every token earns its place, with the return shape and filter semantics packed in without waste.
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 needn't detail return values, and it does not need to. But given two parameters with 0% schema coverage and no annotations, the undocumented `serial` parameter and absent safety/device context leave the definition only minimally 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%, so the description must compensate. It explains `filter` as a name substring, which is helpful, but the `serial` parameter (device targeting) is completely undocumented in both schema and description. The description adds meaning for one of two parameters but leaves the other 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 (List) and resource (running processes), and anchors it to the familiar `ps -A` equivalent. The return shape [{pid, ppid, name, user}] makes the output concrete and distinguishes it from any other list_* sibling.
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?
Explaining that `filter` is a name substring implies the intended use case, but there is no explicit when-to-use guidance or exclusions (e.g. no note that this is device-side and requires a connected device). Implied usage only.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_reversesC
List active adb reverse rules: [{remote, local}].
| Name | Required | Description | Default |
|---|---|---|---|
| serial | No |
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 behavioral burden. It does not state that this is a read-only operation, what happens when serial is omitted (all devices?), or how active rules are defined, though it does hint at the return shape.
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 tight sentence with the resource front-loaded and a compact shape hint appended. 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?
An output schema exists, so the return-value shape need not be spelled out in prose. However, the description omits the meaning of the one parameter and the multi-device behavior, which are not covered anywhere else.
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 single `serial` parameter (nullable, default null) is never mentioned. The description does not explain whether serial scopes the query to one device or defaults to all, leaving a meaningful gap.
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: 'List active `adb reverse` rules', which clearly identifies the reverse-port mapping inventory. It distinguishes itself from list_forwards/list_forwards by resource name, but does not explicitly contrast with those near-identical 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?
No guidance on when to use this versus list_forwards, remove_reverse, or clear_forwards, and no prerequisites or context. The agent must infer usage from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_servicesC
List all dumpsys service names available on the device.
| Name | Required | Description | Default |
|---|---|---|---|
| serial | No |
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 behavioral burden, and a single sentence leaves it largely unmet. It implies a read-only listing with no side effects, but says nothing about how the target device is chosen when multiple devices are connected, or about authentication/ADB availability.
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 zero filler. The purpose is delivered immediately and 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?
For a simple enumeration tool with an output schema covering return values, the description is minimally sufficient. However, the undocumented 'serial' parameter and the absence of any usage context leave it short of complete for a multi-device ADB toolkit.
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?
There is one parameter ('serial') with 0% schema description coverage, and the description never mentions it. The agent gets no signal that 'serial' selects a specific device when more than one is attached, so the description fails to compensate for the schema gap.
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 ('List') and resource ('dumpsys service names') with clear scope ('available on the device'). It is easy to distinguish from list_packages, list_processes, and dumpsys, though the description does not explicitly contrast itself with the closely related dumpsys tool.
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?
No when-to-use guidance is provided. A natural question is when to use list_services versus dumpsys (to dump a specific service), and the description offers no routing between them or any prerequisite on device connection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
logcat_clearC
Clear the device logcat ring buffers (logcat -c).
| Name | Required | Description | Default |
|---|---|---|---|
| serial | 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 carries the full behavioral burden. It never states that this is a destructive, irreversible operation that discards existing buffered logs, nor whether it affects all devices or only the default/serial-specified one.
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 the operation and the equivalent adb command; no 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?
An output schema exists so return values need not be explained, and the tool is simple. However, for an unannotated destructive operation with an undocumented parameter, the description leaves notable gaps about scope and effect.
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 single `serial` parameter is undocumented in both schema and description. The description adds no meaning about how to target a specific device or what the null default implies.
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?
Names a specific verb (Clear) and resource (device logcat ring buffers), and the parenthetical `logcat -c` pins down the exact underlying operation, distinguishing it implicitly from logcat_stop and logcat_dump. It stops short of explicitly contrasting with those 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?
There is no statement of when to clear versus when to use logcat_start/logcat_stop/logcat_dump, nor any prerequisite or context. The agent must infer that this resets the buffer before a capture.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
logcat_dumpA
Return recent logcat lines as records {time, pid, tid, level, tag, message}.
Reads the running capture's buffer if active, else does a one-shot logcat -d.
tags = filter by tag substring(s); priority = min level V/D/I/W/E/F;
message_contains = substring filter on the message; tail = newest N records.
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | ||
| tail | No | ||
| serial | No | ||
| priority | No | ||
| message_contains | No |
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, and it delivers: it discloses the buffer-vs-one-shot source behavior and defines the semantics of each filter (tags as substring match, priority as min level). It omits any note on result ordering, rate limits, or permission requirements, but for a local read tool this is solid disclosure.
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 return shape is front-loaded, then the buffer behavior, then a compact parameter legend. Dense and mostly waste-free, though the single-line parameter list is slightly run-on.
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, yet the description still names the record fields helpfully. Combined with the buffer/one-shot behavior and filter semantics, the only real gap is the undocumented 'serial' parameter.
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 defines four of the five parameters meaningfully (tags, priority, message_contains, tail). The 'serial' parameter is never mentioned, so an agent has no guidance on how to target a specific device.
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 ('Return recent logcat lines as records') and enumerates the record shape. It clearly reads as a dump/read operation, distinguishable from the mutation-oriented siblings (logcat_start, logcat_stop, logcat_clear), though it never explicitly names the nearest alternative logcat_filter.
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 useful context ('Reads the running capture's buffer if active, else does a one-shot logcat -d'), which tells the agent what happens in each state. However, it offers no explicit when-to-use guidance relative to logcat_filter or get_crash_log, leaving sibling selection to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
logcat_filterC
Convenience: logcat_dump filtered to the given tags (e.g. ['Unity','libc','DEBUG']).
| Name | Required | Description | Default |
|---|---|---|---|
| tags | Yes | ||
| tail | No | ||
| serial | 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 provided, so the description carries the full behavioral burden. It conveys that this is a read-style filtering wrapper via analogy to logcat_dump, but says nothing about buffer behavior, whether it captures live or buffered logs, permissions, or how tail affects results.
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 zero filler; the tag example earns its place. Appropriately sized, though it is arguably too terse given the undocumented parameters.
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, but with three parameters at 0% schema coverage and no annotations, the description is too thin to be self-sufficient. It should at least clarify tail and serial.
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 for all three params. It gives a useful example for tags (['Unity','libc','DEBUG']) but leaves tail and serial completely unexplained, so the compensation is only partial.
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 relationship: it is logcat_dump filtered to given tags, which cleanly separates it from logcat_dump and the other logcat_* siblings. The verb 'filtered' plus the tag example makes the operation concrete, though it is framed as a 'convenience' rather than an independent action.
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 'logcat_dump filtered to the given tags' implies you reach for this instead of logcat_dump when you only want specific tags, but it never states when-not to use it or names the alternative explicitly. Usage is inferable but not spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
logcat_startA
Start a background logcat capture to a temp file. Read it with logcat_dump/
logcat_filter; end it with logcat_stop. Only one capture runs at a time.
buffers optionally selects e.g. 'main,system,crash'.
| Name | Required | Description | Default |
|---|---|---|---|
| clear | No | ||
| serial | No | ||
| buffers | 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, so the description carries the burden. It discloses that capture is backgrounded, writes to a temp file, and only one runs at a time – useful. However it omits what 'clear' does (wipes existing buffer before starting?), whether start fails/no-ops when a capture is already running, and permission requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, zero filler, front-loads the action and then the workflow. The buffers note is placed last where it belongs.
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 lifecycle and concurrency well, and an output schema exists so return values need not be explained. Gaps remain around the semantics of `clear` and `serial`, and the exact behavior when a capture is already active.
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 `buffers` with an example ('main,system,crash'), which is real added value. But `clear` (default true) and `serial` (default null for device selection) are left entirely 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?
States a specific verb and resource: 'Start a background logcat capture to a temp file.' This clearly distinguishes it from siblings like logcat_dump, logcat_filter, and logcat_stop by role in the lifecycle.
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 names the workflow: read with logcat_dump/logcat_filter, end with logcat_stop, and notes 'Only one capture runs at a time' – a real constraint that governs when to call it. Names alternatives and the condition that selects them.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
logcat_stopA
Stop the background logcat capture started by logcat_start.
| 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 provided, so the description carries the entire behavioral burden and it is thin. It never says whether buffered logs survive the stop, what happens if no capture is running, or whether the operation is idempotent or requires any permission.
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?
One sentence, zero waste, front-loaded with the action and scoped by the sibling reference. Nothing could be removed without losing information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The output schema covers return values, so the description need not explain them, and the start/stop pairing is captured. What is missing is lifecycle behavior for a stateful capture operation with no annotations to fall back on, such as the fate of already-captured logs and the no-op case.
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 beyond confirming that stopping needs no arguments. Baseline 4 applies for a parameterless tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Stop) and resource (the background logcat capture) with clear scope, and ties itself to the sibling that initiates it. An agent can immediately distinguish it from logcat_start, logcat_dump, logcat_filter, and logcat_clear 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?
The clause 'started by logcat_start' gives a clear precondition that tells the agent when this tool is applicable. It does not, however, name exclusions or alternatives (e.g. logcat_dump for reading logs without stopping capture), so it stops short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
long_pressA
Long-press at (x, y) for duration_ms (implemented as a zero-distance swipe).
| Name | Required | Description | Default |
|---|---|---|---|
| x | Yes | ||
| y | Yes | ||
| serial | No | ||
| duration_ms | 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 carries the full disclosure burden. It does add a genuinely useful behavioural detail — that the gesture is implemented as a zero-distance swipe — but says nothing about side effects, what a long-press triggers, or how interruption affects it.
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 zero filler; the coordinate, the duration and the implementation caveat all earn their 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 need not be explained, and the core gesture is clear. Still, with no annotations and an entirely undocumented serial parameter, the definition stops short of fully equipping an agent to call it correctly in multi-device 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 0%, and the description maps x, y and duration_ms to their roles in the operation, which is more than the bare schema titles give. However, it never mentions the serial parameter or the units/meaning of duration_ms, leaving part of the parameter set 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 a specific verb (long-press) and the exact resource/coordinates, and the parenthetical implementation note distinguishes it from sibling gestures like tap, swipe and drag. An agent can tell what this does and how it differs from the neighbouring gesture 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 name and description imply the gesture's purpose, but there is no explicit guidance on when to choose long_press over tap, swipe or drag, nor any prerequisites. Usage is inferable rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
make_dirC
Create a directory on the device (mkdir -p).
| Name | Required | Description | Default |
|---|---|---|---|
| remote | Yes | ||
| serial | No | ||
| as_root | 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 behavioral burden. The `mkdir -p` parenthetical usefully discloses recursive creation and non-failure if the directory exists, but it omits permission requirements, the effect of as_root, and device-connection expectations.
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 zero wasted words. The key operation and shell equivalence are stated immediately, making it highly efficient for a simple 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?
For a mutation tool with three undocumented parameters and no annotations, the description is too thin. An output schema exists so return values need not be explained, but parameter semantics and usage context are missing.
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 three parameters, and the description does not explain remote, serial, or as_root. It adds no meaning beyond the bare schema, leaving required parameters effectively 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 a specific verb (Create) and resource (directory on the device), and the `mkdir -p` reference clarifies the operation. It is readily distinguishable from sibling file tools like list_files or delete_file, though it does not explicitly name alternatives.
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 no when-to-use guidance, no exclusions, and no alternatives. It implies creating a directory, but leaves the agent to infer when this tool is appropriate versus other filesystem operations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
press_backC
Press the BACK button.
| Name | Required | Description | Default |
|---|---|---|---|
| serial | 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 carries the full burden of behavioral disclosure. It says nothing about whether this requires a connected device, what happens if no back stack exists, whether it blocks, or what the response contains. The output schema exists, so return values need not be explained, but operational context is missing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with zero waste. It is appropriately sized for the simplicity of the operation, though it borders on being too terse to be useful.
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 device-control action in a large sibling set, the description is inadequate. It does not say when to use it over press_home or keyevent, does not mention the device serial parameter, and provides no behavioral context. The existence of an output schema covers return values, but the description remains too thin for an agent to invoke confidently without external knowledge.
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?
There is only 1 parameter (serial) and it is optional with schema description coverage at 0%. With 0 required params and a single nullable serial parameter, the baseline is 4. The description does not mention the serial parameter, but for such a simple optional target selector, the schema's presence is largely self-explanatory and no compensating detail is strictly required.
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 action (press the BACK button), which is clear enough as a hardware key simulation. However, it is a near-tautology of the tool name 'press_back' and does not distinguish itself from sibling navigation tools like press_home, press_recents, or keyevent. It communicates the verb+resource but adds no scope or 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?
There is no guidance on when to use this tool versus alternatives. An agent working with press_home, press_recents, keyevent, or tap_element gets no routing information. For a one-line description, usage context is entirely absent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
press_enterC
Press ENTER.
| Name | Required | Description | Default |
|---|---|---|---|
| serial | 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 carries the full behavioral burden, yet it discloses nothing about which device receives the keypress, whether it targets the focused UI element, or any state requirements. An output schema exists, so return values are covered, but the operational context is missing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The two-word description is front-loaded and wastes nothing, but its brevity reflects under-specification rather than efficient communication. There is no filler, but also no substance beyond the tool name restated.
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 device-input tool sitting among many similar press_* and keyevent siblings, the description omits device targeting and the relationship to alternatives. The output schema covers return values, but the remaining gaps leave an agent guessing.
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 single optional 'serial' parameter has 0% schema description coverage, and the description says nothing about it. An agent cannot tell whether omitting serial targets a default device or how the serial is matched.
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 clear verb and target ("Press ENTER"), so an agent knows exactly which key event is emitted. It does not, however, differentiate itself from the sibling keyevent tool, which can also send an ENTER keycode, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no mention of prerequisites such as a connected/active device, and no routing to the closely related keyevent tool. The agent must infer usage entirely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
press_homeC
Press the HOME button.
| Name | Required | Description | Default |
|---|---|---|---|
| serial | 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, and it discloses almost nothing: not whether the device must be connected or unlocked, what happens to the current app/foreground state, or whether the action is reversible. It only restates the action.
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?
One short, front-loaded sentence with no filler or redundancy. It is efficient, though its brevity comes at the cost of useful detail rather than through disciplined editing.
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. However, for a device-control action with zero annotation coverage and an undocumented `serial` parameter, the description is thinner than the tool's invocation context warrants.
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 the single optional `serial` parameter, and the description never mentions it. An agent cannot learn from either source that `serial` selects which device receives the key press or what the default (null) resolves to.
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 (press) and resource (HOME button), which is unambiguous on its own. It does not, however, differentiate itself from the sibling navigation buttons (press_back, press_recents, press_power, press_enter) or state what HOME does on the device.
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 mention of prerequisites (e.g. a connected/awake device), and no reference to the alternative navigation tools. The agent must infer the use case purely from the tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
press_powerB
Press the POWER button (toggles screen on/off).
| Name | Required | Description | Default |
|---|---|---|---|
| serial | 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, and it does disclose the important toggle semantics (it turns the screen both on and off rather than a fixed direction). However, it omits device-state prerequisites, side effects, and whether it affects sleep/wake state beyond the screen.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, tightly-worded sentence that front-loads the action and immediately qualifies the effect. 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?
For a trivial single-action tool with an output schema already covering return values, the description covers the essential action and its toggle behavior. It falls short only on device-state preconditions and the undocumented serial parameter.
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 single 'serial' parameter has 0% schema description coverage and the description says nothing about it, so an agent gets no clarification of its meaning or default behavior. The only saving grace is that serial is a widely understood optional targeting 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 (press) and resource (POWER button), plus the functional effect 'toggles screen on/off'. This is clear and distinct from the neighboring press_home/press_back/press_recents buttons, though it never explicitly distinguishes itself from those 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?
No guidance on when to use this versus wake_and_unlock, keyevent, or other power-related siblings. The agent gets no conditions, prerequisites, or alternatives to route on.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
press_recentsA
Open the recent-apps / overview screen (APP_SWITCH).
| Name | Required | Description | Default |
|---|---|---|---|
| serial | 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 carries the full disclosure burden. It does convey the observable side effect (switching to the overview screen), but says nothing about whether the device must be awake/unlocked, whether it fails on non-supporting devices, or what state results if recents is already open.
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 action and its result are stated immediately.
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 description fully characterizes this simple navigation action. The only gap is device targeting via the undocumented serial parameter.
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 single parameter 'serial' has 0% schema description coverage and the description never mentions it, so its meaning (target device selection) is left entirely to inference. The description compensates for none of the coverage gap.
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 ('Open') plus the exact target ('recent-apps / overview screen') and even names the underlying keycode (APP_SWITCH). This cleanly distinguishes it from press_home, press_back, press_power, and press_enter, which the agent can rule out without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The intended use is implied by the target screen but there is no explicit when-to-use statement, no prerequisites (e.g. device unlocked, app in foreground), and no reference to alternative navigation tools such as press_home or press_back.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pullC
Pull a file/dir from the device to host path local.
| Name | Required | Description | Default |
|---|---|---|---|
| local | Yes | ||
| remote | Yes | ||
| serial | 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 carries the full behavioral burden. It only states the transfer direction and target path; it does not disclose permissions, overwrite behavior, device selection, directory recursion, error handling, 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?
The description is a single front-loaded sentence with no filler or repetition. Every word contributes to stating the action and direction.
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?
Although an output schema exists so return values need not be explained, the absence of annotations and 0% schema coverage means key behavioral and parameter details are missing. For a file-transfer tool with three parameters, the description is not complete enough for confident invocation.
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 three parameters. The description clarifies only that 'local' is the host path, but it does not explain 'remote' as the device source path or 'serial' as the optional device selector, leaving the schema to compensate with bare 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 states a specific verb ('Pull') and resource ('file/dir'), and clarifies the transfer direction from device to host path. It is clear enough to distinguish from most siblings, though it does not explicitly name the opposite sibling 'push' 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?
There is no explicit guidance on when to use this tool versus alternatives such as read_file, list_files, or push. The usage is only implied by the action itself, leaving the agent to infer context and prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pushC
Push a host file local to device path remote.
| Name | Required | Description | Default |
|---|---|---|---|
| local | Yes | ||
| remote | Yes | ||
| serial | 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 carries full behavioral burden. It does not disclose overwrite behavior, whether parent directories are created, permission requirements, or error handling for an operation that mutates the device filesystem.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The single sentence is front-loaded with the verb and contains no filler. Every word contributes to stating the action, making it as concise as possible for the stated purpose.
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 three parameters, 0% schema coverage, no annotations, and the presence of an output schema, the description is too thin. It omits usage guidance, the serial parameter, and behavioral details necessary to invoke the tool confidently.
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 briefly clarifies that local is a host file and remote is a device path. The serial parameter, which selects the target device, is entirely undocumented and the other two parameters receive minimal added meaning.
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 (push) and resource (host file to device path) using the parameter names local and remote. It distinguishes from the opposite sibling 'pull' implicitly by specifying direction, but does not explicitly differentiate from write_file or other file-transfer 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?
No when-to-use context is given. It does not say when to prefer push over write_file or pull, nor does it mention prerequisites or conditions such as requiring a connected device or root access.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
put_settingC
Write an Android setting. namespace = 'system' | 'secure' | 'global'.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | ||
| value | Yes | ||
| serial | No | ||
| namespace | 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 does not disclose that writing settings typically requires WRITE_SETTINGS permission or root, whether the change is persistent across reboots, or what happens on an invalid namespace/key. For a mutation tool with zero annotation coverage this 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 tight sentences with the core action front-loaded and the namespace constraint immediately after. No filler, though the extreme brevity is partly the source of the missing detail rather than deliberate economy.
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. However, for a 4-parameter mutation tool with no annotations, the description omits prerequisites (permissions/root), the role of the serial parameter for multi-device setups, and any usage context — leaving the agent under-equipped to call it 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% and there are 4 parameters, so the description must compensate. It clarifies the namespace enum values ('system' | 'secure' | 'global') but says nothing about key, value, or the optional serial parameter, which is entirely 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?
States a specific verb and resource ('Write an Android setting') and enumerates the valid namespace values, which distinguishes it from sibling read/write tools like get_setting and set_prop. It does not, however, explain what an Android setting is or how it differs from set_prop for an agent unfamiliar with the platform.
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?
No when-to-use guidance is given. The description never says how this differs from set_prop, run_shell, or get_setting, nor whether the device must be rooted or the setting pre-exist. The agent must infer usage entirely.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_fileB
Read a text file from the device (up to max_bytes). as_root uses su -c cat
(WSA/Magisk). Returns {remote, truncated, content}.
| Name | Required | Description | Default |
|---|---|---|---|
| remote | Yes | ||
| serial | No | ||
| as_root | No | ||
| max_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 full burden, and it does disclose useful traits: truncation via max_bytes, the as_root implementation (`su -c cat`, WSA/Magisk), and the return shape. It omits permission/error behavior (missing file, unreadable file) and binary/encoding handling, so it is adequate but 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?
Two tightly packed sentences that front-load the core action, then layer on the size cap, root mechanism, and return shape with no 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?
An output schema exists, so return values need not be detailed (the description redundantly lists them anyway). With no annotations and 0% schema coverage, the description should have covered error cases, permissions, and the remote/serial parameters more fully; it is workable but has clear 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 0%, so the description must compensate. It adds meaning for max_bytes (truncation threshold) and as_root (root cat mechanism), but the required 'remote' parameter and 'serial' are left completely unexplained, and no path format is given.
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 ('Read a text file from the device'), which is unambiguous and distinct from write_file/delete_file. However it does not explicitly differentiate itself from the read-oriented siblings pull or run_shell cat, leaving the agent to infer the boundary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance and no mention of alternatives such as pull (for binary/large files) or run_shell. The description only notes the max_bytes limit and as_root mechanism, which are capabilities rather than selection criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rebootB
Reboot the device. mode: '' (normal), 'recovery', 'bootloader', or 'sideload'.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | ||
| serial | 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 enumerates the four boot modes, including that 'recovery', 'bootloader', and 'sideload' put the device into special states, which is real behavioral information. However, it omits that this is a disruptive, state-changing operation that drops the ADB connection and interrupts running apps.
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, action first, parameter enumeration second. No filler; 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 not be described, and the mode semantics are covered. Still missing for a 2-param device-control tool are the meaning of `serial` (device targeting) and any note about connectivity loss during reboot.
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. It fully explains the `mode` parameter's accepted values and default, which is genuinely additive, but says nothing about `serial`, leaving half the parameters 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?
States a specific verb and resource ('Reboot the device'), which is unambiguous and distinct from every sibling (no other tool in the list reboots). It stops short of a 5 only because it adds no scope or differentiation context beyond the bare action.
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?
No guidance on when to use this tool versus alternatives, nor on prerequisites (device must be connected/selected) or consequences of rebooting. Usage is only implied by the tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
record_screen_startA
Start recording the screen on-device (screenrecord runs in the background).
time_limit_s caps duration (screenrecord max 180s per segment). size like
'720x1280' to downscale. Call record_screen_stop to finish and pull the mp4.
| Name | Required | Description | Default |
|---|---|---|---|
| size | No | ||
| serial | No | ||
| time_limit_s | No | ||
| bit_rate_mbps | 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 delivers real behavioral context: recording runs in the background, screenrecord caps at 180s per segment, and the mp4 is only obtainable via record_screen_stop. It omits permission/root requirements and what happens on repeated starts.
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, each earning its place, with the core action front-loaded and parameter notes and lifecycle handoff following in priority order. No 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?
An output schema exists so return values need not be explained, and the description covers the recording lifecycle and two key parameters. It is still thin on the serial/bit_rate parameters and on any preconditions for a device-mutating capture operation.
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% for 4 parameters, so the description must compensate. It explains time_limit_s (duration cap, 180s max per segment) and size (format '720x1280' for downscaling), but serial and bit_rate_mbps are left entirely 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 a specific verb and resource ('Start recording the screen on-device') and names the companion sibling record_screen_stop, so an agent can distinguish it from capture_screen variants and the stop tool 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?
Makes the usage context explicit: start recording, then call record_screen_stop to finish and pull the mp4. It gives clear positive routing but no when-not-to-use guidance (e.g., versus capture_screen for stills).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
record_screen_stopA
Stop the background screen recording, pull it to local_path, and clean up
the on-device file. Returns {status, local, size}.
| Name | Required | Description | Default |
|---|---|---|---|
| serial | 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, the description carries the full burden and discloses key behavior: it stops a background recording, pulls the file to `local_path`, and deletes the on-device file. That cleanup is an important destructive side effect, though error conditions and whether recording must be active are not covered.
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 tightly written sentence followed by a brief return summary. The main action is front-loaded and no words are 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 two-parameter tool with an output schema, the description adequately covers the main action and cleanup behavior. However, it leaves gaps around the `serial` parameter and failure modes, which matters because there are no annotations and no schema descriptions to fill those 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 0%, so the description must compensate for both parameters. It explains that `local_path` is the destination for the pulled file, but it completely omits the optional `serial` parameter, leaving half of the parameters 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?
The description states a specific verb and resource: stop the background screen recording, pull it to `local_path`, and clean up the on-device file. This clearly distinguishes it from siblings like `record_screen_start` and `capture_screen` by naming the stop-and-retrieve 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?
Usage is implied by the name and the phrase 'background screen recording', suggesting it is used after `record_screen_start`. However, the description does not explicitly say when to use this tool versus alternatives or state any prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remountB
Remount /system (and other partitions) read-write (adb remount). Needs root.
| Name | Required | Description | Default |
|---|---|---|---|
| serial | 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 the auth requirement (root) and that the operation makes partitions writable. However, it omits whether the change is persistent until reboot, its risk profile, and any side effects on the running system.
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?
One tight sentence with the action front-loaded and the prerequisite appended, no wasted 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 no explanation, and the key auth requirement is stated. The main gap is the undocumented serial parameter and the absence of any note about selecting the target device.
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 single optional parameter "serial" has 0% schema description coverage, and the description says nothing about it. An agent gets no explanation of how the device serial is used or what happens when it is omitted (default device?).
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 (remount) and resource (/system and other partitions) in read-write mode, and names the underlying adb command. It is clearly distinguishable from siblings like root_adb or set_prop, though it doesn't explicitly contrast itself with them.
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?
"Needs root" states a prerequisite, implying usage after root_adb, but there is no explicit when-to-use guidance, no exclusions, and no mention of what to do instead (e.g., reboot to restore read-only).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_forwardB
Remove a single adb forward rule for tcp:local_port.
| Name | Required | Description | Default |
|---|---|---|---|
| serial | No | ||
| local_port | 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 states that a rule is removed but says nothing about whether the call is idempotent, what happens if no matching rule exists, whether the serial parameter targets a specific device, or whether the operation affects other forwards — significant gaps for a mutation tool with zero annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler; the action, scope, and target port are all stated in one clause and every word 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 need not be described, and the core action is clear. However, for a 2-parameter mutation tool with no annotations, the missing device-targeting semantics and error behavior leave it only minimally 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 compensate for both parameters. It clarifies that local_port is the TCP local port of the forward rule, which adds a little meaning, but the optional serial parameter (device selection, default null) is never mentioned, leaving half the parameters 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 gives a specific verb and resource ('Remove a single adb forward rule') and scopes it to 'tcp:local_port', so the agent knows exactly which rule type is affected. The word 'single' implicitly distinguishes it from clear_forwards, but it never names that sibling, so differentiation is left partly to inference.
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: 'a single ... rule' hints that this removes one entry while clear_forwards removes all, but there is no explicit when-to-use, no mention of remove_reverse or clear_forwards as alternatives, and no stated prerequisites such as an active device connection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_reverseC
Remove a single adb reverse rule for tcp:device_port.
| Name | Required | Description | Default |
|---|---|---|---|
| serial | No | ||
| device_port | 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 says a single rule is removed but omits whether the operation requires a connected device, what happens if the rule does not exist, whether it is idempotent, or what side effects occur.
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 wasted words. It is efficient, though its extreme brevity contributes to the missing usage and parameter 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 return values need not be explained, and the core action is clear. However, with no annotations and 0% schema coverage, the description should do more to cover the optional `serial` parameter and basic mutation behavior; it is just barely enough to invoke 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%, so the description must document both parameters. It clarifies `device_port` as the TCP device port but never mentions the optional `serial` parameter, leaving half of the parameters undocumented in both the schema and the 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?
States a specific verb ('Remove') and resource ('a single `adb reverse` rule for tcp:device_port'), and the scope word 'single' separates it from bulk-clear siblings like `clear_forwards`. It does not explicitly name alternatives such as `list_reverses` or `reverse_port`, 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?
The description implies you use this tool when you want to delete one reverse rule, but it gives no explicit when-to-use guidance, no prerequisites, and no alternatives to compare against. An agent would need to infer usage from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reverse_portA
adb reverse tcp:device tcp:host — map a DEVICE port to a HOST port so the
app's 127.0.0.1:<device_port> traffic reaches your PC (e.g. a local API/CDN shim).
| Name | Required | Description | Default |
|---|---|---|---|
| serial | No | ||
| host_port | Yes | ||
| device_port | 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 behavioral burden. It explains the mechanism (device-localhost traffic tunnels to the host), which is genuinely useful, but says nothing about persistence across reconnects, conflict behavior with existing reverses, or that a mapping is added to state that must later be removed. The mechanism is clear; the side effects are not.
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 dense sentence, front-loaded with the command form and immediately followed by the directional explanation and an example. Nothing is wasted and the key distinguishing information comes first.
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 with zero schema coverage and zero annotations, the description should do more: the serial parameter is undocumented and stateful consequences (persistence, removal via remove_reverse) are unmentioned. It covers purpose and direction adequately but leaves real gaps for a mutation 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. The adb command form and the '127.0.0.1:<device_port>' example clarify the roles of device_port and host_port, but the third parameter (serial) is entirely unaddressed and no type/format guidance is given, so the coverage gap is only partially filled.
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 precise verb+resource with directionality: it maps a DEVICE port to a HOST port, distinguishing it semantically from forward_port by stating which side each port lives on. It does not name the sibling alternative explicitly, so an agent must infer the forward/reverse distinction, keeping it just below 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?
A concrete use case is provided ('so the app's 127.0.0.1:<device_port> traffic reaches your PC, e.g. a local API/CDN shim'), which implies when to reach for it. However, there is no explicit when-not guidance and no reference to forward_port or the remove_reverse/list_reverses siblings, leaving the usage context only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
revoke_permissionC
Revoke a runtime permission (pm revoke).
| Name | Required | Description | Default |
|---|---|---|---|
| serial | No | ||
| package | Yes | ||
| permission | 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 burden. It adds genuine context by naming the underlying `pm revoke` mechanism and limiting scope to runtime permissions, but it omits permission requirements, reversibility, error behavior, and device targeting. Useful, but far from complete 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?
A single short sentence with zero filler, front-loaded with the verb and resource. It is efficient, though arguably terse to the point of under-specification for a tool with no annotations.
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 the tool is an unannotated mutation operation with zero parameter coverage and no stated prerequisites or side effects. For a revoke action that can affect app behavior, the description leaves too much unstated.
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 documents none of the three parameters. 'package' and 'permission' are largely self-explanatory by name, but the optional 'serial' parameter is undocumented in both places, leaving multi-device targeting behavior 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?
States a specific verb (revoke) and resource (runtime permission) and maps it to the underlying `pm revoke` command, so the action is unambiguous. It does not, however, distinguish itself from the sibling grant_permission tool or note the inverse relationship, 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?
There is no when-to-use or when-not-to-use guidance. The 'runtime' qualifier hints that manifest permissions are out of scope, but the description never says so, nor does it mention prerequisites such as root access or the package being installed. The agent must infer the boundaries entirely.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
root_adbA
Restart adbd as root (adb root). Only works on rooted/userdebug builds;
on production builds use su via read_file(as_root=True) etc. instead.
| Name | Required | Description | Default |
|---|---|---|---|
| serial | 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 and usefully discloses the root-requirement constraint and a fallback path. It stops short of describing security implications, persistence, or what happens on an already-rooted device, so it is strong but not complete.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with no wasted words. The main action and the critical compatibility constraint are front-loaded, and the alternative follows immediately.
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 description covers the action, constraints, and fallback, and an output schema exists so return values need not be explained. The only meaningful gap is the undocumented `serial` parameter, which is minor for this root-escalation tool but still a 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?
The schema has 0% description coverage, and the sole parameter `serial` is not mentioned in the description. The description does not compensate for the missing parameter semantics, leaving the agent without guidance on what `serial` selects or when to omit 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 states a specific verb and resource: restart adbd as root, and names the underlying `adb root` command. It also distinguishes the operation's scope by noting it only works on rooted/userdebug builds, making it easy to separate from siblings like unroot_adb.
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 explicit when-it-works guidance ('Only works on rooted/userdebug builds') and an alternative for production builds ('use su via read_file(as_root=True) etc. instead'). This directly routes the agent to the correct tool or fallback without inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_shellA
Run an arbitrary device shell command. DISABLED by default — set the env var ADB_MCP_ALLOW_SHELL=1 to enable. Prefer the specific scoped tools; this exists only as an explicit, opt-in escape hatch. Returns {rc, output}.
| Name | Required | Description | Default |
|---|---|---|---|
| serial | No | ||
| command | Yes | ||
| 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 carries the full burden and does well: it discloses that the tool is DISABLED by default and requires an env var to enable, and gives the return shape {rc, output}. It stops short of stating that commands execute with device shell privileges or any timeout/failure semantics, so not fully complete for an arbitrary-execution escape hatch.
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 tightly packed sentences: purpose first, then gating/opt-in behavior, then return shape. No filler, front-loaded, and every sentence adds actionable 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 and the description still concisely summarizes {rc, output}. Purpose, gating, and alternative-routing are all covered; the only gap is the undocumentable-from-schema parameter semantics (serial/timeout), which is minor for an escape-hatch 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%, so the description must compensate for three undocumented params, but it only loosely implies the 'command' param. The 'serial' target and 'timeout' (units, default 30) are explained nowhere, leaving the agent to infer them.
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 (run) and resource (arbitrary device shell command), and immediately positions itself against the ~90 scoped siblings as the general-purpose escape hatch. An agent can distinguish it from list_packages, push, dumpsys, etc. without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'Prefer the specific scoped tools' and frames itself as 'only an explicit, opt-in escape hatch', giving a clear when-not-to-use rule plus the enablement condition (ADB_MCP_ALLOW_SHELL=1). This is exactly the routing guidance needed for a fallback tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_broadcastB
Send a broadcast intent (am broadcast -a <action>). Optional target
component and string extras {key: value}.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | ||
| extras | No | ||
| serial | No | ||
| component | 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 carries the full burden. It usefully reveals the mechanism (raw `am broadcast -a`), which implies the invocation reaches registered broadcast receivers, but it says nothing about required permissions, potential side effects on the device, or whether the broadcast is ordered/sticky. The mechanism disclosure is real value, but the risk profile is undisclosed.
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 core action front-loaded and the optional arguments following. No filler, no 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?
An output schema exists, so return values needn't be explained. But with zero annotations and zero schema coverage, the description leaves the `serial` parameter and the tool's side-effect/permission profile unaddressed — acceptable for a simple adb wrapper, but incomplete for correct invocation.
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. It documents three of four parameters — `action`, `component` as the target component, and `extras` as string key/value pairs — adding format meaning beyond the bare schema. However, the `serial` parameter (device targeting) is entirely 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?
States a specific verb+resource ('Send a broadcast intent') and anchors it to the underlying adb command `am broadcast -a <action>`, which lets an agent distinguish it from siblings like start_service or launch_activity. It doesn't explicitly name a sibling to differentiate against, 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?
No when-to-use or when-not-to-use guidance is given, and no alternatives are named despite a large sibling set (start_service, launch_activity, run_shell) that could plausibly overlap. The agent must infer the use case from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_airplane_modeB
Toggle airplane mode (settings + broadcast). May need root on newer Android.
| Name | Required | Description | Default |
|---|---|---|---|
| serial | No | ||
| enabled | 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. It usefully discloses the root requirement on newer Android and the settings+broadcast mechanism, but omits whether the change is reversible, what happens to existing wifi/cellular state, and confirmation/error behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, no filler, with the primary action front-loaded ahead of the caveat.
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 for a mutation tool with zero annotation coverage and 0% parameter descriptions, the definition leaves the serial argument and the exact effect of 'enabled' unexplained. Adequate on the basics, thin on the rest.
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 documents neither the nullable 'serial' selector nor how 'enabled' should be interpreted. Calling it 'toggle' while the schema takes an explicit 'enabled' boolean further muddies the semantics of the one required 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 (toggle) and resource (airplane mode), and the parenthetical 'settings + broadcast' clarifies the two mechanisms applied. It is clearly distinguishable from nearby siblings like set_wifi and set_mobile_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?
There is no guidance on when to use this tool versus alternatives (e.g. set_wifi / set_mobile_data for connectivity changes), nor any stated preconditions. The root caveat is a permission note, not usage routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_default_deviceA
Set the session default device serial (overrides ADB_SERIAL for later calls). Pass an empty string to clear it.
| Name | Required | Description | Default |
|---|---|---|---|
| serial | 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 burden. It discloses the key behavioral trait that this mutates session state persisting into later calls (overriding ADB_SERIAL) and defines the clearing semantics via empty string. It does not say whether the serial must be connected/valid or what error surfaces otherwise, but the core side effect is well 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 tight sentences, no waste, with the primary effect front-loaded before the clearing rule. Every clause 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 need not be described. For a single-parameter session-mutating tool, the description covers purpose, persistent effect, and reversal; only validation/error behavior on a bad serial is unaddressed, which is a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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: the lone parameter is identified as a device serial and the non-obvious sentinel value (empty string clears) is spelled out, which the bare 'string' schema does not convey. Serial format/validity is still left implicit.
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 ('set the session default device serial') and clarifies scope with the parenthetical that it overrides ADB_SERIAL for later calls. This cleanly distinguishes it from the sibling getter get_default_device without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implies the use case (route subsequent calls to a chosen device) and explains how to undo it ('pass an empty string to clear it'), but never names alternatives such as get_default_device or get_devices, nor states when setting a default is preferable to passing a serial per call. Usage is inferable rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_mobile_dataB
Enable/disable mobile data via svc data (may need root on newer Android).
| Name | Required | Description | Default |
|---|---|---|---|
| serial | No | ||
| enabled | 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 burden. It usefully discloses the underlying `svc data` command and warns that root may be required, but omits side effects, reversibility, and failure behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler. It efficiently conveys the action and a key caveat.
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 device-control mutation with no annotations and 0% schema description coverage, the description is incomplete. It does not explain the serial parameter, required permissions beyond a vague root hint, or what happens when root is unavailable.
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. It clarifies the `enabled` boolean but completely omits the optional `serial` parameter, leaving device targeting 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?
The description states a specific verb and resource: enable/disable mobile data. It distinguishes the resource from siblings like set_wifi and set_airplane_mode, though it does not explicitly name alternatives.
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 mentions a root prerequisite on newer Android, which is useful context. However, it provides no guidance on when to use this tool versus alternatives such as set_wifi or set_airplane_mode.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_package_enabledB
Enable or disable a package (pm enable / pm disable-user).
| Name | Required | Description | Default |
|---|---|---|---|
| serial | No | ||
| enabled | Yes | ||
| package | 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 full behavioral burden. It discloses the underlying `pm enable` / `pm disable-user` commands, which is useful, but omits permissions needed, side effects on running apps, reversibility, and whether the change persists.
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 zero waste. The core operation and the underlying commands are delivered immediately.
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?
Although an output schema exists and covers return values, the tool is a mutation with no annotations and 0% schema description coverage. The description is too thin to fully prepare an agent for correct invocation, especially regarding parameter semantics and side effects.
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. It implies the `package` and `enabled` parameters through the operation name, but says nothing about the `serial` parameter or the exact mapping of `enabled` to `pm enable` versus `pm disable-user`.
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 operation (enable or disable a package) and maps it to the underlying `pm enable` / `pm disable-user` commands. This is clearly distinct from sibling package tools like install, uninstall, clear_app_data, and list_packages.
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?
No guidance on when to use this tool versus alternatives such as `uninstall` or `clear_app_data`, nor any prerequisites or exclusions. Usage is only implied by the operation name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_propB
Set a system property (setprop). Many props are read-only or need root.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| value | Yes | ||
| serial | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description carries the full burden. It discloses that many props are read-only and may require root, which is useful behavioral context. However, it omits other important traits such as error behavior, persistence, or the effect of the `serial` parameter.
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 two concise sentences, front-loading the purpose and then the caveat. Every sentence earns its place with no redundancy.
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 tool has three parameters with no schema descriptions and no annotations, the description is too brief. It omits parameter semantics and deeper behavioral details, though the presence of an output schema partially covers return values.
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 does not mention any parameters. It provides no information about `name`, `value`, or `serial`, leaving their semantics entirely to the schema's titles, which are minimal.
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 ('Set a system property'), and the mention of `setprop` ties it to the underlying command. It clearly distinguishes from sibling `get_prop` and is not confusable with setting-related tools like `put_setting`.
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 caveat ('Many props are read-only or need root'), but does not explicitly state when to use this tool versus alternatives like `put_setting` or `get_prop`. It implies usage context but lacks explicit guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_wifiB
Enable/disable Wi-Fi via svc wifi (may need root on newer Android).
| Name | Required | Description | Default |
|---|---|---|---|
| serial | No | ||
| enabled | 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 one genuinely useful trait: the operation runs via `svc wifi` and may require root on newer Android. However, it says nothing about failure modes, whether the device must be connected, or what a successful toggle returns.
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 zero waste: the action comes first and the operational caveat follows. Nothing needs trimming.
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 root caveat covers the main risk. But for a mutation tool with an entirely undocumented `serial` parameter and no annotation coverage, the description is only minimally sufficient.
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 implicitly maps to the `enabled` boolean via 'Enable/disable'. The `serial` parameter for targeting a device is never mentioned in either schema or description, leaving a real gap.
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 pair (enable/disable) and resource (Wi-Fi) that is unambiguous and distinguishable from siblings like set_mobile_data and set_airplane_mode. It never names an alternative, but the action itself is clear enough that an agent knows what it does.
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 tool name and the parenthetical root caveat. There is no explicit when-to-use or when-not-to-use guidance, and no mention of the device-selection context that would matter alongside set_mobile_data/set_airplane_mode.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
start_serviceC
Start a service by component 'pkg/.Service' (am startservice).
| Name | Required | Description | Default |
|---|---|---|---|
| serial | No | ||
| component | 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 reveals the underlying mechanism (`am startservice`) but says nothing about permissions required, side effects, whether the service persists, or failure modes for a mutation-style 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?
A single tight sentence that front-loads the action and includes the parameter format. No wasted words, though it is minimal rather than rich.
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 required parameter format is covered. However, with no annotations and no usage context for a 2-param device-control tool, the definition is only adequate.
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. It usefully clarifies the required 'component' parameter's format ('pkg/.Service'), but the optional 'serial' parameter is left entirely 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 states a specific verb+resource ('Start a service') and specifies the component format 'pkg/.Service' with the underlying command `am startservice`. This distinguishes it from launch_activity and launch_package by resource type, though it does not name the siblings 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 guidance on when to use start_service versus the many related siblings (launch_activity, launch_package, send_broadcast). No prerequisites, no exclusions, no selection criteria are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
stat_fileC
Return stat info for a device path: {size, mtime, perms, uid, gid} (best-effort).
| Name | Required | Description | Default |
|---|---|---|---|
| remote | Yes | ||
| serial | 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 carries the full behavioral burden. The '(best-effort)' caveat is a genuinely useful disclosure about reliability, but it omits whether the operation is read-only, what happens on a missing path, or any permission/device requirements.
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 enumerates the output fields compactly with zero filler. Well-sized for the operation, though extremely terse.
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 strictly required, and the description does name the fields. However, with 0% parameter coverage and no annotations, the missing parameter semantics and error/behavioral details leave the definition only minimally 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% and the description does not explain either parameter. 'Device path' loosely hints at 'remote', but 'serial' (device selector) is entirely undocumented, so the description fails to compensate for the coverage gap.
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 ('Return stat info for a device path') and enumerates the returned fields, which clearly distinguishes it from siblings like list_files or file_exists. It is not tautological and an agent can identify the operation without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no mention of alternatives such as file_exists or list_files, and no prerequisites or exclusions. The agent must infer the appropriate context entirely on its own.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
swipeB
Swipe from (x1,y1) to (x2,y2) over duration_ms. Use for scrolling/flinging.
| Name | Required | Description | Default |
|---|---|---|---|
| x1 | Yes | ||
| x2 | Yes | ||
| y1 | Yes | ||
| y2 | Yes | ||
| serial | No | ||
| duration_ms | 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 carries the full burden of behavioral disclosure. It mentions the gesture path and duration, but says nothing about coordinate origin, device targeting via serial, required connection state, side effects, or whether the gesture is blocking. For an input action tool with no annotations, this 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?
The description is two short sentences and is front-loaded with the core operation. Every sentence earns its place, and there is no filler or repetition.
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 do not need explanation. However, with no annotations and 0% schema description coverage, the description is too thin for a six-parameter gesture tool. It omits important context such as coordinate system, serial behavior, and duration units/defaults.
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 six undocumented parameters. It restates x1, y1, x2, y2, and duration_ms, but adds no coordinate origin, units, or format details. The serial parameter is not mentioned at all, and the duration default is left to 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 states a specific verb and resource: swipe from one coordinate to another over a duration. It also hints at the primary use case, scrolling/flinging. It is clear, but it does not explicitly distinguish itself from sibling gesture tools such as drag or long_press.
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 second sentence gives clear usage context: 'Use for scrolling/flinging.' This tells the agent when the tool is appropriate. However, it does not state when not to use it or name alternative sibling tools for related gestures.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tapC
Tap the screen at pixel (x, y).
| Name | Required | Description | Default |
|---|---|---|---|
| x | Yes | ||
| y | Yes | ||
| serial | 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 carries the full behavioral burden and falls well short. It does not mention that a device must be connected, whether the tap is relative to the current screen orientation or the physical display, or which device is targeted when the serial parameter is omitted.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short, front-loaded sentence with zero padding — but the terseness here reflects under-specification rather than disciplined concision. It is efficient in size but does not earn its brevity with required detail.
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. Still, for a 3-parameter device-interaction tool with no annotations, the description omits device targeting, connectivity prerequisites, and differentiation from tap_element, leaving 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 description coverage is 0% and the parameters have only bare titles. The description does add one genuinely useful semantic: x and y are pixel coordinates. But the optional 'serial' parameter is never explained, so an agent has no idea how to target a specific device among several.
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 with the operand form: 'Tap the screen at pixel (x, y).' An agent immediately knows this is an input-injection action. However, it does not differentiate itself from the sibling tap_element, which also taps, so the boundary between the two is left to inference.
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 at all. With siblings like tap_element, long_press, swipe, and drag, the description never says when raw pixel tapping is preferable to element-based tapping or when it should not be used.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tap_elementA
Find an element (by text/resource_id/content_desc) and tap its center.
index selects among multiple matches. Returns the matched element + tap point.
| Name | Required | Description | Default |
|---|---|---|---|
| text | No | ||
| exact | No | ||
| index | No | ||
| serial | No | ||
| resource_id | No | ||
| content_desc | 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 carries the full behavioral burden. It discloses that it taps the center, uses index to select among multiple matches, and returns the matched element plus tap point, but it does not describe failure behavior, side effects, permissions, or multi-device handling.
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 written sentences with the core behavior and return value front-loaded. Every sentence adds useful information with no 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?
An output schema exists, so return values need not be fully explained. However, for a six-parameter action tool with no annotations and 0% schema coverage, the description should clarify exact matching, serial/device selection, and failure cases, which it does not.
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 six parameters. It explains text, resource_id, content_desc, and index, but leaves exact and serial unexplained, leaving meaningful 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?
The description states a specific verb+resource: find an element by text/resource_id/content_desc and tap its center. It clearly distinguishes from a bare coordinate tap by naming selectors, but it does not explicitly contrast with siblings like tap or find_elements.
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 by the selector-based tap behavior, but there is no explicit guidance on when to choose this over tap, find_elements, or long_press. It also omits any prerequisites such as device selection or match requirements.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
textB
Type a string into the focused field. Spaces and shell-special characters are escaped so the literal text is entered.
| Name | Required | Description | Default |
|---|---|---|---|
| value | Yes | ||
| serial | 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, but it does add a valuable behavioral detail: spaces and shell-special characters are escaped so the literal text is entered. However, it does not disclose other important traits such as device targeting (serial), required permissions, or whether it waits for the field to be ready.
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, followed by a useful escaping note. No wasted words; every sentence 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?
For a simple adb tool with an output schema (so return values need no explanation), the description is adequate but incomplete. It omits any mention of the serial parameter and lacks context about focusing fields or usage in multi-device scenarios, which matters in a suite with many sibling tools.
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. It implicitly covers the 'value' parameter ('type a string'), but says nothing about the optional 'serial' parameter, leaving device selection entirely undocumented. This is a significant gap for a 2-parameter tool.
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: 'Type a string into the focused field.' This clearly distinguishes it from sibling tools like keyevent (which sends key presses) and run_shell (which executes commands). An agent can tell what it does 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?
No explicit when-to-use or when-not-to-use guidance is provided. It implies a focused field must exist but does not say to use tap or other focus tools first, nor does it mention any alternatives or prerequisites. The agent must infer usage context entirely.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
uninstallB
Uninstall a package. keep_data=True keeps data/cache dirs (-k).
| Name | Required | Description | Default |
|---|---|---|---|
| serial | No | ||
| package | Yes | ||
| keep_data | 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 carries the full behavioral burden. It usefully discloses the data-retention behavior ('keep_data=True keeps data/cache dirs (`-k`)'), which is real context beyond the schema, but it never states the destructive nature of removing a package or any permission/root requirements.
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 primary action front-loaded and the flag semantics immediately after. No 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?
An output schema exists, so return values need no explanation. However, for a destructive, unannotated tool the description omits permission/root requirements and the meaning of `serial`, leaving gaps an agent must resolve elsewhere.
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. It clearly explains keep_data including the underlying `-k` flag, but the `serial` parameter (used to target a specific device) is left completely 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 a specific verb and resource ('Uninstall a package'), so an agent immediately knows what it does. It does not name or differentiate from near neighbors like clear_app_data or install_apk, but the core action 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?
No guidance on when to use this versus alternatives such as clear_app_data (which retains the package) or set_package_enabled (which disables rather than removes). The agent must infer the use case from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unroot_adbB
Restart adbd without root (adb unroot).
| Name | Required | Description | Default |
|---|---|---|---|
| serial | 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, yet it only says adbd restarts. It omits the consequences of that restart (daemon teardown, transient disconnection, loss of root-only capability for subsequent calls) and whether the device must already be rooted. Nothing is disclosed beyond the one-line summary.
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?
One sentence, no filler, and the core action is front-loaded. Every word earns its place and the CLI equivalent is a compact, useful anchor.
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, and the tool is a simple one-step operation. However, with no annotations and an undocumented `serial` parameter, the definition does not tell the agent about the restart's side effects or how to target a specific device, leaving real gaps for an operation that changes device 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 the single `serial` parameter is never mentioned in the description, so its meaning (targeting one of several connected devices) must be guessed. With low coverage the description should compensate, and it does not.
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 (restart adbd) and pins it to the exact CLI equivalent (`adb unroot`), so the operation is unambiguous. It does not explicitly name the sibling `root_adb` or state the inverse relationship, 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 only implied: an agent can infer this is the tool for dropping root, and the parenthetical `adb unroot` hints at the counterpart of `root_adb`. There is no explicit when-to-use statement, no prerequisite (e.g. device must currently be rooted), and no named alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wait_for_deviceA
Block until the device is online (or timeout). Useful after reboot/connect.
| Name | Required | Description | Default |
|---|---|---|---|
| serial | No | ||
| timeout | 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 burden, and it does disclose the key trait: the call blocks rather than returning immediately. However, it never says what happens on timeout (error, exception, or a success/failure return) or which device is targeted when serial is omitted, leaving meaningful behavior undisclosed.
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, front-loaded with the blocking behavior and scoped by the timeout parenthetical. Every word 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 need not be explained, and the tool is simple. Still, for a blocking call with two undocumented parameters and no annotations, the timeout outcome and default-device fallback are gaps an agent would need.
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: 'timeout' is only alluded to in passing with no units, and 'serial' is never mentioned. It also doesn't state that omitting serial falls back to the default device, which is the most important semantic for this 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 and outcome ('Block until the device is online') with the timeout escape hatch, which cleanly distinguishes it from the immediate-return siblings get_devices and get_state. It does not name those siblings, 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?
'Useful after reboot/connect' gives a concrete trigger condition tied to the sibling tools reboot and connect. It provides clear positive context but no explicit when-not guidance (e.g. that it is redundant before a call that already blocks).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wake_and_unlockA
Wake the screen and swipe up to dismiss a non-secure lock screen.
| Name | Required | Description | Default |
|---|---|---|---|
| serial | 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 usefully discloses the key limitation that it only dismisses non-secure lock screens, but it omits what happens on a secure device (failure mode), whether the device must be connected/awake, and any required permissions.
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 zero filler that states action, mechanism, and scope constraint in one pass.
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?
Output schema exists so return values needn't be explained, and the low complexity (one optional param) keeps the description near adequate. Still, the absent annotations and undefined serial param leave the safety/state profile thin for a tool that mutates device 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 the description never mentions the serial parameter or how it selects a target device. The description adds no meaning beyond the bare 'serial' field name, though the field is largely self-explanatory given the toolset's convention.
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 two-step action (wake the screen, swipe up to dismiss) on a clearly scoped resource (a non-secure lock screen). This distinguishes it from the generic swipe and press_power siblings, which cannot complete the unlock flow on their own.
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 qualifier 'non-secure lock screen' implicitly signals the applicability condition, so the agent can infer when it will work. However, no explicit alternative is named for secure lock screens, and there is no when/when-not guidance or mention of required device state.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
write_fileA
Write text content to a device file by pushing a temp file (handles any
content safely, unlike shell echo). as_root pushes to /data/local/tmp then
su -c cp into place. Returns {status, remote, bytes}.
| Name | Required | Description | Default |
|---|---|---|---|
| remote | Yes | ||
| serial | No | ||
| as_root | No | ||
| content | 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 burden, and it does disclose real behavior: the temp-file push mechanism, the elevated path (/data/local/tmp + su -c cp), and the return shape. It omits overwrite/truncate semantics, permission prerequisites, and whether parent directories are created — gaps for a mutation tool, but the mechanism disclosure is well above average.
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 tight sentences: the primary action and its rationale come first, the as_root special case second, the return shape last. Zero 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?
The return shape ({status, remote, bytes}) is covered by the output schema, and the description correctly focuses on mechanism rather than repeating it. Given no annotations and 0% schema coverage, it is nearly complete, with the only real hole being overwrite/failure behavior.
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 `content` and `as_root` meaningfully and implies `remote` is the target device file, but `serial` is never addressed and no parameter takes format/syntax detail. Partial compensation for a four-parameter tool.
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 ('Write text content to a device file') and immediately distinguishes itself from the closest overlapping approach ('handles any content safely, unlike shell echo'). An agent can tell this apart from run_shell-echo or a raw push 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?
Explains the context in which it is preferable (safe handling of arbitrary content vs shell echo) and describes the as_root variant's behavior. It stops short of naming an explicit alternative tool (e.g. push) or stating when not to use it, so it is clear but not fully routed.
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.
90 tool updates
v0.1.0- First observed
adb_version - First observed
app_status - First observed
capture_bugreport - First observed
capture_screen - First observed
capture_screen_base64 - First observed
capture_screen_to_file - First observed
clear_app_data - First observed
clear_forwards - First observed
connect - First observed
delete_file - First observed
disconnect - First observed
drag - First observed
dump_ui - First observed
dumpsys - First observed
file_exists - First observed
find_elements - First observed
force_stop - First observed
forward_port - First observed
get_anr_traces - First observed
get_battery - First observed
get_crash_log - First observed
get_current_activity - First observed
get_default_device - First observed
get_device_properties - First observed
get_devices - First observed
get_ip_address - First observed
get_meminfo - First observed
get_package_info - First observed
get_prop - First observed
get_screen_info - First observed
get_setting - First observed
get_state - First observed
get_top - First observed
get_uptime - First observed
grant_permission - First observed
install_apk - First observed
keyevent - First observed
kill_background - First observed
launch_activity - First observed
launch_package - First observed
list_files - First observed
list_forwards - First observed
list_packages - First observed
list_processes - First observed
list_reverses - First observed
list_services - First observed
logcat_clear - First observed
logcat_dump - First observed
logcat_filter - First observed
logcat_start - First observed
logcat_stop - First observed
long_press - First observed
make_dir - First observed
press_back - First observed
press_enter - First observed
press_home - First observed
press_power - First observed
press_recents - First observed
pull - First observed
push - First observed
put_setting - First observed
read_file - First observed
reboot - First observed
record_screen_start - First observed
record_screen_stop - First observed
remount - First observed
remove_forward - First observed
remove_reverse - First observed
reverse_port - First observed
revoke_permission - First observed
root_adb - First observed
run_shell - First observed
send_broadcast - First observed
set_airplane_mode - First observed
set_default_device - First observed
set_mobile_data - First observed
set_package_enabled - First observed
set_prop - First observed
set_wifi - First observed
start_service - First observed
stat_file - First observed
swipe - First observed
tap - First observed
tap_element - First observed
text - First observed
uninstall - First observed
unroot_adb - First observed
wait_for_device - First observed
wake_and_unlock - First observed
write_file
TDQS
Scored across 90 tools
Many tools have distinct purposes, but several overlapping groups exist (e.g., capture_screen variants, tap vs tap_element, launch_package vs launch_activity, force_stop vs kill_background, logcat_dump vs logcat_filter). With 90 tools, an agent may struggle to select the right one, though descriptions help clarify boundaries.
All tool names use snake_case, providing a consistent surface style. However, there is a mix of verb_noun (list_packages, get_devices) and bare verbs (connect, reboot, tap), and inconsistent verb choices for similar operations (set_prop vs put_setting). These are minor deviations from a uniform pattern.
90 tools is far above the recommended 3-15 range and exceeds the 50+ threshold for extreme mismatch. While ADB is a complex domain, the tool count is excessive and many tools could be consolidated (e.g., screen capture variants, logcat controls), creating a high cognitive load for agents.
The set covers a very broad range of ADB functionality: device management, app lifecycle, file operations, input, logging, screen capture, networking, settings, and UI automation. Minor gaps exist (e.g., setting display size/density, managing users, kernel logs), but agents can work around most tasks.
Maintenance
Related MCP Connectors
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
MCP server for your apps' tools and custom tools, plus hosted AI agents and approval-gated workflows
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
MCP server for building and testing AI agents with multi-model experimentation and insights.
Related MCP Servers
- FlicenseAqualityDmaintenanceA MCP server that enables AI assistants to control Android devices via ADB, supporting device info, screen control, input simulation, app management, shell execution, file transfer, and UI parsing.20-
- AlicenseBqualityAmaintenanceA comprehensive MCP server that enables AI agents to interact with Android devices through Android Debug Bridge (ADB), offering 198 tools for device control, app management, diagnostics, and more.10034 npm19Apache 2.0
- FlicenseNot gradedqualityDmaintenanceA powerful MCP server that provides comprehensive Android device automation capabilities through ADB, enabling AI agents to interact with Android devices for testing, automation, and device control tasks.1-
- AlicenseNot gradedqualityDmaintenanceAn MCP server that wraps Android ADB functionality into AI assistant tools, enabling device management, shell execution, file operations, app management, media capture, and log analysis via natural language.16 npm2MIT