mobilerun-mcp
This server is an MCP-based phone automation server that lets an AI agent (or a user) control Android, iOS, and Mobilerun Cloud devices through 149 tools.
See the screen:
perceive_screenreturns numbered, tappable elements (som_id) plus an annotated screenshot;read_screen,get_ui_tree, andscreenshotgive text/UI/image views.Touch and gestures: tap, double-tap, long-press, swipe, scroll (all directions), and scroll-to-element by label.
Type and keys: type text, clear/submit fields, press home/back/enter, open recent apps, send raw key events.
Apps and links: launch apps by name or package, list/search installed apps, find and open deep links, resolve which app handles a URI.
System tasks: one-call intents for alarms, timers, dialing, SMS, calendar events, navigation, sharing; contact lookup.
Notifications: read, dismiss, and click notification action buttons (reply, archive, stop, etc.).
Media: control playback (play/pause/next/previous...), adjust volume, mute.
Files: search device storage and open files in their default viewer.
Browser automation: open/read/search/wait on web pages, extract tables/links, click/type/scroll/select, upload files, and hand off to a human for logins or CAPTCHAs.
Waiting and verification: wait for text/app/activity, watch device events, dry-run validation, and verify outcomes against the live screen.
Planning: set a task plan, mark steps, record findings with quotes, and end sessions with success/partial/failed outcomes.
Web search: search for how-to guidance when unsure how to perform a task in an app.
Agent tasks: hand a natural-language goal to the Mobilerun LLM agent (
run_task), monitor/stop tasks, and replay recorded macros.Device management: list/ping/connect devices, get device status (battery, storage, network, volume), install the Portal, run diagnostics.
Cloud platform: provision/terminate cloud devices, manage apps/files/settings/eSIMs/credentials/proxies/webhooks/workflows.
Extras: OCR (tesseract) for sparse screens, icon detection (OmniParser), raw adb commands (opt-in), and a safety policy mode for sensitive apps/data.
Provides an AI agent with eyes and hands on Android devices, enabling screen perception, gestures, typing, app launching, deep links, intents, notifications, media, file operations, and browser automation via adb and the Mobilerun Portal.
Provides web search functionality via the Brave Search API as an optional backend when BRAVE_API_KEY is set.
Provides web search functionality using DuckDuckGo as the default search backend.
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., "@mobilerun-mcpOpen Chrome and search for 'MCP servers'"
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.
mobilerun-mcp
An MCP server that controls phones: Android (physical, emulator, redroid; ARM or x86_64) over adb, iOS through ios-portal, and Mobilerun Cloud devices. Everything runs on the host, so nothing ARM-only has to run on the device.
149 tools, covering the full tool surface of AURA's MCP server, droidrun's mobilerun-core Device API, the mobilerun agent actions and droidrun's official mobilerun-mcp cloud tools, under the same names and parameters.
MCP client (Claude Code, Cursor, ...)
| stdio, or HTTP (--http)
mobilerun-mcp ---- adb ------------------> Android device (Mobilerun Portal)
| | '------ CDP over adb forward --> on-device browser / WebViews
| '---------- mobilerun-core --------> iOS (ios-portal), Portal-HTTP-only Android,
| Mobilerun Cloud
'-- host-side OCR (tesseract) and icon detector (OmniParser v2, onnxruntime)Jump to: Quick start · Troubleshooting · Calling the tools · Tool reference · Configuration
Why this exists
Android MCP servers that run on the phone are convenient, but they depend on on-device native
libraries built for ARM. On an x86_64 device (redroid, an emulator, an Android-x86 box) those
libraries run under a translation layer that cannot execute some instructions, and the app
crashes. This server keeps all the heavy lifting on the host: it reads the screen through the
Mobilerun Portal accessibility service, drives
gestures through the Portal and adb, and reaches the browser through Chrome DevTools. Nothing
ARM-only runs on the device.
It also works over any network adb works over (LAN, VPN, adb connect), not only the same Wi-Fi.
Related MCP server: MCP Scrcpy Vision
Quick start
Requirements
Package | Needed for | Install |
| device access | download, |
| environment and dependencies | |
| installing the Portal; |
|
| OCR on screens with a sparse accessibility tree | install, |
Python dependencies (fastmcp, mobilerun-core[local], onnxruntime, numpy, pillow, ...) are
installed with the project. The icon detector for perceive_screen(detail="full") (OmniParser v2,
~80 MB, AGPL-3.0) downloads on first use to ~/.cache/mobilerun-mcp.
You also need an Android device that adb can reach: a USB phone
(enable USB debugging), an x86_64
emulator, or
redroid:
docker run -itd --privileged -p 5555:5555 redroid/redroid:12.0.0-latest
adb connect localhost:5555Install
adb devices # note the serial
# Mobilerun Portal: the accessibility service the server reads the screen through
mobilerun setup -d <serial>
mobilerun ping -d <serial> # Portal is installed and accessible
# Server
git clone https://github.com/Hi-im-Connect/mobilerun-mcp.git && cd mobilerun-mcp
uv venv --python 3.13 .venv && uv pip install --python .venv/bin/python -e .On Windows use .venv\Scripts\python.exe in place of .venv/bin/python.
Download the APK from Portal releases, then:
adb -s <serial> install -r <portal.apk>
# enable it: Settings > Accessibility > Mobilerun Portal, or headless (replaces other enabled services):
adb -s <serial> shell settings put secure enabled_accessibility_services com.mobilerun.portal/com.mobilerun.portal.service.MobilerunAccessibilityService
adb -s <serial> shell settings put secure accessibility_enabled 1Register with your MCP client
Claude Code
claude mcp add --scope user mobilerun -e MOBILERUN_DEVICE=<serial> -- "$PWD/.venv/bin/python" -m mobilerun_mcpClaude Desktop, Cursor, others: add to the client's MCP config and restart it.
{
"mcpServers": {
"mobilerun": {
"command": "/path/to/mobilerun-mcp/.venv/bin/python",
"args": ["-m", "mobilerun_mcp"],
"env": { "MOBILERUN_DEVICE": "<serial>" }
}
}
}Client | Config file |
Claude Desktop (macOS) |
|
Claude Desktop (Windows) |
|
Cursor |
|
Client docs: Claude Code, Claude Desktop, Cursor.
MOBILERUN_DEVICE is optional when exactly one device is attached to adb. Every device tool also
takes a device argument, so one server can drive several devices:
| Target |
| Android over adb (all tools) |
| Android through the Portal HTTP API only ( |
| iOS via ios-portal (default |
| Mobilerun Cloud device ( |
adb-only tools (dumpsys-based ones, shortcuts, files by path) return [unsupported] on the others.
HTTP instead of stdio (AURA's bridge address): .venv/bin/python -m mobilerun_mcp --http serves
http://127.0.0.1:4816/mcp.
Usage
Ask the agent in natural language ("open Settings and read the Android version"), or call tools directly. See Calling the tools and the Tool reference.
Troubleshooting
Symptom | Fix |
|
|
| Accept the USB debugging prompt on the device; if it does not appear, |
| Replug USB; for a container or remote device run |
| Install platform-tools, or set |
| Enable it under Settings > Accessibility, or rerun |
| Play Protect is scanning the install (redroid, emulators with Google Play): |
Client lists no | Restart the client and check the config path. Run |
| An action changed the screen; call |
Slow first launch | Cold starts take 20 to 30 s on slow devices; |
| DuckDuckGo throttled the request; retry or set |
Sparse text on image-heavy screens | Install |
Issues: github.com/Hi-im-Connect/mobilerun-mcp/issues (include the error and adb devices output).
How it works
The agent works in a perceive, act, verify loop:
perceive_screenreturns a numbered list of everything tappable or readable (som_ids) and an annotated screenshot with the same numbers drawn on it.An action tool (
tap,type_text,launch_app, ...) waits for the screen to settle, then returns apost_action_observation: foreground app, element count, keyboard state, the top labels on screen and whether the screen changed. That block is the verification step.som_ids describe one captured screen. After any action they are stale and the server refuses them (stale_som_id), so the agent can never tap something that has moved.
Details that matter in practice:
Elements without text. Icon-only buttons are numbered too, as long as the app exposes them to Android's accessibility service, which is the case for standard apps.
Cold starts. Launching an app waits for that app to reach the foreground. On a slow device a cold start can take 20 seconds; an app that is already on top returns immediately.
Gestures go through the Portal's accessibility gestures (fast, and accepted by system UI such as the notification shade), with
adb inputas the fallback.Errors look like
[code] message (hint: ...):device_unreachable,policy_blocked,stale_som_id,unknown_som_id,element_not_found,app_not_found,timeout,unsupported,invalid_argument,not_permitted,plan_incomplete.
Calling the tools
Every capability is an MCP tool: a name and a JSON arguments object. The client makes the call
when you describe what you want, or you can invoke a tool by name. On the wire:
{"method": "tools/call", "params": {"name": "tap", "arguments": {"som_id": 2}}}For every tool:
Optional arguments can be left out;
nullalso means "not given".deviceis an optional argument on every tool that touches a device (an adb serial). Leave it out to useMOBILERUN_DEVICE, or the only attached device.State-changing tools (
tap,swipe,type_text,launch_app, ...) wait for the screen to settle and return{"ok": true, "action": ..., "post_action_observation": {...}}.Read tools return a JSON object;
perceive_screenand the screenshot tools also return an image.Errors come back as
[code] message (hint: ...), for example[stale_som_id] ....
The post_action_observation block tells the agent what the screen looks like after the action:
Field | Meaning |
| What is in front now |
| How many numbered elements are on screen |
| Whether the on-screen keyboard is up |
| The first few labels on screen, in reading order |
| Whether the screen differs from before the action |
| A spinner or progress bar is visible |
| The screen stopped changing before the wait ended; how long that took |
|
|
| This screen was already seen N actions ago (going in circles?) |
| A banking / payment / authenticator app is in front |
| What to do next |
A typical session
Search Contacts for "ali". Calls are written tool arguments; outputs are real.
1. Look at the screen.
perceive_screen {}The reply is a JSON object with foreground_app, package, activity, keyboard_visible,
screen_size, perception_tier, e (AURA's [x, y, name, flags] per som_id),
mark_count, ocr_used and elements. Here e is
[[56, 104, "Open navigation drawer"], [664, 104, "Search contacts"], [224, 104, "Contacts"], [360, 230, "A / Ali Omar", "l"], [632, 1096, "Create new contact"]]
and elements contains:
1 [button] "Open navigation drawer" @(56,104)
2 [button] "Search contacts" @(664,104)
3 [text] "Contacts" @(224,104)
4 [button] "A / Ali Omar" @(360,230)
5 [button] "Create new contact" @(632,1096)The leading number is the som_id; @(x,y) is the tap point. An annotated screenshot with the same
numbers is returned alongside the JSON.
2. Tap the search icon by its number.
tap {"som_id": 2}The reply has "ok": true and keyboard_visible: true in post_action_observation. Any action
invalidates the numbers: reusing som_id 2 now fails with stale_som_id until perceive_screen is
called again.
3. Type.
type_text {"text": "ali"}{
"ok": true,
"action": "type_text",
"chars": 3,
"post_action_observation": {
"foreground_app": "Contacts",
"package": "com.android.contacts",
"activity": "PeopleActivity",
"element_count": 5,
"keyboard_visible": true,
"top_labels": [
"stop searching",
"ali",
"Clear search",
"Ali Omar"
],
"screen_changed": true,
"loading_indicator_present": false,
"settled": true,
"settle_ms": 922,
"sensitive_foreground": false,
"hint": "Settled after the action. Judge the result from this observation ..."
}
}4. Verify.
verify_action {"expected": "Ali Omar"}{
"expected": "Ali Omar",
"state": {"foreground_app": "Contacts", "element_count": 4, "keyboard_visible": true,
"top_labels": ["stop searching", "ali", "Clear search", "Ali Omar"], "...": "..."},
"verified": true,
"evidence": "text=\"Ali Omar\"",
"foreground": "com.android.contacts",
"visible_text": ""
}Tool reference
149 tools, plus adb / aura-adb when MOBILERUN_MCP_ENABLE_ADB=1. Every tool that acts on a device takes an optional device (adb serial, ios, cloud:<id>, or a Portal URL). [name=default] is optional. Generated by scripts/gen_reference.py.
Perception
See the screen. read_screen (text grid) or perceive_screen (annotated image) first; act by som_id.
Tool | What it does | Arguments |
| LOOK at the screen: an annotated screenshot plus every element and its tap point. | [description] [detail] [include_image=true] [ocr=auto] [max_marks=150] [lang=eng] |
| Read the screen now (waits for it to stop moving first): the screen drawn as a character grid, each element a box with its som_id and label, then a table of what can be acted on: som (tap by this), in (som_id of the smal | none |
| Compact accessibility tree (class, id, label, flags C/L/E/S/K/P, bounds). | [max_depth=8] |
| Plain screenshot as an image. | none |
| Plain screenshot. | [hide_overlay=false] |
| Take a screenshot, save it as a PNG file and return the path. | none |
perceive_screen {}
perceive_screen {"description": "search bar", "detail": "full"}
read_screen {}
get_ui_tree {}
get_screenshot {}
screenshot {}
screenshot_path {}Gestures, typing and keys
Every action settles the screen and returns post_action_observation. Target with x/y, a som_id, or (mobilerun style) an index from get_state.
Tool | What it does | Arguments |
| Tap at (x, y) or at the center of a numbered mark (som_id from perceive_screen / read_screen). | [x] [y] [som_id] [stealth=false] |
| Double-tap at (x, y) or a mark. | [x] [y] [som_id] |
| Press and hold at (x, y), a mark (som_id) or a get_state element (index). | [x] [y] [som_id] [index] [duration_ms] [ms] |
| Long press at (x, y) (mobilerun agent action). | x y |
| Swipe from (x1, y1) to (x2, y2) over duration_ms / ms (default 300). | [x1] [y1] [x2] [y2] [duration_ms] [ms] [coordinate] [coordinate2] [duration] |
| Scroll the content down (reveal what is below): a centered swipe over half the screen (amount), or inside a scrollable mark (som_id). | [amount=0.5] [som_id] |
| Scroll the content up (reveal what is above). | [amount=0.5] [som_id] |
| Scroll the content left (reveal what is to the left). | [amount=0.5] [som_id] |
| Scroll the content right (reveal what is to the right). | [amount=0.5] [som_id] |
| Scroll the content in direction (up / down / left / right) by distance (fraction of the screen). | direction [distance=0.5] [ms=300] [verify=false] |
| Two modes. | [x1] [y1] [x2] [y2] [duration_ms=300] [text] [direction=down] [max_scrolls=8] |
| Type into the focused field (tap it first, or pass som_id). | text [clear=false] [submit=false] [som_id] |
| Type text (mobilerun). | text [index] [clear=false] [wpm] [stealth=false] |
| Press the Home button. | none |
| Press Back (also closes the keyboard without leaving the screen). | none |
| Press Enter (submits search bars and forms). | none |
| Open the recent-apps overview. | none |
| Press a key by mobilerun-core name (back, home, menu, enter, delete, escape, tab, space, search, page_up, page_down, volume_up, volume_down, wakeup, media_play_pause, ...) or by Android keycode number. | name_or_code |
tap {"som_id": 4}
tap {"x": 540, "y": 1200}
double_tap {}
long_press {"som_id": 4}
long_press {"index": 7, "ms": 800}
long_press_at {"x": 1, "y": 1}
swipe {"x1": 360, "y1": 1000, "x2": 360, "y2": 300}
swipe {"coordinate": [360, 1000], "coordinate2": [360, 300], "duration": 0.5}
scroll_down {}
scroll_up {}
scroll_left {}
scroll_right {}
scroll {"direction": "down"}
scroll_to {"text": "Battery"}
scroll_to {"x1": 360, "y1": 900, "x2": 360, "y2": 400}
type_text {"text": "hello", "som_id": 3, "submit": true}
type {"text": "hello", "index": 5, "clear": true}
press_home {}
press_back {}
press_enter {}
open_recent_apps {}
key {"name_or_code": "back"}Apps and deep links
Tool | What it does | Arguments |
| Open an app by name (fuzzy) or exact package_name. | [app_name] [package_name] [force=false] [package] |
| Start an app by id (Android package / iOS bundle id), optionally a specific activity. | [app_id] [activity] [package] |
| Search installed apps by name or package; returns ranked candidates with scores. | [app_name] [query] [limit=5] |
| List installed apps (user apps only unless include_system_apps=true). | [include_system_apps=false] [include_protected_apps=false] [system=false] |
| Deep links into an app, best first. | [package_name] [app_name] [package] |
| Which app would open this URI (or intent action such as android.settings.WIFI_SETTINGS)? | uri |
| Jump straight to a screen via a URI, an app-shortcut://pkg/id from list_app_deeplinks, or an intent action. | uri [package_name] [app_name] [package] |
launch_app {"app_name": "Clock"}
launch_app {"package_name": "com.android.settings", "force": true}
start_app {}
lookup_app {}
list_apps {}
list_app_deeplinks {}
resolve_deeplink {"uri": "https://example.com"}
open_deeplink {"uri": "android.settings.WIFI_SETTINGS"}
open_deeplink {"uri": "app-shortcut://com.android.settings/manifest-shortcut-wifi"}System intents and contacts
Tool | What it does | Arguments |
| One-call Android actions (action = the verb; verb= is accepted too). | [action] [verb] [hour] [minute] [seconds] [label] [phone_number] [body] [title] [start] [end] [location] [notes] [text] [subject] [destination] [mode=drive] [skip_ui=true] |
| Find contacts by (partial) name and return their phone numbers. | name [limit=5] |
system_intent {"action": "set_alarm", "hour": 7, "minute": 30, "label": "wake"}
system_intent {"action": "navigate", "destination": "Cairo Tower", "mode": "walk"}
resolve_contact {"name": "Ali"}Notifications
Tool | What it does | Arguments |
| Current status-bar notifications, newest first, without touching the screen: key, app, title, text, action labels. | [package_name] [include_ongoing=false] [limit=20] [package] |
| Dismiss one notification (by key, or package/title) or every clearable one. | [key] [package] [title] [clear_all=false] |
| Tap one of a notification's own buttons (reply, archive, stop...); reply_text fills an inline reply field and sends it. | action [key] [package] [title] [reply_text] |
read_notifications {}
dismiss_notification {}
notification_action {"action": "list"}Media and volume
Tool | What it does | Arguments |
| Active media sessions (app, playback state, title/artist) and the music volume. | [include_system=false] |
| Control playback in any app without touching the screen: play, pause, play_pause, next, previous, stop, rewind, fast_forward. | [command] [package_name] [action] |
| Raise the music volume by | [steps=1] |
| Lower the music volume by | [steps=1] |
| Toggle mute on the media stream (muted=true/false forces a state). | [muted] |
get_media_sessions {}
media_control {}
volume_up {}
volume_down {}
mute {}Files
Tool | What it does | Arguments |
| Search the device's media index by name, newest first: images, videos, audio and documents (downloads included). | [query] [kind=any] [limit=10] [path] [max_depth=6] |
| Open a file in its default viewer. | [uri] [path] |
find_files {}
open_file {}Waiting and checking
Tool | What it does | Arguments |
| LONG waits only (downloads, uploads, processing, status changes); gestures already settle. | [condition] [timeout_ms] [poll_interval_ms] [text] [package] [activity] [gone=false] [timeout] [interval] |
| Collect device events for up to timeout_seconds (default 10, max 30), returning early once max_events (default 50) arrive: foreground app, keyboard, screen content, notifications posted/removed. | [timeout_seconds] [max_events=50] [duration] [interval=0.5] [kinds] |
| Pre-check a planned action against the safety policy (and, for our action set, that its target exists) without doing it. | [gesture_type] [target] [action] [x] [y] [som_id] [text] [package] [app_name] [uri] |
| Check an outcome against the live screen. | expected [kind=text] [timeout=3.0] [use_ocr=false] |
wait_for {}
watch_device_events {}
validate_action {}
verify_action {"expected": "Settings is open"}Plan, findings and research
Tool | What it does | Arguments |
| Search the web for how to do something in an app ('how to in android'). | query [max_results] [topic=general] [limit=5] |
| Start a plan checklist. | steps [goal] [deliverable] [target_count=0] [search_query] |
| Update a plan step: pending / in_progress / done / skipped / failed. | index status [note] |
| Record one item you found. | item quote |
| Mark the end of the task (the server keeps listening; the next call starts fresh). | [reason=agent-end] [outcome=success] [goal_type] [summary] |
| How to use this server well. | [topic] |
web_search {"query": "wifi"}
set_plan {"steps": []}
mark_step {"index": 1, "status": "value"}
record_finding {"item": "Result 1", "quote": "exact text"}
end_session {}
get_usage_guide {}Browser
Pages come back with numbered elements (el_id) and a generation; pass both to browser_act. Sessions: scratch (default) or mine (the user's signed-in browser).
Tool | What it does | Arguments |
| Open a web page; returns its text plus numbered elements (el_id) and a generation. | [url] [background=false] [session=scratch] [max_text_chars=4000] [max_elements=60] [target_id] [app] [wait=true] [timeout=15.0] |
| Several pages at once. | [action=list] [url] [index] [session=scratch] |
| Close a browser session and free it (the page is blanked); close_app also stops the app. | [session=scratch] [close_app=false] |
| A picture of the open page, for what text cannot tell (charts, maps, images, popups). | [session=scratch] [full_page=false] [max_text_chars=4000] [max_elements=60] |
| Re-read the open page without navigating: text, numbered elements (el_id) and the generation. | [session=scratch] [max_text_chars=4000] [max_elements=60] [selector] [max_chars] [structure=true] |
| Find something on the page by its text; returns matches with el_id plus the page. | [text] [session=scratch] [max_text_chars=4000] [max_elements=60] [query] [limit=10] |
| Wait for text to appear on the page (or, without text, for it to settle), then return the page. | [text] [timeout_ms] [session=scratch] [max_text_chars=4000] [max_elements=60] [selector] [url_contains] [timeout] |
| Pull repeated items off the page (search results, product cards, listings) as rows of text + link in one call, with the total found. | [session=scratch] [max_text_chars=4000] [max_elements=60] [kind=items] [selector] [limit] |
| Act on the page and get the page back. | action [el_id] [value] [generation] [session=scratch] [max_text_chars=4000] [max_elements=60] [ref] [selector] [text] [key] [clear=false] [submit=false] [amount=600] |
| Let the person do a step you cannot (sign in, one-time code, CAPTCHA, payment confirmation): brings the page to the front and posts prompt as a device notification. | [prompt] [check=false] [session=scratch] [max_text_chars=4000] [max_elements=60] [message] |
| Attach a file to an upload control (el_id). | [el_id] [file] [generation] [session=scratch] [max_text_chars=4000] [max_elements=60] [path] [ref] [selector] |
browser_open {"url": "https://example.com"}
browser_tabs {}
browser_close {}
browser_screenshot {}
browser_read {}
browser_find {}
browser_wait {}
browser_extract {}
browser_act {"action": "click", "el_id": 3, "generation": 1}
browser_act {"action": "type", "el_id": 5, "value": "shoes"}
browser_handoff {}
browser_upload {}mobilerun-core Device API
Same names and parameters as mobilerun_core.Device. Works on Android (adb or Portal HTTP), iOS and Mobilerun Cloud devices.
Tool | What it does | Arguments |
| Raw UI snapshot (a11y_tree, phone_state, device_context, ...), as Device.ui(). | [filter=true] |
| The UI snapshot serialized as JSON text. | [filter=true] [indent] |
| UI snapshot that retries past a dead or empty accessibility tree. | [filter=true] |
| Backend, platform and the actions this device supports. | none |
| Whether this device supports a Device action (e.g. | action |
| [width, height] in pixels. | none |
| Package / bundle id of the foreground app. | none |
| The device clock. | none |
| Nodes matching every given filter (exact text/desc/resource_id/class_name, or *_contains substrings), including off-screen ones. | [text] [desc] [resource_id] [class_name] [text_contains] [desc_contains] [any_contains] [tree] |
| Like find_nodes, limited to nodes inside the visible screen. | [text] [desc] [resource_id] [class_name] [text_contains] [desc_contains] [any_contains] [tree] |
| Tap the first on-screen node whose text/description contains text. | text |
| Tap the center of a node returned by find_nodes / find_nodes_on_screen. | node [stealth=true] |
| Tap a text (or node) and wait until the UI has been idle for idle seconds. | target [idle=2.0] |
| Scroll until a matching node is on screen; result is the node (or null). | [text] [text_contains] [any_contains] [resource_id] [direction=down] [max_swipes=10] [distance=0.35] [settle=0.5] |
| Clear the focused text field. | none |
| Fail unless app_id is in the foreground. | app_id |
| Fail unless text becomes visible on screen within timeout seconds. | text [timeout=5.0] |
| Wait until app_id is in the foreground. | app_id [timeout=10.0] [poll=0.5] |
| Wait until the UI stops changing. | [timeout=5.0] [poll=0.5] |
| Wait until the UI differs from now. | [timeout=10.0] [poll=0.5] |
| Wait until a node containing text exists (off-screen nodes count). | text [timeout=10.0] [poll=0.5] |
| Poll find_nodes until something matches (or timeout, returning []). | [timeout=10.0] [poll=0.5] [text] [desc] [resource_id] [class_name] [text_contains] [desc_contains] [any_contains] [on_screen=false] |
| Start an app and wait until it is in front and idle. | app_id [timeout=15.0] [idle=3.0] |
| Force-stop an app; clear_data also wipes its data. | app_id [clear_data=false] |
| Install an APK (host path) on the device. | path [replace=false] [grant_permissions=true] |
| Uninstall an app. | app_id |
| Grant a runtime permission (android.permission.*) to an app. | package permission |
| Dispatch a deep link / intent (default action VIEW), optionally pinned to a package. | deep_link [package_name] [action] |
| Run JavaScript in the foreground browser page and return its JSON result. | js |
| The clipboard's text (Android needs the Mobilerun Keyboard as the active IME). | none |
| Put text on the clipboard. | value |
ui {}
ui_json {}
ui_with_recovery {}
capabilities {}
supports {"action": "list"}
screen_size {}
current_app_id {}
time {}
find_nodes {"text_contains": "Wi"}
find_nodes_on_screen {}
tap_text {"text": "Settings"}
tap_node {"node": {}}
tap_and_wait {"target": "Settings"}
scroll_until {}
clear_input {}
assert_on {"app_id": "com.android.settings"}
assert_text_visible {"text": "Settings"}
wait_for_app {"app_id": "com.android.settings"}
wait_for_idle {}
wait_for_screen_change {}
wait_for_text {"text": "Settings"}
wait_for_nodes {}
open_and_settle {"app_id": "com.android.settings"}
stop_app {"app_id": "com.android.settings"}
install_app {"path": "/sdcard/Download/a.apk"}
uninstall_app {"app_id": "com.android.settings"}
grant_permission {"package": "com.android.settings", "permission": "android.permission.CAMERA"}
open_deep_link {"deep_link": "https://example.com"}
execute_script {"js": "document.title"}
get_clipboard {}
set_clipboard {"value": "copied text"}mobilerun agent actions
The mobilerun agent's action set. Indices come from get_state.
Tool | What it does | Arguments |
| The screen as the mobilerun agent sees it: phone state plus numbered UI elements ('index. | none |
| Click the get_state element with this index (its center, avoiding views drawn on top). | index |
| Click at screen position (x, y). | x y |
| Click the center of the area (x1, y1, x2, y2). | x1 y1 x2 y2 |
| Press a system button: back, home or enter. | button |
| Wait for duration seconds (max 60). | [duration=1.0] |
| Open an app by name or package (mobilerun agent action). | text |
| Finish the task (mobilerun agent action): success flag plus the result or the reason for failure. | success message |
| Type a secret from the mobilerun credentials file (MOBILERUN_CREDENTIALS, else config/credentials.yaml or ~/.config/mobilerun/credentials.yaml) into the get_state element index (-1 = the focused field). | secret_id index |
get_state {}
click {"index": 1}
click_at {"x": 1, "y": 1}
click_area {"x1": 1, "y1": 1, "x2": 1, "y2": 1}
system_button {"button": "back"}
wait {}
open_app {"text": "Settings"}
complete {"success": true, "message": "hi"}
type_secret {"secret_id": "MY_PASSWORD", "index": 1}Agent tasks and macros
run_task runs the Mobilerun agent locally (mobilerun CLI) or on a Mobilerun Cloud device.
Tool | What it does | Arguments |
| Hand a natural-language goal to the Mobilerun agent. | task [deviceId] [llmModel] [maxSteps] [vision] [reasoning=false] [stealth] [outputSchema] [apps] [credentials] [files] [wait=true] [steps] |
| A task's summary, status or trajectory (view). | taskId [view=summary] [offset] [limit] |
| Tasks: local agent runs of this server, plus Mobilerun Cloud tasks when MOBILERUN_CLOUD_API_KEY is set (scope: local / cloud / all). | [deviceId] [status] [query] [orderBy] [orderByDirection] [page] [pageSize] [scope=all] |
| Stop a running task. | taskId |
| A screenshot (or ui_state) the task recorded; index picks the step (default latest). | taskId [kind=screenshot] [index] |
| Send a message to a running cloud task (e.g. | taskId message |
| Recorded trajectories (mobilerun macro list); defaults to this server's task folder. | [directory] |
| Replay a recorded macro (macro.json or a trajectory folder) on the device (mobilerun macro replay). | path [delay] [start_from] [max_steps] [dry_run=false] [on_mismatch=stop] |
run_task {"task": "Open Clock and tell me the first alarm", "maxSteps": 20}
get_task {"taskId": "local-1"}
list_tasks {}
stop_task {"taskId": "local-1"}
get_task_media {"taskId": "local-1"}
send_task_message {"taskId": "local-1", "message": "hi"}
macro_list {}
macro_replay {"path": "/sdcard/Download/a.apk"}Mobilerun Cloud platform
Same tools as droidrun's official mobilerun-mcp. Needs MOBILERUN_CLOUD_API_KEY; device tools also work on local devices where an equivalent exists.
Tool | What it does | Arguments |
| Fetch one device by id (a Mobilerun Cloud id, or a local device: adb serial, ios...). | deviceId |
| Capture a device screenshot and return the raw result ({deviceId, screenshot}); for cloud devices the SDK result (base64 payload or signed URL), for local ones base64 PNG. | deviceId |
| Read the on-screen UI as structured text: current app/activity, keyboard state, and a compact list of labeled/actionable elements (text, resourceId, className, tap center | deviceId [contains] [resourceId] [includeAll] [offset] |
| List apps installed on a device (package_name, label, version_name, version_code, is_system_app). | deviceId [includeSystemApps] [includeProtectedApps] |
| Provision a new Mobilerun Cloud device (billing is enforced by the API). | [deviceType] [name] [country] |
| Terminate a Mobilerun Cloud device. | deviceId |
| Device lifecycle operations. | operation [deviceId] [name] |
| Low-level device input. | operation deviceId [displayId] [x] [y] [startX] [startY] [endX] [endY] [duration] [stealth] [text] [clear] [errorRate] [wpm] [key] [action] |
| Mutate apps on a device. | operation deviceId [packageName] [bundleId] [activity] [includeSystemPackages] [includeProtectedPackages] |
| Device filesystem access. | operation deviceId path [contentBase64] [fileName] [contentType] |
| Read/write device settings. | operation deviceId [locale] [restart] [timezone] [latitude] [longitude] [visible] [proxyName] [smartIp] [socks5Host] [socks5Port] [socks5User] [socks5Password] |
| eSIM subscription management (Mobilerun Cloud devices). | operation deviceId [enable] [smDpAddr] [confirmationCode] [matchingId] [subId] |
| List saved credentials (metadata only; values never leave credentials storage). | [packageName] |
| List app packages that have any credential configured. | none |
| Write path for the credentials vault. | operation [packageName] [credentialName] [fieldType] [value] [fields] |
| Manage outbound webhooks and inspect deliveries. | operation [endpointId] [deliveryId] [url] [eventTypes] [description] [state] [status] [page] [pageSize] [since] |
| Manage device-bound proxy configs (socks5 or wireguard). | operation [proxyId] [protocol] [name] [host] [port] [user] [password] [config] [lookupUser] [lookupPassword] |
| droidrun-connect residential SOCKS5 proxies and their users (distinct from the device-bound | operation [proxyId] [userId] [country] [type] [page] [pageSize] [status] [protocol] [provider] [dstHost] [dstPort] [sessionId] [startedAfter] [startedBefore] [endedAfter] [endedBefore] [order] [orderBy] |
| Manage uploaded apps (APKs) in Mobilerun Cloud. | operation [id] [query] [platform] [status] [sortBy] [order] [page] [pageSize] [bundleId] [displayName] [versionCode] [versionName] [sizeBytes] [files] [uploadPlatform] [country] [description] [developerName] [iconURL] [targetSdk] |
| Read-only platform reference data: models (LLM model ids), timezones (IANA strings for create_trigger), app_event_types (every selectable app/system event type). | catalog |
| List one kind of workflow resource. | resource [service] [search] [activation] [eventType] [enabled] [triggerId] [flowId] [status] [page] [pageSize] [limit] |
| Fetch one workflow resource by id (full config/params). | resource id |
| Create an action from a catalog entry. | catalogEntryId name [description] [isAsync] [params] |
| Create a trigger. | name activation [eventType] [scheduleRule] [customPayloadSchema] [timezone] [description] [conditions] |
| Create a flow binding a trigger to ordered actions ([{actionId, position (1-based)}]); target devices go in the top-level deviceIds. | name triggerId actions deviceIds [description] [cooldownSeconds] [cooldownScope] |
| Flow lifecycle beyond create_flow. | operation [flowId] [name] [deviceIds] [actionId] [position] [continueOnError] [nameOverride] [overrides] [parentFlowActionId] [children] [flowActionId] [actions] [triggerId] [from] [to] |
| Ingest, simulate and catalog custom app/system events for trigger evaluation. | operation [eventType] [payload] [source] [page] [pageSize] [events] |
get_device {"deviceId": "192.168.1.20:5555"}
get_device_screenshot {"deviceId": "192.168.1.20:5555"}
get_device_ui_state {"deviceId": "192.168.1.20:5555"}
list_apps_on_device {"deviceId": "192.168.1.20:5555"}
create_device {}
terminate_device {"deviceId": "192.168.1.20:5555"}
manage_device {"operation": "reboot"}
device_action {"deviceId": "192.168.1.20:5555", "operation": "tap", "x": 540, "y": 1200}
manage_device_apps {"operation": "install", "deviceId": "192.168.1.20:5555"}
manage_device_files {"operation": "list", "deviceId": "192.168.1.20:5555", "path": "/sdcard/Download/a.apk"}
configure_device {"operation": "get_language", "deviceId": "192.168.1.20:5555"}
manage_esim {"operation": "list", "deviceId": "192.168.1.20:5555"}
list_credentials {}
list_credential_packages {}
manage_credentials {"operation": "init_package"}
webhooks {"operation": "create"}
proxies {"operation": "list"}
connect {"operation": "list_countries"}
apps {"operation": "list"}
platform_catalog {"catalog": "models"}
list_workflow_resources {"resource": "action_catalog"}
get_workflow_resource {"resource": "action_catalog", "id": "abc123"}
create_action {"catalogEntryId": "value", "name": "Ali"}
create_trigger {"name": "Ali", "activation": "event"}
create_flow {"name": "Ali", "triggerId": "value", "actions": [], "deviceIds": ["192.168.1.20:5555"]}
manage_flow {"operation": "clone"}
workflow_events {"operation": "ingest"}Devices and connection
Tool | What it does | Arguments |
| Battery, screen power, foreground app, size, storage, network addresses, volume. | none |
| Devices you can control. | [scope=local] [state] [type] [name] [country] [page] [pageSize] [filters] |
| Is the device reachable? | none |
| (Re)connect adb and the Portal for a device; use after the network path came back. | none |
| Disconnect a TCP/IP adb device (adb disconnect host:port) and drop its session. | none |
| Install and enable the Mobilerun Portal on the device (mobilerun setup); path installs a specific Portal APK. | [path] |
| Health check of adb, the Portal and the device (mobilerun doctor). | none |
| Compatibility no-op: screenshots use the Portal / adb screencap, no prompt is needed. | none |
| Returns text verbatim: a check that the MCP transport is alive (no device access). | [text] [message] |
get_device_status {}
list_devices {}
ping_device {}
connect_device {}
disconnect_device {}
setup_portal {}
doctor {}
request_screen_capture_permission {}
echo {}Compatibility
Tool | What it does | Arguments |
| Press home, back or enter (kept for old clients; prefer press_home/back/enter). | button |
press {"button": "back"}Raw adb
Only when MOBILERUN_MCP_ENABLE_ADB=1; refused while a safety policy is on.
Tool | What it does | Arguments |
| Run an adb command against the device. | command |
| Run an adb command against the device. | command |
aura-adb {"command": "shell dumpsys window | grep mCurrentFocus"}
adb {"command": "shell dumpsys battery"}Configuration
Variable | Default | Meaning |
| the only attached device | Default device (see the |
|
| Safety policy: |
|
| Set to |
|
| Set to |
| unset |
|
| unset |
|
| unset | Mobilerun Cloud devices, tasks and the cloud platform tools |
|
| Secrets file for |
| downloaded | Path to an OmniParser icon-detect |
|
| iOS portal for |
| unset | Bearer token for Portal-HTTP-only Android targets |
|
| Address for |
| on | Binary overrides |
Safety policy
The policy is off by default, so an agent can sign in to accounts and use any app.
standardblocks banking, payment and wallet apps, authenticator apps and password managers, Luhn-valid card numbers, and fields asking for a card security code.strictadditionally refuses password and PIN fields and national-id numbers.
Blocked actions fail with [policy_blocked]. run_task and the raw adb tool are disabled while
a policy is on, because they cannot be policed. Read mobilerun://policy for the active rules.
Limitations
Tested live on redroid 12 (Android 12, x86_64). Physical phones, other Android versions, iOS and cloud devices go through the same code paths but were not driven live here; the cloud tools are verified against mocked API responses.
Icon detection (
detail="full") is a host-side guess: red boxes, not facts.media_controlwithpackage_namegoes to the active media session (adb cannot address one app's session); the reply says when that is a different app.Scratch-browser tabs (WebView Browser Tester has one page) are remembered URLs that reload on
switch; the signed-in browser (session="mine", e.g. Chrome) has real tabs.Notification actions and dismissal drive the notification shade, because
adbcannot fire a PendingIntent. Ongoing notifications cannot be dismissed.Local
run_taskruns the mobilerun CLI agent;outputSchema,apps,credentials,filesandstealthapply to cloud tasks only. The agent's self-report can be wrong: verify on screen.Launcher shortcuts come from
dumpsys shortcut; Android elides the path of https shortcut URIs there, so those open the app without the exact page.Volume commands succeed on redroid but have no audible effect.
Development
uv pip install --python .venv/bin/python -e ".[dev]"
.venv/bin/python -m pytest # unit tests, no device needed
MOBILERUN_DEVICE=<serial> .venv/bin/python -m pytest -m live # drives a real device
.venv/bin/ruff check src tests && .venv/bin/ruff format --check src testsUnit tests run against real output captured from a device (
tests/fixtures; regenerate withscripts/capture_fixtures.py). The JavaScript snippets are syntax-checked withnodewhen it is installed.Live tests drive the device through an in-process MCP client and assert observable effects (foreground app, screen contents, notification state, page state), not just that a call returned. They post notifications, change the media volume and open apps, so use a scratch device.
src/mobilerun_mcp/
adb.py portal.py transports: adb wrapper, Portal HTTP client
session.py observe.py per-device state, settle-and-observe
models.py marks.py screen model, numbered marks, signatures
parsers/ pure parsers for accessibility state, dumpsys, intent filters, ...
policy.py ledger.py safety rules, plan ledger
browser/ CDP client, target discovery, navigation, page scripts
tools/ one small module per tool groupRelationship to other projects
Independent; not affiliated with AURA, Mobilerun/droidrun or redroid.
AURA: same tool names, parameters and output formats, re-implemented on the host. No AURA code or assets are included.
mobilerun-core (Apache-2.0) is a dependency; its
Deviceruns on this server's fast Android transport.mobilerun (MIT): the agent's element indexing is adapted in
src/mobilerun_mcp/agentui.py.droidrun/mobilerun-mcp (Apache-2.0): the cloud tools in
src/mobilerun_mcp/tools/cloud.pyare a port of its tool layer.Mobilerun Portal provides screen access on Android.
OmniParser v2 icon detector (AGPL-3.0), downloaded at runtime, not redistributed.
License
Available Tools
68 toolsbrowser_actBrowser ActA
Act on the page. Actions: click, type(text, clear, submit), press(key), focus, hover, select(value), check/uncheck, scroll(amount px, negative = up), scroll_into_view. Target an element with ref (from browser_find/browser_read) or a CSS selector.
| Name | Required | Description | Default |
|---|---|---|---|
| key | No | ||
| ref | No | ||
| text | No | ||
| clear | No | ||
| value | No | ||
| action | Yes | ||
| amount | No | ||
| device | No | ||
| submit | No | ||
| session | No | default | |
| selector | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral disclosure burden and does it well: type supports clear and submit, scroll is in pixels with negative meaning up, and targeting can use ref or CSS selector. It does not cover failure behavior or navigation side effects, but the core behavioral surface is disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three compact sentences with no filler. The action list is front-loaded, and every clause adds useful information such as negative-scroll direction, targeting options, and ref provenance.
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 provides a compact action mini-language plus targeting guidance, which is enough for an agent to invoke most actions correctly with the schema defaults. It omits session/device semantics and action-specific parameter requirements, but the output schema covers return-value expectations.
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 by explaining parameters. It successfully embeds most parameters in action syntax: type(text, clear, submit), press(key), select(value), scroll(amount px), and ref/selector. However, session and device are never explained, leaving the parameter model incomplete for a tool with 11 parameters.
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 concrete action catalog on the page resource: click, type, press, focus, hover, select, check/uncheck, scroll, and scroll_into_view. It also specifies how to target elements via ref from browser_find/browser_read or CSS selector, which clearly separates it from the read-only browser 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?
Usage is implied: perform actions on the current browser page, and obtain refs from browser_find/browser_read. However, the description does not explicitly state when not to use this tool, nor does it contrast it with mobile interaction siblings like tap, type_text, or press, leaving the domain boundary to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_closeBrowser CloseB
Detach a browser session (blanking the page); close_app also stops the browser app.
| Name | Required | Description | Default |
|---|---|---|---|
| device | No | ||
| session | No | default | |
| close_app | 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 must carry the behavioral burden. It does disclose the key side effect (blanking the page) and the additional effect of close_app (stopping the app), but it leaves unclear whether session state is persisted, what happens to active tabs, or whether there are irreversible consequences.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single compact sentence that front-loads the main action and tucks the optional behavior after a semicolon. It is efficient, though it could have used the saved space to define the ambiguous 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?
This is a session-mutating tool with no annotations gaps are meaningful: device/session semantics are undocumented, the response/output schema is not hinted at, and the consequences for the browser session are only partially disclosed.
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 needed to explain device, session, and close_app. It only adds meaning to close_app ('also stops the browser app'); device and session remain undefined, leaving an agent to guess their values and roles.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb-resource pair ('Detach a browser session') and clarifies the destructive scope with 'blanking the page.' It also distinguishes the close_app flag behavior, which helps separate this tool from the many browser_* 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 description gives a clear context for when to call this tool (to detach or close a browser session) and explains the close_app option. However, it does not explicitly compare this tool to sibling alternatives like browser_handoff or browser_open, nor state when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_extractBrowser ExtractC
Pull structured data: kind = table (headers + row dicts) | links | text.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | table | |
| limit | No | ||
| device | No | ||
| session | No | default | |
| selector | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It reveals the return shape for the table kind, but does not state whether the operation is read-only, whether it requires an active page, whether it scrolls or navigates, or what happens on failure. This is a notable gap for a 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 dense sentence with no filler. The pipe-separated list is efficient and front-loads the core decision (which kind to extract). Every word adds signal.
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 5 parameters, no schema descriptions, and no annotations, a one-line description is not complete. It omits how to target an element (selector), how to bound results (limit), and how to specify device/session. The output schema may cover return values, but the tool's overall behavior and parameter roles are underdocumented.
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 the schema's silence. It explains the 'kind' parameter with its three values and the table row/header structure, but says nothing about 'limit', 'device', 'session', or 'selector'. The majority of the five parameters remain 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 ('Pull') and resource ('structured data'), and enumerates the exact output kinds: table with headers and row dicts, links, and text. This makes the primary intent clear, though it does not explicitly differentiate from sibling tools like browser_read or browser_find.
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. The description implies it is for extracting structured content from the current page, but it does not state selection criteria, prerequisites, or when to prefer browser_read, browser_find, or other sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_findBrowser FindA
Find visible elements by text, label, placeholder, alt or name; returns refs for browser_act.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes | ||
| device | No | ||
| session | No | default |
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 transparency burden. It discloses the important visible-only filter and the fact that the tool returns refs rather than performing an action, implying a read-only operation. It does not cover no-match behavior or exact/substring matching, but those are secondary for a locator.
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 compact sentence with the core behavior front-loaded and the output purpose attached. 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?
For a simple locator with an output schema and defaulted optional parameters, the core contract is complete: query by accessible attributes, only visible elements, return refs usable by browser_act. Minor omissions are explicit matching semantics and any session-only precondition, but they do not block 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 adds useful semantics to query by enumerating which accessible attributes are matched. However, it says nothing about limit, device, or session, leaving an agent to infer their roles mostly from names/defaults.
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?
"Find visible elements" names a specific verb, resource, and scoping constraint, followed by the accepted match attributes (text, label, placeholder, alt, name). The explicit return of refs for browser_act distinguishes this locate/query tool from sibling action and extraction 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 description clearly positions the tool as the discovery step that feeds browser_act by returning refs. It does not spell out exclusions or when to prefer browser_extract/browser_read, so it misses the top tier.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_handoffBrowser HandoffA
Bring the browser to the foreground so a person can finish a login or captcha by hand; call browser_read afterwards to continue.
| Name | Required | Description | Default |
|---|---|---|---|
| device | No | ||
| message | No | ||
| session | No | default |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden. It correctly discloses the core behavior (foregrounding the browser, delegating to a human) and the follow-up step. However, it does not disclose what happens during the handoff — whether the tool blocks until the human finishes, whether there is a timeout, or how the session is affected — which matters for an agent deciding how to sequence actions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences totaling roughly 25 words, with the core action and purpose front-loaded and the follow-up instruction placed second. Every word earns its place; there is no filler or 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 explained in the description. The description covers the core invocation scenario and sequence adequately, but it omits parameter semantics and any statement about waiting/timeout behavior. For a tool of this simplicity, this is a minimum-viable description with a few meaningful gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the description mentions none of the three parameters (device, message, session). Since coverage is below 50%, the description was expected to compensate but does not. The parameter names are conventional and self-hinting, but an agent gets no guidance on what 'message' is for (e.g., a prompt shown to the user) or how 'session' scopes the handoff.
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 ('bring the browser to the foreground') with a concrete purpose (human finishes a login or captcha). It also differentiates itself from siblings by naming its continuation flow ('call browser_read afterwards'), making clear this is the human-handoff tool rather than a programmatic browser action or an input-injection 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 description gives clear context for when to use the tool: when a human must complete a login or captcha by hand. It provides a sequencing guideline (follow with browser_read), but it does not explicitly state exclusions such as 'use browser_act when no human interaction is needed' or contrast with sibling tools like type_text or tap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_openBrowser OpenB
Open a URL in the on-device browser, or attach to an existing page (target_id from
browser_tabs, or app= for an in-app WebView). session names the attachment.
| Name | Required | Description | Default |
|---|---|---|---|
| app | No | ||
| url | No | ||
| wait | No | ||
| device | No | ||
| session | No | default | |
| timeout | No | ||
| target_id | 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 must carry the full behavioral burden. It mentions 'session' naming the attachment, but does not disclose important behaviors such as whether the tool waits for page load (wait parameter), timeout behavior, or side effects like changing the active session. It also doesn't explain what happens when both url and target_id are provided. The description is too sparse for a tool with no annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, dense sentence that front-loads the core action ('Open a URL') and then adds the attachment mode. It is efficient and free of filler, though it packs a lot of information into one sentence, which could be slightly clearer with separation. Overall, it is concise and well-structured.
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 7 parameters and no annotations, the description is incomplete. It does not explain the return value (though an output schema exists), nor does it clarify the roles of wait, timeout, or device. It does not describe how to handle errors or whether the tool blocks until the page loads. For a tool with such complexity, the description falls short of providing sufficient context 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%, meaning the description is the only source of parameter meaning. It explains target_id, app, and session, but ignores url, wait, device, and timeout. The description provides partial clarity for 3 of 7 parameters, leaving the rest undefined. It does not compensate for the complete lack of schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's primary function: 'Open a URL in the on-device browser' and its secondary attachment mode. It specifies the resource (URL/browser) and the verb (open/attach), and distinguishes from siblings like browser_tabs and browser_read by mentioning target_id and app for WebView. 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?
The description explains when to use the tool: to open a new URL or attach to an existing page (via target_id or app). It gives a specific source for target_id (browser_tabs) and hints at the app parameter for WebView. However, it does not explicitly state when not to use this tool or compare it to other browser_* tools, but the usage context is clear enough for an agent to decide when to invoke it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_readBrowser ReadA
Read the page: title, url and visible text; structure=true also lists interactive elements with refs (e1, e2...) for browser_act.
| Name | Required | Description | Default |
|---|---|---|---|
| device | No | ||
| session | No | default | |
| selector | No | ||
| max_chars | No | ||
| structure | 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 bears the full burden and does disclose the main behavior: it reads the page and returns title, URL, and visible text, optionally listing interactive elements with refs. It lacks details on side effects, permissions, or truncation behavior, but for a read operation this is reasonably transparent.
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 sentence with no filler. It front-loads the core action and output, then uses a semicolon to add the optional structure mode and its purpose, making it easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The basic invocation is clear and the presence of an output schema covers return formatting, but the description is thin for a 5-parameter tool with no schema descriptions. It omits guidance on `selector`, `max_chars`, and session/device selection, and it does not direct the agent to related tools, leaving gaps for non-default use.
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 the five undocumented parameters. It only clarifies `structure`; it leaves `device`, `session`, `selector`, and `max_chars` without added meaning, so an agent cannot infer how they affect the read.
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 ('Read the page') and enumerates the exact output: title, URL, and visible text. It also distinguishes its interactive-element listing mode from the acting tool by mentioning refs 'for browser_act', making its role in the browser suite clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies that `structure=true` should be used when the agent needs interactive-element refs to pass to `browser_act`, providing some context for when to enable that option. However, it gives no explicit guidance on when to choose this tool over similar alternatives like `read_screen`, `browser_extract`, or `browser_find`.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_screenshotBrowser ScreenshotC
Screenshot of the page content. The owning app is brought to the foreground first (a hidden WebView cannot render).
| Name | Required | Description | Default |
|---|---|---|---|
| device | No | ||
| session | No | default | |
| full_page | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses a key behavioral trait: the owning app is brought to the foreground before capturing, because a hidden WebView cannot render. This is useful and beyond what annotations would provide (since there are none). However, it omits other behaviors like return format, side effects on app state, or permission requirements, which are important given no annotations exist.
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 extremely concise: two sentences, with the purpose stated first and a behavioral note second. No wasted words, and the structure is front-loaded.
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 tool with three parameters, no output schema, and no annotations, the description is inadequate. It fails to explain what the output looks like (e.g., file path, base64), what each parameter does, or any prerequisites like permissions. The only useful context is the foregrounding behavior, which is not enough for safe 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 coverage is 0% and the description provides no explanation of the three parameters (device, session, full_page). The agent is left to infer their meaning from names and defaults alone. Since the description does not compensate for the lack of schema descriptions, it fails to add value here.
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 the tool takes a screenshot of page content, which is clear and specific to a browser context. It doesn't differentiate from siblings like get_screenshot or screenshot, but it does mention 'page content' and the owning app, so it's not a tautology. A clear verb and resource, but lacks explicit 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 like get_screenshot or screenshot_path. The description only mentions a technical behavior (foregrounding the app) but doesn't advise on selection criteria, such as when to prefer this over other screenshot tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_tabsBrowser TabsC
Every open page across the on-device browser and in-app WebViews, plus attached sessions.
| Name | Required | Description | Default |
|---|---|---|---|
| device | 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 only describes scope, not whether this is a read-only listing, whether it opens any sessions, what permissions are needed, or what happens with attached sessions. It adds minimal context about coverage but no real behavioral transparency.
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 short, front-loaded sentence with no filler, and the scope detail is useful. However, it sacrifices necessary verb and parameter information for brevity, reading more like a category label than a complete tool description.
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, a 0%-covered parameter, and a one-line noun-phrase description, the definition is insufficient for an agent to safely invoke the tool. The presence of an output schema reduces the need to describe return values, but the missing action and device semantics remain significant 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?
The single optional 'device' parameter has 0% schema description coverage, and the description never mentions it. The agent cannot determine what device selects, whether null means the current device or all devices, or how the parameter interacts with 'attached sessions'.
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 identifies the resource (open pages in the on-device browser and WebViews, plus attached sessions) and helps distinguish it from sibling browser tools, but it is a noun phrase rather than an explicit action. It never states that the tool lists or returns tabs, so an agent must infer the behavior from the name 'browser_tabs'.
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 like browser_close, browser_read, get_ui_tree, or perceive_screen. No context is given for when querying attached sessions is appropriate or how this relates to the optional device parameter.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_uploadBrowser UploadA
Attach a file to an . path is a device path under /sdcard, or a host
file (not inside a hidden directory) that is pushed to /sdcard/Download first.
| Name | Required | Description | Default |
|---|---|---|---|
| ref | No | ||
| path | Yes | ||
| device | No | ||
| session | No | default | |
| selector | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral disclosure burden. It does reveal an important side effect: host files are pushed to /sdcard/Download first, and hidden directories are disallowed. However, it does not explain what happens after attachment, whether the file is immediately submitted, or what state changes occur in the browser. Some useful behavior is disclosed, but significant gaps remain.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler. The core action is front-loaded, and the critical path constraint is stated immediately after. 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?
The tool has five parameters, no schema property descriptions, and no annotations, yet the description only explains the `path` parameter. It does not cover selector/ref semantics, session targeting, or device routing. Although an output schema exists, the agent still lacks enough context to correctly construct a call beyond supplying a path.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It provides strong semantics for the required `path` parameter, explaining device paths and the host-file push behavior. However, the other four parameters (`ref`, `device`, `session`, `selector`) are not explained at all, leaving the agent to guess how to target the correct browser session or file input.
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: 'Attach a file to an <input type=file>'. This clearly identifies the tool's function and distinguishes it from sibling browser tools like browser_read, browser_find, and browser_act, none of which handle file attachment.
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 case is implied: use this when a file needs to be attached to a file input in a browser context. However, the description does not explicitly state when to use it versus alternatives, nor does it mention prerequisites such as an active browser session or visible file input. Context is clear but not fully developed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_waitBrowser WaitC
Wait until the page has text, a selector and/or a URL fragment (or just finished loading).
| Name | Required | Description | Default |
|---|---|---|---|
| text | No | ||
| device | No | ||
| session | No | default | |
| timeout | No | ||
| selector | No | ||
| url_contains | 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 for behavioral disclosure. It explains what is waited for, but not how the wait behaves: whether conditions are combined as AND or OR, what happens on timeout, whether it polls, or whether it errors when the condition is not met. The phrase 'and/or' is also ambiguous.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single compact sentence with the core verb and target front-loaded. It avoids fluff, though the ambiguous 'and/or' slightly detracts from clarity.
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 six parameters, zero annotations, and 0% schema description coverage, the description is too sparse. It omits critical operational details such as timeout behavior, how multiple conditions interact, and the role of device/session parameters, leaving agents to guess.
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 text, selector, and url_contains, but it does not explain the semantics of device, session, or timeout, all of which remain 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 clearly states the action ('Wait until') and the target resource ('the page'), and enumerates specific conditions (text, selector, URL fragment, finished loading). It is not a tautology and gives a concrete sense of the tool's purpose, though it does not explicitly differentiate itself from sibling wait_for.
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 browser_wait versus alternatives like wait_for or browser_read. The intended use is only implied through the condition list, and no exclusions or alternatives are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
connect_deviceConnect DeviceB
(Re)connect adb and the Portal for a device; use after the network path came back.
| Name | Required | Description | Default |
|---|---|---|---|
| device | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the full burden of behavioral disclosure. It implies reconnection is idempotent and recovery-oriented, but does not explain side effects, prerequisites, failure behavior, or whether the operation disconnects before reconnecting.
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 that communicates the action and the trigger condition with no filler. Every part 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 low-complexity tool with an output schema, the description is mostly adequate: it says what the tool does and when to use it. However, it leaves the optional device parameter's default behavior and the meaning of 'Portal' unexplained, so an agent may still be uncertain on some edge cases.
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 says 'for a device,' which adds minimal meaning beyond the parameter name. It does not explain what the device value should be, what null/default means, or what happens when the parameter is omitted.
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: (re)connecting adb and the Portal for a device, which distinguishes it from diagnostic siblings like ping_device or get_device_status. The term 'Portal' is somewhat domain-specific and unexplained, but the core verb and resource are clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a clear usage condition: use it after the network path has recovered. It does not mention alternative tools or explicit when-not-to-use cases, but the recovery context is enough to guide selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dismiss_notificationDismiss NotificationC
Dismiss one notification (by key, or package/title) or every clearable one.
| Name | Required | Description | Default |
|---|---|---|---|
| key | No | ||
| title | No | ||
| device | No | ||
| package | No | ||
| clear_all | 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 of behavioral disclosure. It mentions 'clearable' but does not explain side effects, irreversibility, permissions, or how the tool handles the clear_all flag. It does not disclose whether dismissing is destructive or if it affects other system state.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single efficient sentence, front-loaded with the main action. It avoids fluff and directly states the core functionality. However, it is so terse that it under-specifies important details, but that is a completeness issue rather than a structure issue.
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 5 parameters and no annotations, the description is incomplete. It does not explain the selection logic clearly, omits the device parameter, and does not describe return values or error conditions. The existence of an output schema does not compensate for the lack of parameter and usage context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must explain parameters. It mentions key, package, title, and clear_all indirectly ('every clearable one'), but the phrasing 'by key, or package/title' is ambiguous about how selectors combine. The 'device' parameter is entirely unmentioned, and the logic for when clear_all applies is unclear.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (dismiss) and the resource (notification), and distinguishes two modes: single (by key or package/title) or all clearable. It is specific and understandable, though it does not explicitly contrast with sibling tools like notification_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 is provided on when to use this tool versus alternatives such as read_notifications or notification_action. The description implies usage (dismissing notifications) but does not offer exclusions or context about when to prefer this over related tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
double_tapDouble TapC
Double-tap at (x, y) or a mark; both taps are issued concurrently so they land together.
| Name | Required | Description | Default |
|---|---|---|---|
| x | No | ||
| y | No | ||
| device | No | ||
| som_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It does disclose one useful behavioral trait—'both taps are issued concurrently so they land together'—but it does not mention outcome, failure behavior, effects on the device, or implications of null coordinates. This is too thin for a gesture tool with zero annotation support.
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, front-loaded with the action and target, containing no filler. The ambiguity of 'a mark' costs some clarity, but the structure is efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no annotations, sparse schema metadata, and an output schema that is not explained, the description is under-specified. It fails to clarify what a 'mark' is, how device selection works, and what the tool returns or reports. An agent would need to guess at core invocation details.
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 x and y as coordinates and hints at a 'mark' alternative, but it does not connect 'mark' to som_id and never mentions the device parameter. Most of the four parameters remain 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?
The description names a specific action ('Double-tap') and target ('at (x, y) or a mark'), which distinguishes it from gesture siblings like tap and long_press. However, the phrase 'a mark' is ambiguous and is not explicitly tied to a parameter or sibling concept.
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 is given about when to use double_tap versus alternatives such as tap or long_press. There are no conditions, prerequisites, or exclusions, leaving 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.
echoEchoA
Connectivity check for the MCP server itself (does not touch the device).
| Name | Required | Description | Default |
|---|---|---|---|
| message | 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 disclosure burden. It discloses the important behavioral constraint that the tool does not touch the device, implying a safe, server-side probe. However, it does not say that the message is echoed back or describe failure/error behavior; the output schema may cover some of this.
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 sentence with no filler. The core purpose and the key distinction from device tools are front-loaded, and every word contributes 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 tool is very simple, has one optional and self-explanatory parameter, and an output schema is available. The description covers the server-side scope and the no-device safety aspect. It doesn't explicitly describe the echo response or alternative liveness checks, but these are minor given the simplicity and output schema.
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 description makes no mention of the message parameter, and schema description coverage is 0%, so it adds no parameter meaning beyond the schema's name/type/default fields. The parameter is named transparently, but the description still fails to compensate for the absent schema documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as a connectivity check for the MCP server itself, which is a specific verb-plus-resource statement. The explicit 'does not touch the device' distinction separates it from the many device-oriented sibling tools, so an agent can tell what it is for.
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 a clear usage context: use it to verify MCP server connectivity rather than device state or control. The 'does not touch the device' clause provides a useful exclusion, though it does not name a specific alternative like ping_device or state explicit when-not-to-use conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
end_sessionEnd SessionA
Close out the run. outcome: success | partial | failed. Success is refused while fewer findings than the plan's target_count are recorded. Call after a final perceive_screen.
| Name | Required | Description | Default |
|---|---|---|---|
| device | No | ||
| outcome | No | success | |
| summary | 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 provided, the description must carry the behavioral burden. It discloses that success may be refused based on findings count, and that the call should occur after a final perceive_screen. This adds valuable behavioral context beyond the schema. It does not mention other side effects, but the key behavior is 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 two sentences, front-loaded with the core action. It includes essential constraints and ordering without any fluff. Every sentence earns its place, and it is structured efficiently.
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 are covered. The description explains the outcome options, the refusal condition, and the calling order. It does not elaborate on the 'device' or 'summary' parameters, but these are optional and likely self-explanatory. Overall, it provides sufficient context for an agent to call the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must explain all parameters. It only describes 'outcome' with its allowed values (success, partial, failed). It does not explain 'device' or 'summary' at all, leaving them undocumented. This is a significant gap given the zero coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action: 'Close out the run.' It specifies the resource (the run) and the outcome values. It is not a tautology and distinguishes from siblings by being the terminal session action. The verb and resource are 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 description gives explicit usage context: 'Call after a final perceive_screen.' It also explains a condition for success (refusal if fewer findings than target_count), which guides when to use and when success may not be granted. This is clear and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_filesFind FilesB
Find files under shared storage whose name contains query (empty lists everything).
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | /sdcard | |
| limit | No | ||
| query | No | ||
| device | No | ||
| max_depth | 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 reveals one non-obvious behavior (empty query lists everything), but it does not state whether the search is recursive, how `max_depth` and `limit` behave, what `device` selection implies, or any side effects. This leaves a substantial transparency gap for an unannotated tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The entire description is a single sentence with a useful parenthetical. The primary verb and resource are front-loaded, and every word adds value without repeating the title or schema defaults.
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 tool with five parameters and no annotations, a one-sentence description is thin. It omits the default root path, depth/limit semantics, and device-selection role, forcing an agent to infer from parameter names alone. The presence of an output schema does not compensate for the lack of parameter context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for undocumented parameters. It only clarifies the `query` parameter ('name contains' matching and empty behavior); `path`, `limit`, `device`, and `max_depth` receive no semantic explanation beyond their names and default values. The description does not disambiguate what `max_depth` means or how `limit` is applied.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with the verb 'Find' and specifies the resource ('files under shared storage') plus the matching rule ('name contains query'), with a parenthetical clarifying empty-query behavior. This distinguishes it clearly from sibling tools like list_apps or browser_find, so an agent can recognize what the tool does and what it does not do.
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 explicit when-to-use or when-not-to-use guidance and does not name alternatives or exclusions. Usage must be inferred from the one-line purpose, which is clear in context but lacks any direct comparison to other tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_device_statusGet Device StatusB
Battery, screen power, foreground app, size, storage, network addresses, volume.
| Name | Required | Description | Default |
|---|---|---|---|
| device | 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 provided, the description carries the full burden of behavioral disclosure, and it does convey what the report contains (a state snapshot across seven dimensions), which is useful. However, it does not disclose prerequisites (e.g., a connected device), the meaning or behavior of the null device default, failure modes, or confirm the read-only nature beyond what the name 'get' implies.
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 eight words long with zero wasted tokens; every term carries information about the returned status. For a one-parameter read tool this is an appropriately minimal size, though the lack of a verb is a structural weakness already accounted for in purpose clarity.
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?
Complexity is low: one optional parameter, an existing output schema, and a clear field list, so an agent can likely invoke it correctly with no arguments. Still, there are clear gaps — no usage routing against the many siblings and no explanation of the device parameter or null behavior — making it 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 description coverage is 0%, so the description was expected to compensate by explaining the device parameter, yet it is entirely silent on it. The schema's string/null type and default null weakly suggest an optional device selector, but the description adds no meaning about device identifiers or what null resolves to, so it misses the only parameter entirely.
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 is a fragment listing seven concrete status dimensions (battery, screen power, foreground app, size, storage, network addresses, volume), so it clearly conveys what the tool reports and avoids tautology. The verb must be inferred from the tool name since no verb is present, and the field list implicitly separates this state/health read from pixel- or UI-tree-focused siblings like get_screenshot, read_screen, and get_ui_tree, though no sibling is named explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description offers no guidance on when to use this tool versus alternatives such as read_screen, get_ui_tree, ping_device, or volume_up. It names no alternatives, gives no exclusions, and never states that this is the read-only status query among the many action-oriented sibling tools; the intended usage is only implied by the tool name and the field list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_media_sessionsGet Media SessionsC
Active media sessions (app, playback state, title/artist) and the music volume.
| Name | Required | Description | Default |
|---|---|---|---|
| device | No | ||
| include_system | 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 provided, the description must carry the behavioral disclosure burden. It lists the output contents but does not say whether the operation is read-only, whether device defaults to the active device, what include_system changes, or whether any side effects occur. Basic output information is present, but behavioral context is largely 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 terse sentence with no filler and the core resource is front-loaded. However, it is so abbreviated that it reads like a fragment rather than a complete sentence, and it omits parameter context. Still, the structure itself is efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having an output schema, the description leaves the two optional parameters unexplained and provides no usage context or behavioral notes. It is minimally acceptable for a simple getter, but for a tool that accepts a device selector and an include_system flag, the description is 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 description coverage is 0% and the description does not mention either parameter, device or include_system, at all. The parameter names offer limited hints, but the description adds no meaning about device targeting or what including system sessions would mean. This is a significant 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 identifies the resource (media sessions and music volume) and the specific payload fields (app, playback state, title/artist), which clearly distinguishes it from sibling control tools like media_control or volume_up. It lacks an explicit verb like 'retrieves' or 'returns', but the tool name supplies the action, so the purpose is still clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given about when to use this tool versus siblings such as media_control, volume_up, or get_device_status. The description implies it is a read action, but it does not state exclusions, prerequisites, or alternative conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_screenshotGet ScreenshotC
Plain screenshot as an image.
| Name | Required | Description | Default |
|---|---|---|---|
| device | No |
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 only says the result is an image; it does not mention permissions, device applicability, side effects, failure modes, or whether the screenshot reflects the current screen. This is minimal disclosure for an unannotated tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loaded with its main point, but it is under-specified rather than appropriately concise. The single sentence sacrifices essential usage and parameter information for brevity.
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 tool with one parameter, no output schema, and no annotations, the description should explain the device parameter and distinguish the tool from similar screenshot siblings. It does neither, leaving the agent without enough information to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has one optional device parameter with 0% schema description coverage, and the description does not mention this parameter at all. The description completely fails to explain what device means, how it should be specified, or what the default behavior is.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool produces a screenshot as an image, giving the agent the resource and output form. However, it does not distinguish get_screenshot from sibling tools like screenshot, screenshot_path, or browser_screenshot, so differentiation 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?
No guidance is given about when to use this tool versus alternatives such as screenshot, perceive_screen, or read_screen. The word 'plain' weakly implies a raw image without analysis, but there is no explicit when-to-use or when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_ui_treeGet Ui TreeC
Compact accessibility tree (class, id, label, flags C/L/E/S/K/P, bounds).
| Name | Required | Description | Default |
|---|---|---|---|
| device | No | ||
| max_depth | 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 adds that the tree is 'compact' and lists output fields, but does not disclose how accessibility data is obtained, what happens when the tree is unavailable, whether permissions are needed, or how max_depth affects results. These are significant behavioral gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single dense sentence with no filler and the key output concept is front-loaded. The field list is compact and informative, though the brevity comes at the cost of missing guidance.
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 structure, so explaining field contents is less critical. However, with zero annotations and zero parameter documentation, the description is too sparse to fully support correct invocation; it lacks device handling, depth semantics, and sibling differentiation.
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 the undocumented device and max_depth parameters. It does not mention either parameter, leaving an agent unable to infer device selection or depth behavior from 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?
The description identifies the resource (accessibility tree) and specifies the exact contents: class, id, label, flags, and bounds. It is not a tautology, but it does not differentiate from sibling tools like read_screen or perceive_screen.
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 is given on when to use this tool versus alternatives such as get_screenshot, read_screen, or perceive_screen. The description provides no context about suitable scenarios or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_usage_guideGet Usage GuideA
How to use this server well. Topics: overview, shortcuts, text_entry, failures, ledger, browser.
| Name | Required | Description | Default |
|---|---|---|---|
| topic | 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 indicates that the tool provides a guide, but it does not state whether the operation is read-only, what happens when topic is null, or what form the response takes. The output schema may describe the return shape, but behavior beyond that is unexplained.
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 compact sentence plus a topic list, with no wasted words. It front-loads the core purpose and then gives concrete options for the only parameter.
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 tool with one optional parameter and an output schema, the description is mostly sufficient: an agent can invoke it correctly by picking one of the listed topics. It could be more complete by stating what an omitted topic returns and whether the topic list is exhaustive, but these are minor gaps given the tool's simplicity.
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's topic list ('overview, shortcuts, text_entry, failures, ledger, browser') is the only semantic guidance for the single 'topic' parameter. It compensates for the empty schema by enumerating likely values, though it does not define what each topic contains or explain the null default.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The title 'Get Usage Guide' and description 'How to use this server well' clearly establish that this tool returns usage documentation for the server. The topic list distinguishes it from the many action-oriented siblings like screenshot, tap, and type_text, though the description itself lacks an explicit verb.
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 'How to use this server well' implies this should be used when an agent needs orientation or guidance on server features. However, it does not explicitly state when to use it versus alternatives, nor does it mention exclusions or a recommended call order relative to other tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
launch_appLaunch AppA
Open an app by name (fuzzy) or exact package. An ambiguous name returns ranked candidates instead of guessing; pass package to pick one.
| Name | Required | Description | Default |
|---|---|---|---|
| device | No | ||
| package | No | ||
| app_name | 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 behavioral disclosure burden, and it reveals genuinely non-obvious behavior: the tool does not guess on ambiguous names but returns ranked candidates. That is important context beyond what the schema alone would provide. It omits failure modes and device context, but the core launch and disambiguation behavior is transparent.
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 with the main action front-loaded and the disambiguation rule following naturally. There is no filler, and every phrase adds information an agent needs.
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 launch tool, the description covers the normal call patterns and the key ambiguous-name behavior, and an output schema exists so return values do not need to be described. The main gaps are the role of the device parameter and the lack of comparison to start_app, but the tool is largely usable from this definition alone.
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 map 'name' to the app_name parameter and 'package' to the package parameter, including its disambiguation role. However, the device parameter is never mentioned, and the description does not state valid combinations or formats for the package and app_name values.
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 and resource: 'Open an app by name (fuzzy) or exact package.' It also adds a distinctive behavioral detail about returning ranked candidates for ambiguous names. However, it does not explicitly differentiate launch_app from the sibling start_app, so it falls just short of full sibling distinction.
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 practical guidance for the main decision: use a fuzzy name or an exact package, and if the name is ambiguous, 'pass package to pick one' instead of letting the tool guess. This is clear invocation context, though it does not explicitly state when to prefer this tool over alternatives like start_app or lookup_app.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_app_deeplinksList App DeeplinksB
Deep links for an app: registered VIEW intent filters plus curated entries, each probe-resolved on the device (resolved=true means a handler exists).
| Name | Required | Description | Default |
|---|---|---|---|
| device | No | ||
| package | No | ||
| app_name | 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 well by disclosing that each entry is probe-resolved on the device and explaining the resolved=true semantics. It doesn't cover side effects, but for a read-only listing operation that is a minor gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence that is front-loaded with the core purpose and packs meaningful detail (registered filters, curated entries, probe resolution) with 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?
The output schema exists, so return values are already documented. The core behavior is described, but the complete absence of parameter usage guidance is a significant gap for a tool with three optional, undocumented parameters.
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 device, package, or app_name at all. An agent cannot determine how to target a specific app or what combinations of parameters are valid.
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 (list) and resource (app deep links), then adds detail about what's included (registered VIEW intent filters plus curated entries) and the resolution status. An agent can distinguish this from sibling tools like resolve_deeplink and open_deeplink purely from the description.
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 given, and no alternatives are named. The description only defines what the tool does, leaving an agent to infer when to call it versus a sibling like resolve_deeplink.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_appsList AppsA
List installed apps (user apps only unless system=true).
| Name | Required | Description | Default |
|---|---|---|---|
| device | No | ||
| system | 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 disclose the main behavioral trait, user-only filtering by default, but it says nothing about permissions, output content, or whether system=true includes both user and system 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?
A single sentence with no filler. It front-loads the operation and immediately qualifies the key optional behavior with a conditional.
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, has only optional parameters, and an output schema exists, so the core call is close to self-evident. However, the missing explanation of the device parameter and the lack of any sibling differentiation leave meaningful gaps for an agent choosing and invoking this 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. It explains the system parameter's default and effect, but the device parameter is left entirely to inference from its name and null default.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: "List installed apps". The clause "user apps only unless system=true" immediately adds a scoping distinction that separates it from lookup or launch tools among the siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to choose this tool over alternatives such as lookup_app or launch_app. The "unless system=true" condition is parameter behavior, not a usage guideline, and the device parameter is not addressed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_devicesList DevicesB
Devices adb can see (serial and state).
| 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 of behavioral disclosure. It only reveals the output fields (serial and state) and the adb source, but it does not say whether this is a safe read-only operation, whether it might start the adb server, require device authorization, or what state values mean. There is no contradiction, but the behavioral disclosure is minimal.
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 extremely compact and front-loaded, using a single sentence to state the output source and content. Every word earns its place, and the parenthetical adds the two most useful data fields without padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter enumeration tool with an output schema, the description provides the core operational facts: no inputs needed, returns adb-visible device serials and states. It doesn't clarify when to use it instead of nearby device tools, but that gap is already captured under usage guidelines, and the output schema likely covers return structure.
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 has zero parameters, so there is no parameter documentation burden. The empty schema already communicates that no arguments are needed, and the description adds no parameter details, which is appropriate. The baseline of 4 applies here.
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 title already communicates the verb and resource, and the description adds useful specificity: it returns devices visible to adb, including serial and state. It is not tautological, and while it doesn't explicitly contrast with sibling device tools like get_device_status or connect_device, the 'adb can see' qualifier makes the scope reasonably clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use list_devices versus alternatives such as get_device_status, connect_device, or ping_device. There are no usage conditions, exclusions, or references to more appropriate sibling tools, so the agent must infer selection from names alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
long_pressLong PressC
Press and hold at (x, y) or a mark.
| Name | Required | Description | Default |
|---|---|---|---|
| x | No | ||
| y | No | ||
| device | No | ||
| som_id | 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, but it only names the gesture. It does not disclose the default hold duration (800ms), what a 'mark' is or how it is resolved, whether a device must be specified, or any side effects. 'Or a mark' introduces an unexplained behavior not reflected in the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short, front-loaded sentence with no filler; it states the action immediately. However, the unexplained 'mark' concept makes it less self-contained than it appears.
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 5 optional parameters, a 0% described schema, and no annotations, this description is too sparse to fully prepare an agent. It fails to explain the 'mark' alternative, coordinate origin/format, device targeting, or duration semantics. The presence of an output schema only removes the need to describe return values; it doesn't fill these input 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 description only glosses x/y via 'at (x, y)' and vaguely references a 'mark' that is not a parameter. The device, som_id, and duration_ms parameters receive no semantic explanation, leaving the agent to infer them from names/defaults.
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 and hold') and a target ('at (x, y) or a mark'), which clearly sets it apart from sibling gestures like tap and double_tap. It is not a tautology and gives enough to identify the tool's core function.
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 guidance on when to choose long_press over tap, double_tap, or swipe. There is no mention of contexts (e.g., triggering context menus), exclusions, or alternative selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lookup_appLookup AppA
Search installed apps by name or package; returns ranked candidates with scores.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes | ||
| device | 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 provided, the description carries the full burden of behavioral disclosure. 'Search' implies a non-destructive read-only operation, and 'returns ranked candidates' hints at the output, but it does not explicitly confirm that no device state is changed, nor does it cover error cases, privacy, or permission requirements. The basic behavior is evident, but the disclosure is minimal.
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, well-structured sentence that front-loads the action ('Search installed apps') followed by the criteria and the result type. Every word adds value, and there is no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with three parameters and no annotations, the description is reasonably complete but not fully. It covers the core intent and result shape, but leaves the optional parameters' effects unexplained. The presence of an output schema helps, but the description does not mention how limit or device affect behavior, nor does it address alternative tools. Overall, it's adequate but with 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 all parameters. It does explain the 'query' parameter by saying 'by name or package', but it entirely omits 'limit' and 'device'. The description adds some value for the required parameter but leaves two optional parameters undocumented, failing to fully compensate for the lack of schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb ('Search'), a resource ('installed apps'), and the search criteria ('by name or package'). It also specifies the output ('ranked candidates with scores'), making its purpose unambiguous and easily distinguishable from siblings like list_apps or launch_app.
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 when you need to find an app by name or package, but it does not explicitly state when to prefer this over alternatives like list_apps, nor does it mention any exclusions or prerequisites. The context is clear but the guidance is not explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mark_stepMark StepA
Update a plan step: pending | in_progress | done | skipped | failed. Put facts you read off the screen in note; the pixels are gone next turn.
| Name | Required | Description | Default |
|---|---|---|---|
| note | No | ||
| index | Yes | ||
| device | No | ||
| status | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It reveals that screen pixels are ephemeral ('the pixels are gone next turn'), which is a useful context for note-taking. However, it does not disclose other behavioral aspects such as side effects of updating a step, whether the change is reversible, or any permission requirements. It adds some value but remains thin for a state-changing 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 sentences with no wasted words. The purpose is front-loaded, and the note guidance is appended efficiently. Every sentence adds value, and the structure is clean and scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has 4 parameters, no schema descriptions, and no annotations. The description covers purpose and the ephemeral screen context, but it omits parameter meanings for index and device, and doesn't describe expected behavior beyond the status update. While an output schema exists (which might define return values), the input semantics are incomplete. For a tool of this complexity, more context is needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must explain parameter meanings. It covers 'status' by listing allowed values and explains 'note' as a place to put facts from the screen. However, it does not explain 'index' (likely the step number) or 'device' (which device to target), leaving two of four parameters ambiguous. The partial coverage is insufficient for a tool with no schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Update a plan step' with a specific list of valid status values (pending, in_progress, done, skipped, failed). This is a specific verb-resource pair that distinguishes it from sibling tools like set_plan (which likely creates a plan) and record_finding (which records findings). 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?
The description implies when to use it (when updating a plan step's status) but provides no explicit guidance on alternatives or when not to use it. It does offer a practical hint about using 'note' for facts read off the screen, which is a usage consideration, but it doesn't contrast with other plan-related tools like set_plan or record_finding. Clear context exists, but 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.
media_controlMedia ControlB
Send a media key: play, pause, play_pause, stop, next, previous, rewind, fast_forward.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | ||
| device | 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, and the description does not disclose whether this sends a key to a default media session, requires active playback, changes state, or returns errors. It essentially restates the command and its options without explaining behavioral consequences.
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 a compact list of valid actions. There is no filler, repetition, or unnecessary 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?
The tool is simple and an output schema exists, so return-value details are not needed. However, the optional device parameter and the behavioral effects of sending a media key are not addressed, which leaves some ambiguity for correct invocation on a specific 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 description adds meaning to the action parameter by listing valid values that are not represented as an enum in the schema. However, it never explains the device parameter or its null default, and with 0% schema description coverage, device semantics 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?
The description uses a specific verb ('Send') with a clear resource ('a media key') and enumerates the valid key actions, making its purpose immediately understandable. It does not explicitly differentiate from sibling tools like press or volume controls, but the listed media key names are distinctive enough.
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 press, volume_up, or get_media_sessions. The intended context is only implied by the action list, with no exclusions or conditions described.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
muteMuteC
Mute (volume 0, previous level remembered) or unmute the music stream.
| Name | Required | Description | Default |
|---|---|---|---|
| muted | No | ||
| device | 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 behavioral transparency burden. It usefully discloses that muting sets volume to 0 and remembers the previous level, which explains how unmuting restores it. However, it does not mention behavior around the device parameter, current mute state, or potential 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 efficient sentence with no wasted words. The key behavioral note about remembering the previous volume level is front-loaded, though 'music stream' could be more precise.
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 no annotations and 0% param coverage, the description is too sparse for an agent to confidently invoke the tool. It omits how to specify unmute, what device does, and when this tool is appropriate versus media siblings. The presence of an output schema reduces the need to explain return values, but the missing parameter and usage context remain significant 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 but does not. The mute/unmute wording loosely implies the 'muted' boolean, but the 'device' parameter is entirely undocumented, leaving an agent without essential parameter 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 clearly states the tool's action: muting or unmuting the music stream. It identifies a specific verb and resource, making it distinguishable from volume_up and volume_down siblings, though it does not name those alternatives explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided about when to use this tool versus volume_up, volume_down, or media_control. The description simply states the action without contextual conditions or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
notification_actionNotification ActionB
Tap one of a notification's own buttons (reply, archive, stop...); reply_text fills an inline reply field and sends it. Best-effort: it drives the notification shade.
| Name | Required | Description | Default |
|---|---|---|---|
| key | No | ||
| title | No | ||
| action | Yes | ||
| device | No | ||
| package | No | ||
| reply_text | 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 that the operation is best-effort and drives the notification shade, and that reply_text sends an inline reply. However, it omits important behavioral context such as prerequisites, failure modes, 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 compact and front-loaded with the core purpose, followed by a clarifying example and a brief caveat. Every sentence contributes meaningful information without repetition or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with six parameters, zero schema descriptions, and no annotations, this description is incomplete. An agent cannot confidently determine how to identify the target notification using key/title/package, nor understand the limitations of the best-effort behavior beyond a vague hint.
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, but it only explains reply_text and gives examples for action. The key, title, device, and package parameters are left completely unexplained, which is a significant gap since they likely determine which notification is targeted.
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: 'Tap one of a notification's own buttons' with concrete examples like reply, archive, and stop. This clearly differentiates it from generic tapping or notification dismissal tools, though it does not name a sibling tool explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The intended use is implied: use when you need to click a notification's embedded action button, and reply_text is for inline replies. However, there is no explicit guidance on when not to use it or which alternative to choose, such as dismiss_notification or type_text.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
open_deeplinkOpen DeeplinkC
Jump straight to a screen via URI or intent action; package pins the target app.
| Name | Required | Description | Default |
|---|---|---|---|
| uri | Yes | ||
| device | 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 provided, so the description must fully disclose behavior. It only states the action and package role, without mentioning error handling, prerequisites (e.g., app installed), side effects, or return behavior. For a tool that opens external screens, 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 a single concise sentence with no filler. It is front-loaded with the core action and the package qualifier. However, it is almost too brief, missing important details, so it doesn't earn 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?
With 3 parameters (only one required), no schema descriptions, and no annotations, the description is far from complete. It doesn't explain what happens on success or failure, how the device parameter affects execution, or the exact URI format. Even with an output schema present, the description lacks critical context 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 explains 'package pins the target app' but leaves 'uri' and 'device' entirely unexplained. The description adds minimal value beyond the schema's field names, failing to clarify URI format or device selection.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: jumping to a screen via URI or intent action, with package pinning the target app. It uses a specific verb (jump) and resource (screen), and the 'package pins' detail adds specificity. However, it doesn't explicitly distinguish itself from sibling tools like launch_app or start_app, which also handle app opening, 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 guidance on when to use this tool versus alternatives. It doesn't mention conditions like 'use when you have a URI' or 'prefer over launch_app for deep links'. The description is purely declarative and leaves the agent to infer usage context from the name and basic action.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
open_fileOpen FileC
Open a file in whichever app handles its type.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| device | 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 reveals that the file is handed off to whatever app handles its type, which is useful, but it does not mention side effects, permissions, whether the app opens visibly, or what happens if the file type has no handler. This is a significant gap for a tool that triggers external 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 is appropriately concise for a simple tool, though the brevity comes at the cost of important behavioral 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?
With no annotations, 0% parameter schema coverage, and an output schema that is not described in the text, the description leaves too much unexplained. It does not cover device targeting, failure modes, or the implications of launching an external app. A basic agent might invoke it correctly by name, but it would lack the context needed to use it safely and effectively.
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 only indirectly clarifies that path refers to the file to open, but it says nothing about the optional device parameter or how device selection affects the operation. The schema's raw types and default do little to explain the semantics, leaving the agent under-informed.
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 opens a file using the system's default handler for that file type. It is distinguishable from sibling tools like launch_app and open_deeplink because it focuses on file paths rather than apps or links. It does not explicitly call out sibling tools, 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?
The description implies the tool is for opening an existing file, but gives no guidance about when to prefer it over find_files, launch_app, or open_deeplink. There are no explicit conditions, exclusions, or alternative recommendations, so an agent must 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.
open_recent_appsOpen Recent AppsC
Open the recent-apps overview.
| Name | Required | Description | Default |
|---|---|---|---|
| device | 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 only states the action without disclosing side effects, prerequisites (e.g., device must be awake), or what happens if no recent apps exist. The optional 'device' parameter hints at multi-device support but the description doesn't explain behavior across devices.
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 short sentence with no wasted words. It is front-loaded with the action. However, it is so brief that it sacrifices useful context, but for what it contains, it is concise.
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 an output schema and one optional parameter, the description is minimal. It lacks context about device targeting, prerequisites, and expected outcomes. The output schema may cover return values, but the description doesn't help an agent understand when or how to invoke this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description does not explain the 'device' parameter at all. The schema shows it's an optional string/null with a default of null, but the description adds no meaning about what device values are valid or how the parameter affects 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 specific verb ('Open') and resource ('recent-apps overview'), which clearly identifies the tool's function. It distinguishes it from sibling tools like launch_app or open_deeplink, though it doesn't 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?
No guidance is provided on when to use this tool versus alternatives like launch_app, press_home, or system_intent. The context is implied by the name and description, but there is no explicit when-to-use or when-not-to-use information.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
perceive_screenPerceive ScreenA
Capture the screen: numbered marks (som_id) for every tappable/readable item plus an annotated screenshot. ids are single-use and go stale after any action. ocr = auto (only when the accessibility tree is sparse) | always | never.
| Name | Required | Description | Default |
|---|---|---|---|
| ocr | No | auto | |
| lang | No | eng | |
| device | No | ||
| max_marks | No | ||
| include_image | No |
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 that ids are single-use and go stale after any action, and explains the ocr modes including the 'auto' condition. These are genuine behavioral details beyond a simple 'captures screen' statement, but it omits permission requirements and return format.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact—three sentences with no filler. The main function is front-loaded, followed by the critical staleness warning and the ocr parameter semantics. Every sentence serves a distinct 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?
A 5-parameter tool with no annotations and no output schema demands more context. The description explains the tool's purpose but fails to cover the meaning of most parameters and does not describe the return structure of the annotated screenshot or marks. This is a significant gap 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 for all 5 parameters. It explains 'ocr' semantics (auto/always/never) but leaves lang, device, max_marks, and include_image completely unexplained, providing minimal help for an agent selecting parameter values.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description states a specific verb (Capture), resource (screen), and output (numbered marks plus annotated screenshot). It clearly differentiates from sibling tools like get_screenshot (plain screenshot) and get_ui_tree (tree only) by promising interactive som_ids for tappable/readable items.
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 doesn't explicitly name alternatives or when-not-to-use conditions. It implies usage when interactive elements with ids are needed, but lacks explicit comparison to get_screenshot or read_screen. The ocr explanation gives parameter guidance but not tool-selection guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ping_devicePing DeviceB
Is the Mobilerun Portal reachable? Returns its transport (http or content_provider).
| Name | Required | Description | Default |
|---|---|---|---|
| device | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Since no annotations are provided, the description carries the full behavioral burden. It communicates that this is a read-only reachability check and names the return value, but it does not disclose prerequisites, what the optional device parameter changes, or any connectivity/network caveats. Adequate for a simple ping, but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The entire description is one front-loaded, efficient sentence with no filler. It leads with the purpose and immediately follows with the key return value, making every word 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 tool with one optional parameter and an output schema, this is close to minimum viable. However, the missing parameter meaning and lack of sibling usage guidance leave a visible gap; the description alone may not fully prepare an agent to select or invoke it correctly in all contexts.
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 the `device` parameter at all. The agent is left to infer what a string value means and what `null` default does. The parameter name gives a weak semantic clue, but the description fails to connect it to the 'Mobilerun Portal' check.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific action ('is the Mobilerun Portal reachable?') and the key return value ('its transport (http or content_provider)'), which makes the tool's job unambiguous. It does not explicitly name a sibling alternative, but the check-and-transport phrasing is distinctive enough to separate it from general device-status or connection 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?
No guidance is given about when to use this tool versus alternatives such as get_device_status or connect_device. The description implies a reachability check but provides no context, exclusions, or preferred scenarios, leaving the agent to infer applicability 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.
pressPressA
Press home, back or enter (kept for old clients; prefer press_home/back/enter).
| Name | Required | Description | Default |
|---|---|---|---|
| button | Yes | ||
| device | 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 states the action (press) and the targets (home/back/enter) but does not disclose any side effects, permissions, or behavior for invalid inputs. For a simple action this is adequate but minimal; no contradiction with annotations (none provided).
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 sentence with two clauses: the action and the usage note. It is front-loaded with the core function and wastes no words. Perfectly concise.
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 legacy action, the description covers the core purpose, the button values, and usage preference. The 'device' parameter is not explained, but it is optional and likely obvious from context. With an output schema present, return values are not needed. Overall adequate, with 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?
The description adds meaning for the 'button' parameter by specifying the allowed values (home, back, enter), which the schema does not enumerate. However, it does not explain the 'device' parameter, leaving it to inference. Since schema coverage is 0%, the description partially compensates but not fully.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool presses home, back, or enter – a specific verb and resource. It also names the preferred alternatives (press_home/back/enter), distinguishing it from siblings. This is explicit and 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 description explicitly says 'kept for old clients; prefer press_home/back/enter', giving clear when-to-use and when-not-to-use guidance. It tells the agent to use this only for legacy compatibility and prefer the dedicated tools otherwise.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
press_backPress BackB
Press Back (also closes the keyboard without leaving the screen).
| Name | Required | Description | Default |
|---|---|---|---|
| device | 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 behavioral burden. It usefully discloses that with the keyboard open, Back closes the keyboard instead of leaving the screen, which is a non-obvious trait. It does not describe the ordinary back-navigation effect, device selection behavior, or error handling, but the disclosed nuance is meaningful.
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 short and the useful side effect is placed in a parenthetical, but the opening phrase largely restates the tool name and title. There is no padding or unnecessary detail, though the wording could be more informative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple, one-parameter action, the description is minimally viable: the action and one important keyboard behavior are clear, and an output schema presumably explains return values. The gap is the undocumented device parameter, which prevents the description 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?
The schema has 0% description coverage and the description never mentions the optional device parameter. An agent cannot tell whether device selects a target device, what null means, or why it is optional, so the description adds no semantic value 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?
The description states a concrete action, pressing the Back control, and the parenthetical adds a distinguishing effect (closing the keyboard without leaving the screen), separating it from siblings like press_home and press_enter. It does not explicitly contrast with all navigation 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?
The keyboard-dismissal note implies a useful scenario: if the keyboard is open, pressing Back will close it without navigating away. However, it does not name alternatives or give explicit when-to-use and when-not-to-use guidance, so 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.
press_enterPress EnterA
Press Enter (submits search bars and forms).
| Name | Required | Description | Default |
|---|---|---|---|
| device | 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 burden. It discloses the core action (pressing Enter) but does not mention potential side effects (e.g., navigation, requiring a focused element) or how the device parameter affects behavior. It is minimally transparent.
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, efficient sentence with no wasted words. The core action and purpose are front-loaded, making it easy to scan.
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 tool, the description covers the basic function, but it omits explanation of the device parameter and does not address potential prerequisites (e.g., a focused input). The output schema exists, so return format is not required, but the description is incomplete for full 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?
The schema has one parameter (device) with 0% description coverage, and the description does not explain it at all. An agent is left guessing whether device selects a specific device or has other meaning. 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?
The description clearly states the action (press Enter) and its purpose (submits search bars and forms). It is specific and distinguishes from generic 'press' by naming the exact key and its typical use case.
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 implies when to use the tool (when you need to submit a search bar or form), but does not explicitly compare to alternatives like tapping a submit button or using other key press tools. No exclusions or conditions are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
press_homePress HomeC
Press the Home button.
| Name | Required | Description | Default |
|---|---|---|---|
| device | 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 only states the action itself and does not mention whether a device must be specified, what side effects occur, or what the tool returns after pressing Home.
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 very short and action-first, with no filler words. However, it is terse to the point of omitting parameter and context details, making it concise but under-specified rather than well-structured and informative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter tool with an output schema, the core action is stated, but the missing device parameter semantics, absence of usage guidance, and lack of behavioral notes leave an agent guessing about invocation context. The description is minimally adequate for a human but not complete for an agent navigating many UI-action siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has one optional device parameter with no descriptions and 0% schema description coverage. The tool description never mentions the parameter, so it adds no meaning beyond the schema's name, type, and default value, and it fails to compensate for the low coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description is a clear imperative sentence naming both the action ('press') and the target ('Home button'), so an agent can understand the tool's function. It does not explicitly differentiate itself from siblings like press_back or press_enter, but the specific Home target is unambiguous enough.
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 guidance about when to use press_home versus alternatives such as press, press_back, or open_recent_apps. The only implied context is 'when you need to press Home,' with 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.
read_notificationsRead NotificationsC
Notifications currently posted: key, app, title, text, action labels, clearable.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| device | No | ||
| package | No | ||
| include_ongoing | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are absent, so the description carries the full burden of behavioral disclosure. It only lists the output fields, giving no information about side effects, read-only nature (implied but not stated), any limits, filtering behavior, or what happens if no notifications exist. The description does not reveal whether include_ongoing affects results or how the device/package filters work.
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 sentence, which is concise, but it is effectively a list of fields rather than a structured explanation. It is not front-loaded with the tool's purpose or usage. The information it contains could be better organized, and it does not earn its place as a functional description.
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?
While an output schema exists (so return format is covered elsewhere), the tool has four parameters with no documentation, and the description doesn't address them. It also provides no usage context or behavioral details. For a basic read operation this is incomplete; an agent would struggle to customize the call 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 the description provides no explanation of the parameters (limit, device, package, include_ongoing). It lists only the return fields, so an agent cannot understand how to use the tool's arguments or their allowed values. This is a complete failure to compensate for the schema's lack of descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Notifications currently posted: key, app, title, text, action labels, clearable.' conveys that the tool reads/returns current notifications and lists the fields included, but it does not use an explicit verb like 'reads' or 'returns'. The name 'read_notifications' is clear, and the field list distinguishes it from action tools like dismiss_notification, but it lacks a precise functional statement.
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_screenshot, read_screen, or notification_action. No mention of prerequisites, context, or scenarios. The agent must infer usage purely from the name and field list, which is inadequate for making an informed choice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_screenRead ScreenB
Text-only view of the screen (no image): foreground app plus numbered elements.
| Name | Required | Description | Default |
|---|---|---|---|
| device | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Since no annotations are provided, the description carries the burden of behavioral disclosure. It does disclose the most relevant behavior: text-only output rather than an image, plus the structure of the output. However, it does not mention permission needs, failure modes, or limitations such as whether it reflects live UI state.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single efficient sentence with no filler. The core behavioral distinction ('text-only view... no image') is front-loaded, and the output composition is given immediately after.
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, has only one optional parameter, and has an output schema, so the description does not need to explain return values in detail. It conveys the essential content and non-image nature, but it is incomplete because it provides no usage guidance and no parameter semantics.
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 one undocumented optional 'device' parameter and 0% description coverage, and the tool description never mentions it. The parameter name is self-explanatory, but valid values, default-null behavior, and device selection semantics are left completely unspecified.
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 identifies a specific resource (screen) and a specific delivery mode (text-only, no image) with concrete content (foreground app plus numbered elements). It clearly separates read_screen from screenshot-style siblings, though it does not explicitly name or contrast perceive_screen or get_ui_tree.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance is given for when to use this tool versus alternatives such as get_screenshot or get_ui_tree. The 'no image' phrase implies a text-oriented use case, but the description never states conditions, exclusions, or named alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
record_findingRecord FindingB
Record one item you found. quote must be copied exactly from the CURRENT screen.
| Name | Required | Description | Default |
|---|---|---|---|
| item | Yes | ||
| quote | Yes | ||
| device | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full disclosure burden, and it does add one useful behavioral constraint: the quote must be copied exactly from the CURRENT screen, which tells the agent how to source that argument. However, it does not disclose what recording does (e.g., session logging vs. side effects), how the exact-match requirement is enforced, or any device-related behavior — partial coverage at best.
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 zero filler. The core purpose is front-loaded in the first sentence and the critical quote-copying constraint follows immediately; 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?
The output schema covers return values, but the tool has three parameters at 0% schema coverage, no annotations, and no explanation of what constitutes an 'item', when recording is warranted, or what 'device' controls. An agent would be guessing on half the input contract, making this incomplete for a tool with this little structured support.
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 three parameters, but it only adds meaning to 'quote' (exact copy from current screen). 'item' is glossed merely as 'the item you found' with no definition of what qualifies, and 'device' is never mentioned at all, leaving its purpose entirely 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 ('record') and resource ('item you found'), and this clearly distinguishes it from the sibling set, which is entirely UI interaction, screenshot, and app management tools — no other sibling records findings. It falls short of 5 because 'item' is never defined, leaving the scope of what counts as a finding ambiguous.
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 offers no guidance on when to use this tool versus alternatives — no exclusions, no named alternatives, no conditions for skipping. 'Record one item you found' merely restates the purpose with an implied trigger; the only hint of a prerequisite (a 'CURRENT screen' must exist) is buried in a parameter constraint rather than framed as usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
request_screen_capture_permissionRequest Screen Capture PermissionA
Compatibility no-op: screenshots use the Portal / adb screencap, no prompt is needed.
| Name | Required | Description | Default |
|---|---|---|---|
| device | 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 provided, the description carries the full burden of behavioral disclosure. It fully discloses that the tool performs no actual permission request, has no prompt, and is only a compatibility shim. This gives an agent complete knowledge of side effects and expected 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?
A single, front-loaded sentence delivers the essential message: the tool is a no-op, why it exists, and what the real mechanism is. There is zero wasted wording, and the most important information ('no-op') appears 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?
For a compatibility no-op with no annotations and a single optional parameter, the description is complete enough: it explains the tool's purpose, its lack of side effects, and the reason it exists. The output schema exists, so return-value details are not the description's responsibility.
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 one optional 'device' parameter with 0% description coverage, and the description does not mention it at all. Even though the tool is a no-op, the description fails to explain whether the parameter is ignored, validated, or affects behavior. The description should compensate for the bare schema but 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 clearly states the tool is a 'Compatibility no-op' and explains why (screenshots use Portal / adb screencap, no prompt needed). This precisely differentiates it from the many screenshot-related siblings, which actually capture or read the screen, by identifying this as a stub.
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 clear context: because screenshots are handled elsewhere and no prompt is needed, calling this tool is unnecessary. It stops short of explicitly naming an alternative tool or an exact condition for using this one, but 'compatibility no-op' strongly implies it should only be invoked when some external contract requires it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resolve_contactResolve ContactA
Find contacts by (partial) name and return their phone numbers.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| limit | No | ||
| device | 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 behavioral burden. It does disclose partial-name matching and that phone numbers are returned, which is core behavior. But it leaves important traits unstated: whether it reads local device contacts, whether permissions are required, how duplicates or unmatched names are handled, and how limit/device affect 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?
The description is one concise sentence with no filler. The main action is front-loaded, and every phrase adds relevant information: 'contacts', 'partial name', and 'return their phone numbers'.
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 lookup tool with an output schema, the description is minimally adequate: it states what to pass and what comes back. However, with no annotations and no parameter descriptions, the missing semantics of 'limit' and 'device', plus no mention of no-match behavior, make it incomplete for robust autonomous use.
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 the bare input schema. It adds meaning only to the 'name' parameter via 'partial'. It does not explain 'limit' or 'device', leaving their semantics to be guessed from their names and defaults.
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 action ('Find contacts'), a specific resource ('contacts'), a matching rule ('partial name'), and the return value ('phone numbers'). It also clearly distinguishes resolve_contact from sibling tools like resolve_deeplink because it names the exact subject matter.
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 use case is implied: use it when you need contact phone numbers from a partial or full name. However, the description gives no explicit when-to-use/when-not-to-use guidance, no mention of alternatives, and no prerequisites such as required permissions or device context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resolve_deeplinkResolve DeeplinkB
Which app would open this URI (or intent action such as android.settings.WIFI_SETTINGS)?
| Name | Required | Description | Default |
|---|---|---|---|
| uri | Yes | ||
| device | 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 provided, the description carries the burden of behavioral disclosure. It usefully implies this is a non-destructive resolution operation ('which app would open') rather than an actual launch, but it does not disclose details such as whether a device must be connected or what happens for unresolvable URIs.
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, tight sentence with no filler. It leads with the core question and immediately conveys the tool's value, making it easy for an agent to process quickly.
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 core purpose is clear and an output schema exists, so return-value details are not required from the description. However, the unresolved device parameter and lack of context about how this tool interacts with the device ecosystem leave a noticeable completeness 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. It gives some semantics for the uri parameter and provides a concrete intent-action example, but it completely omits the optional device parameter, leaving its purpose and effect unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool's job is to identify which app would handle a given URI or intent action. The wording 'would open' effectively distinguishes it from actually opening the deeplink, though it does not explicitly name sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The question-like phrasing implies the tool is used when you need to know the handler app for a URI before opening it. However, there is no explicit guidance about when not to use it or how it relates to alternatives like open_deeplink, list_app_deeplinks, or system_intent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_taskRun TaskA
Hand a goal to the Mobilerun LLM agent (best-effort: its self-reported result can be wrong, so verify with perceive_screen). Disabled when the safety policy is on.
| Name | Required | Description | Default |
|---|---|---|---|
| task | Yes | ||
| steps | No | ||
| device | No | ||
| vision | No | ||
| reasoning | 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 a good job by warning that the self-reported result can be wrong and that the tool is disabled under safety policy. It does not mention potential autonomous side effects or timeouts, but the reliability caveat is significant and useful.
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 focused sentences with no redundant wording. The critical caveat is front-loaded as a parenthetical, and the safety-policy disablement is stated in one clear clause.
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?
Even though an output schema exists, the definition lacks parameter semantics for four of five parameters and does not explain how steps, vision, or reasoning affect execution. An agent cannot confidently configure a correct invocation based on this description alone.
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 needed to clarify the five parameters. It only implies that task is the goal; steps, device, vision, and reasoning are left entirely unexplained. This is minimal compensation for a schema that provides no parameter documentation.
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 ('Hand a goal') and a specific resource ('the Mobilerun LLM agent'), clearly distinguishing this from direct-action siblings like tap, swipe, and launch_app. The added caveat that the result is best-effort further clarifies what the tool does and does not guarantee.
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 concrete guidance: after using run_task, verify the result with perceive_screen, and it explicitly notes that the tool is disabled when the safety policy is on. It does not explicitly contrast run_task with direct-action siblings for when to choose one over the other, but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
screenshotScreenshotC
Alias of get_screenshot (kept for existing clients).
| Name | Required | Description | Default |
|---|---|---|---|
| device | No |
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 only says it's an alias and gives no information about what the tool does, its side effects, required permissions, return format, or any other behavior. This is a complete absence of behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single short sentence, but it is under-specified rather than concise. It omits essential information about the tool's functionality and parameters, so it is not appropriately sized for an agent to use effectively. The structure does not front-load any useful content beyond the alias statement.
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?
Even for a simple tool with one optional parameter, the description is grossly incomplete. It doesn't state what the tool does, what it returns, what the parameter does, or when to use it. With no output schema and no annotations, the agent has virtually no information to correctly invoke this 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?
The schema has one parameter ('device') with zero description coverage. The description does not mention this parameter at all, so the agent gets no explanation of what 'device' means or how to use it. The description fails entirely to compensate for the schema's lack of documentation.
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 identifies the tool as an alias of get_screenshot, implying it serves the same purpose as that tool. However, it does not explicitly state what the tool does (e.g., capture a screenshot), relying on the agent to know get_screenshot's behavior. It does differentiate from siblings by labeling it an alias, but the purpose is not self-contained.
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 'kept for existing clients' hints that new clients should use get_screenshot instead, providing a usage condition. However, it doesn't elaborate on when to use this tool vs. other screenshot-related siblings like perceive_screen or read_screen, leaving the guidance minimal.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
screenshot_pathScreenshot PathC
Take a screenshot, save it as a PNG file and return the path.
| Name | Required | Description | Default |
|---|---|---|---|
| device | 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 provided, the description carries the full burden of behavioral disclosure. It states the core action but omits critical details such as where the PNG is saved (local vs. device), whether it overwrites existing files, permission requirements, or behavior on failure. The device parameter is not mentioned, so its effect on the screenshot is unknown. This is a significant gap for a 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?
The description is a single, front-loaded sentence with no wasted words. It efficiently conveys the primary action and output. However, it is concise to the point of omitting important details (parameter semantics, side effects), so it is not fully optimal. It earns a 4 for structure but loses a point for under-specification that could be addressed without verbosity.
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 that the tool has one optional parameter (device) and many closely related sibling tools, the description is insufficiently complete. It does not explain the device parameter, differentiate from siblings, or provide usage context. While an output schema exists (so return format is covered), the tool's overall behavior and applicability are left underspecified.
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 input schema has one parameter 'device' with 0% description coverage, and the tool description does not mention it at all. Since the description fails to explain the purpose or effect of the parameter, the agent has no semantic context for it. The description adds zero value beyond the raw schema, and with no schema descriptions, the parameter is 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?
The description clearly states a specific action (take a screenshot), the output format (PNG file), and the return value (path). This distinguishes it from siblings like 'screenshot' (which may not save to a file) or 'get_screenshot' (which might retrieve an existing one). The verb+resource+output structure is explicit and 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 is provided on when to use this tool versus alternatives like 'screenshot', 'get_screenshot', or 'perceive_screen'. The description does not mention any conditions, exclusions, or comparisons to other tools, leaving the agent to infer usage context on its own.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scroll_downScroll DownB
Scroll the content down (reveal what is below). amount is a fraction of the region.
| Name | Required | Description | Default |
|---|---|---|---|
| amount | No | ||
| device | No | ||
| som_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden. It discloses that the action reveals lower content and that amount is a proportional fraction, but it does not clarify whether this is a gesture simulation, how region is defined, or what happens at scroll limits. Some transparency is present, but meaningful gaps remain.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a compact, front-loaded sentence with no filler. The purpose and the meaning of the key parameter are both stated efficiently.
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 tool with no annotations and several scroll-related siblings, this is too thin. The term 'region' is vague, there is no guidance about targeting a specific UI element with som_id, and it does not clarify interaction with device state. The presence of an output schema covers return values, but the calling context remains under-specified.
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 description adds real semantics for amount by defining it as a fraction of the region, which the schema does not provide. However, with 0% schema description coverage, device and som_id remain undocumented and their roles in the scroll are not explained. The most important parameter is covered, but the auxiliary parameters are left 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 clear action ('Scroll the content down') and explains the intent ('reveal what is below'), making the direction unambiguous. It is differentiated from scroll_up/left/right by direction, but it does not explicitly distinguish itself from the more general scroll_to, so it falls 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 description gives no guidance on when to use this tool versus the many scroll/swipe siblings. It implies use when content below is hidden, but it never mentions alternatives, nested-element scrolling, or when to set som_id for a specific region.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scroll_leftScroll LeftC
Scroll the content left (reveal what is to the left).
| Name | Required | Description | Default |
|---|---|---|---|
| amount | No | ||
| device | No | ||
| som_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must carry the full burden of behavioral disclosure. It mentions the effect ('reveal what is to the left') but does not explain how the 'amount' parameter influences scrolling, what device or som_id are for, or any side effects or limitations. This is minimal behavioral transparency.
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, clear sentence with no filler. It is appropriately concise and front-loads the action. However, its brevity borders on under-specification, which is more a completeness issue than a conciseness issue. The structure is effective.
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 tool with three parameters, no annotations, and no parameter explanations, the description is incomplete. It does not cover parameter semantics, usage context, or behavioral details beyond the basic action. The presence of an output schema mitigates the need to explain return values, but the lack of parameter guidance is a significant 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 description provides no information about the three parameters (amount, device, som_id). The description does not compensate for the lack of schema documentation, leaving the agent without any understanding of what these parameters mean or how to set them correctly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb ('scroll') and resource ('content') with a direction ('left'), and adds 'reveal what is to the left' to clarify the effect. It is distinguishable from other scroll tools like scroll_right and scroll_up, though it does not explicitly name them. This is clear and purposeful, not a tautology.
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 like scroll_to, scroll_right, or swipe. No context is provided for choosing this over a generic swipe or scroll. The description only states the action without any situational direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scroll_rightScroll RightB
Scroll the content right (reveal what is to the right).
| Name | Required | Description | Default |
|---|---|---|---|
| amount | No | ||
| device | No | ||
| som_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full behavioral disclosure burden. It does state the intended observable effect—scroll right and reveal content to the right—but it does not disclose how the amount parameter affects the scroll, whether the scroll is smooth, or how device/som_id scoping works.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no filler. The parenthetical earns its place by clarifying the direction and purpose, and the entire definition is appropriately sized for such 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?
Although the tool is simple and an output schema exists, the definition is incomplete because it leaves all parameter semantics unexplained and offers no guidance for choosing this tool over related scroll/swipe tools. An agent would not know what amount=0.5 means or whether device/som_id are needed.
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 adds no meaning for any of the three parameters (amount, device, som_id). The default 0.5 for amount is unexplained, and device/som_id are completely undocumented, leaving the agent to guess their semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'Scroll' with a clear object 'the content' and direction 'right', and the parenthetical 'reveal what is to the right' reinforces the intended outcome. This clearly distinguishes it from siblings like scroll_left, scroll_down, and scroll_up.
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 when content is clipped or hidden on the right side, but it does not explicitly state when to use this tool versus alternatives like scroll_to, swipe, or the other directional scroll tools. It gives context but no exclusions or routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scroll_toScroll ToA
Scroll until an element whose label contains text is visible; returns its mark.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | ||
| device | No | ||
| direction | No | down | |
| max_scrolls | 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 does disclose the core looping behavior ('scroll until ... visible') and the return value, but it does not explain what happens if the element is never found within max_scrolls or that the viewport is being changed. The main behavior is clear enough for a simple scroll 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?
The description is a single front-loaded sentence with no redundant words. Every part contributes to understanding what the tool does and what it returns.
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, schema, and output schema together cover the core invocation: target text, defaults for direction/max_scrolls, and the return value. However, the behavior when the element is not found within the scroll limit is not addressed, and without annotations that is a meaningful gap for an action 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. It does add meaning for 'text' by defining it as a substring of an element's label, but it leaves 'device', 'direction', and 'max_scrolls' without any semantic explanation beyond their names and defaults. Since direction is an unconstrained string, the agent could mis-invoke the tool without knowing the intended values.
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 ('Scroll'), a targeted condition ('until an element whose label contains text is visible'), and the return value ('returns its mark'). This clearly distinguishes it from fixed-direction sibling tools like scroll_down/scroll_up, which do not target a specific element.
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 usage is implied: use this tool when you need to scroll until a labeled element appears. However, it does not explicitly mention when not to use it or how it compares to alternatives like scroll_down/swipe, and with many scrolling siblings some routing guidance would be valuable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scroll_upScroll UpC
Scroll the content up (reveal what is above).
| Name | Required | Description | Default |
|---|---|---|---|
| amount | No | ||
| device | No | ||
| som_id | 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 does explain the intended effect, but it is silent on how the amount parameter influences the scroll, how device and som_id determine the target context, and what observable side effects or limits exist. For a UI action with three parameters, this is thin.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no filler, and the parenthetical adds meaningful clarification rather than redundancy. However, it is so terse that it leaves all parameter-level information unaddressed, so it is not fully appropriately sized for the tool's complexity.
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, the definition is not complete enough for correct invocation: parameter semantics are undocumented and there is no guidance for choosing among the many sibling navigation tools. Scroll direction alone is insufficient for reliable use.
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 amount, device, or som_id. An agent cannot determine whether amount is a fraction of the viewport, a pixel distance, or a scroll unit, nor what device and som_id refer to. The description adds no value over the raw parameter 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 ('scroll'), a resource ('content'), and a direction ('up'), with the parenthetical clarifying that this reveals content above the current viewport. This clearly separates it from scroll_down, scroll_left, and scroll_right by direction, though it does not explicitly contrast it with scroll_to or swipe.
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 swipe, scroll_to, or other scroll directions. The phrase 'reveal what is above' weakly implies a use case, but no explicit conditions, exclusions, or alternative routing are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_planSet PlanC
Start a plan checklist. target_count > 0 means 'N items must be recorded' before end_session(success) is allowed. With 3+ steps and a search_query, the first web search rides along in the reply.
| Name | Required | Description | Default |
|---|---|---|---|
| goal | No | ||
| steps | Yes | ||
| device | No | ||
| deliverable | No | ||
| search_query | No | ||
| target_count | 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 provided, the description carries the full burden of disclosing behavior. It reveals two key behaviors: the target_count constraint on ending sessions and the side-effect of an accompanying web search. However, it does not mention whether this tool mutates state, requires authentication, or has side effects beyond the stated ones, leaving gaps in the 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?
The description is concise, using three short sentences that front-load the core purpose. It avoids unnecessary verbosity, though the phrase 'rides along' is informal and could be clearer. The structure is efficient, but it lacks a logical separation between the primary purpose and the behavioral constraints.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with six parameters and no annotations, the description is incomplete. It explains a few specific behaviors but does not clarify how the plan integrates with related tools like mark_step, record_finding, or end_session, nor does it describe the output or expected response. An agent would struggle to understand the full lifecycle and prerequisites for using this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for the missing parameter documentation. It explicitly explains target_count and search_query, and implicitly refers to steps, but leaves goal, device, and deliverable completely unexplained. This partial coverage is insufficient for a tool with six parameters, especially since the schema provides no descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the primary action ('Start a plan checklist'), giving a specific verb and resource. It does not explicitly distinguish from siblings like 'run_task' or 'mark_step', but the added behavioral details imply a distinct role in orchestrating a task plan. The term 'plan checklist' is somewhat ambiguous but still understandable.
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 guidance on when to use this tool versus alternatives. It mentions conditions like target_count and search_query but does not explain when a user should invoke this tool instead of other plan-related tools. There is no mention of prerequisites, exclusions, or typical use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
start_appStart AppA
Launch an app by package name (alias of launch_app(package=...)).
| Name | Required | Description | Default |
|---|---|---|---|
| device | 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 must carry the full behavioral burden. It only states the action 'Launch an app' without disclosing side effects, permissions required, error behavior, or any implications for the device parameter. This is insufficient for an agent to understand the tool's full operational impact.
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, concise sentence that is front-loaded with the core action and resource. It wastes no words and is easy to parse quickly.
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?
Despite having an output schema, the description gives no indication of return values, success/failure indicators, or what happens if the package is invalid. It also fails to address the device parameter entirely. For a simple alias tool, this might be acceptable, but given the missing parameter explanation and behavioral context, it falls short.
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 mentions 'package name' but provides no format details, and completely omits the 'device' parameter. The agent is left without guidance on how to specify the device or what values are acceptable for either 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?
The description clearly states the verb 'Launch' and the resource 'app by package name', and explicitly identifies it as an alias for launch_app(package=...). This distinguishes it from sibling tools like lookup_app or list_apps, making the purpose unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies that start_app is equivalent to launch_app, so it should be used whenever launching an app by package is intended. However, it does not explicitly state when NOT to use it or mention any alternative conditions beyond the alias relationship. This is a minor gap but largely acceptable given the alias clarity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
swipeSwipeC
Swipe from (x1, y1) to (x2, y2). duration (seconds) is accepted for old clients.
| Name | Required | Description | Default |
|---|---|---|---|
| x1 | Yes | ||
| x2 | Yes | ||
| y1 | Yes | ||
| y2 | Yes | ||
| device | No | ||
| duration | 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 exist, so the description must disclose behavior itself. It adds the legacy-seconds detail about duration, but does not explain coordinate system, swipe speed/timing defaults, or side effects of swiping on the device. For an input action that can affect UI state, this is a real 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 text is compact and front-loaded: the action and coordinates come first, with a short clarifying note after. It earns its place with no filler, though it is terse enough that some content is missing.
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 two-point swipe with an output schema, the core call is understandable: coords are required and duration semantics are hinted. Missing details (duration_ms default behavior, device selection, when to choose swipe vs scroll) leave moderate ambiguity for an agent without prior context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate; it only clarifies duration's unit/legacy status. The four coordinates are self-explanatory by naming, but device and duration_ms/'duration vs duration_ms' semantics remain 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 names the action ('Swipe') with explicit coordinates, so the tool's purpose is unambiguous and distinguishable from tap/scroll siblings. It could mention the target surface (screen) or that it is a touch gesture, but the intent is clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use a swipe over the many sibling gestures (tap, long_press, scroll_*), nor when device, duration_ms, or duration should be provided. The only usage hint is that duration is for old clients, which is a compatibility note, not a selection criterion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
system_intentSystem IntentB
One-call Android actions. Verbs: set_alarm(hour, minute, label), set_timer(seconds, label), dial(phone_number), compose_sms(phone_number, body), add_calendar_event(title, start, end, location, notes; ISO datetimes), share_text(text, subject), navigate( destination, mode drive|walk|bike|transit). dial/compose_sms only prefill; the user sends.
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | ||
| body | No | ||
| hour | No | ||
| mode | No | drive | |
| text | No | ||
| verb | Yes | ||
| label | No | ||
| notes | No | ||
| start | No | ||
| title | No | ||
| device | No | ||
| minute | No | ||
| seconds | No | ||
| skip_ui | No | ||
| subject | No | ||
| location | No | ||
| destination | No | ||
| phone_number | 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 does disclose the prefill-only behavior for dial and compose_sms, but it does not mention side effects, permission requirements, confirmations, or the role of the 'skip_ui' parameter (default true). For a tool that can create alarms, timers, calendar events, and navigate, this is a significant transparency 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 compact and information-dense, using a function-signature style to pack multiple verbs, parameter lists, formats, and one behavioral caveat into a few lines. Every sentence contributes value, and the core purpose is front-loaded.
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 main verb-specific parameter mappings and some formats, which is good for such a multi-action tool. However, it leaves the general-purpose parameters 'device' and 'skip_ui' undocumented, and given no annotations and a large 18-parameter schema, this is a notable completeness gap. The presence of an output schema does reduce the need to describe 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?
With 0% schema description coverage, the description adds essential meaning by mapping each verb to its relevant parameters, specifying ISO datetime format for calendar events, and enumerating allowed mode values for navigation. However, it omits two schema parameters, 'device' and 'skip_ui', leaving their semantics unexplained, so it does not fully compensate for the low coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose as 'One-call Android actions' and enumerates specific verbs with their parameters (set_alarm, set_timer, dial, compose_sms, add_calendar_event, share_text, navigate). This makes it distinguishable from UI-automation siblings like tap, type_text, and launch_app, 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 phrase 'One-call Android actions' implies use this tool for direct intent-style actions rather than multi-step UI interaction, and the note about dial/compose_sms only prefilling gives a specific usage constraint. However, there is no explicit guidance on when to prefer this over siblings like launch_app, open_deeplink, or other direct-action tools, and no exclusions are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tapTapB
Tap at (x, y) or at the center of a numbered mark (som_id from perceive_screen).
| Name | Required | Description | Default |
|---|---|---|---|
| x | No | ||
| y | No | ||
| device | No | ||
| som_id | 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 exist, so the description carries the behavioral burden. It adds useful context that a numbered-mark tap targets the center and that the id source is perceive_screen. However, it does not disclose whether coordinates are screen-relative, what happens when both coordinate and som_id are supplied, or side effects beyond the obvious tap 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 sentence delivers the action, both targeting modes, and the source of som_id with no filler. It is front-loaded and every word contributes meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is not complete enough for robust agent selection and invocation. It lacks sibling differentiation, device semantics, the required relationship between x/y and som_id, and any note on what happens when no parameters are provided. The presence of an output schema offsets return-value explanation, but structural selection guidance is still 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?
With 0% schema coverage, the description must explain parameters itself. It does clarify x/y as coordinates and som_id as a mark center from perceive_screen, but it omits the device parameter entirely and does not state whether x/y and som_id are mutually exclusive.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly names the action ('tap') and the two target modes: coordinates '(x, y)' or the center of a numbered mark identified by 'som_id from perceive_screen'. It is distinct from obvious siblings like double_tap and long_press, 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?
There is no guidance on when to choose tap over double_tap, long_press, swipe, or scroll variants, and no exclusions or prerequisites are given. The only implicit clue is that som_id comes from perceive_screen, but this is not developed into a usage recommendation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
type_textType TextA
Type into the focused field (tap it first, or pass som_id). submit presses Enter after.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | ||
| clear | No | ||
| device | No | ||
| som_id | No | ||
| submit | 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 of behavioral disclosure. It mentions the submit behavior and the need for focus, but fails to disclose what the clear parameter does, whether text is appended or replaces existing content, or any side effects. This is a significant gap for a tool with multiple behavioral options.
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 with no waste. It front-loads the action and the submit behavior, and the prerequisite is clearly stated. Every sentence adds value.
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 5 parameters and an output schema, but the description only addresses 2 of them (som_id and submit). It omits clear and device entirely, and doesn't mention potential edge cases like handling special characters or long text. With zero schema descriptions and no annotations, this is incomplete for safe and correct use.
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 som_id (as an alternative to tap) and submit (presses Enter), but leaves clear and device completely unexplained. The agent cannot know what clear does or how to use device without additional context. This is insufficient given the zero coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action 'Type into the focused field' with a specific resource, and differentiates from siblings like tap and press_enter by explaining the field focus mechanism (tap or som_id) and the submit behavior. It is unambiguous and concise.
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 prerequisite (tap first or pass som_id) and explains the submit flag's effect. It doesn't explicitly state when to avoid using this tool or compare to alternatives, but the context for when to use it (typing text) is implied. This is sufficient for most agents.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
validate_actionValidate ActionA
Dry-run an action: would it be allowed and does its target exist? Nothing is executed.
| Name | Required | Description | Default |
|---|---|---|---|
| x | No | ||
| y | No | ||
| uri | No | ||
| text | No | ||
| action | Yes | ||
| device | No | ||
| som_id | No | ||
| package | No | ||
| app_name | 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 burden and does well by disclosing the critical no-side-effect behavior and the two conditions checked. It stops short of explaining error behavior or prerequisites, but the output schema covers return-shape details.
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 with no filler. The essential dry-run semantics are front-loaded, and the no-execution guarantee is stated clearly and 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?
Despite the output schema, the description is incomplete for a tool with 9 parameters, no annotations, and a close sibling named verify_action. It does not explain the role of any parameter, how targets are specified, or how validation results are communicated beyond the schema.
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 gives no parameter-level guidance. It only mentions 'an action' generically, leaving the 9 parameters—especially the optional x, y, uri, text, device, som_id, package, and app_name—completely unexplained. The agent cannot determine how to construct a valid target from this description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific operation (dry-run validation), the resource (an action), and the exact checks performed: whether it is allowed and whether its target exists. The phrase 'Nothing is executed' clearly distinguishes it from execution-oriented 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 dry-run framing and 'Nothing is executed' imply this is a pre-flight check before executing an action. However, it never explicitly states when to prefer this over verify_action or other validation/execution siblings, and gives no when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
verify_actionVerify ActionC
Check an outcome against the live screen. kind: text (visible), gone (not visible), app (foreground package or name), activity, changed (the last action changed the screen).
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | text | |
| device | No | ||
| timeout | No | ||
| use_ocr | No | ||
| expected | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the transparency burden. It usefully discloses behavioral semantics such as 'gone (not visible)', 'app (foreground package or name)', and 'changed (the last action changed the screen)'. However, it does not explain matching behavior, side effects, permission needs, or failure behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loads the core purpose before giving the kind list. It contains no filler, though the single run-on sentence is dense and could be structured more clearly.
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?
Despite having an output schema, the tool context is underspecified: no annotations, no guidance for key parameters, no alternative routing, and only minimal behavioral detail. An agent cannot fully determine correct usage, especially around OCR, device targeting, and timeout 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 for all five parameters. It only adds real meaning to 'kind' and partially to 'expected' by implication. 'device', 'timeout', and 'use_ocr' receive no explanatory treatment, leaving the agent to guess their semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: verify an outcome against the live screen. It enumerates supported verification kinds (text, gone, app, activity, changed), making its purpose concrete. However, it does not distinguish itself from the similarly named sibling 'validate_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 description provides no guidance on when to use this tool versus sibling alternatives like validate_action, wait_for, or read_screen. It implies usage through the kind list, but does not state exclusions, prerequisites, or recommended scenarios beyond the terse kind definitions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
volume_downVolume DownC
Lower the music volume by steps.
| Name | Required | Description | Default |
|---|---|---|---|
| steps | No | ||
| device | 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 not disclose potential side effects (e.g., volume range limits, whether it affects media sessions), device targeting behavior, or what happens if steps exceeds available volume.
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 extremely brief (one sentence) and front-loads the key action. The backticks around 'steps' are inconsistent but minor. It is concise but lacks critical details.
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 an output schema but no annotations, and the description must cover behavioral context. It omits device semantics, possible errors, and effects on other volumes, making it incomplete for reliable use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, and the description only explains 'steps' implicitly through the verb, but 'device' is entirely unexplained. There is no guidance on how device affects the operation or the units/range for steps.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb (lower), the resource (music volume), and the controlled parameter (steps). It distinguishes from volume_up and mute by indicating it decreases volume, though it doesn't explicitly mention 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 implies usage for lowering music volume but provides no explicit context on when to use this tool versus volume_up or mute, and no mention of device selection or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
volume_upVolume UpC
Raise the music volume by steps.
| Name | Required | Description | Default |
|---|---|---|---|
| steps | No | ||
| device | 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 provided, the description carries the full burden of behavioral disclosure. It only states 'Raise the music volume' and does not mention volume limits, device selection behavior, whether it is a media vs system volume change, or any 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, short, front-loaded sentence with no filler or redundancy. It is concise, though somewhat under-specified relative to the tool's parameter set.
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 is too terse to be complete for a tool with no annotations, two parameters with no schema descriptions, and no usage guidance. It omits device selection semantics, volume boundaries, and any interaction with sibling volume controls, leaving an agent with important gaps 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?
The description adds minimal meaning for the 'steps' parameter by indicating it is the increment amount, but it offers no details on range, units, or behavior when the parameter is omitted. The 'device' parameter is entirely unexplained, and schema description coverage is 0%, so the description does not compensate for that 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 clearly states the action ('Raise') and the target resource ('the music volume'), with the increment amount parameter 'steps'. It is distinguishable from sibling tools like volume_down and mute through the direction of the action, 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?
No guidance is provided about when to use this tool versus alternatives such as volume_down, mute, or media_control. There are no conditions, exclusions, or context cues beyond the implicit meaning of the tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wait_forWait ForC
Wait until text is on screen and/or an app/activity is in the foreground (gone=true waits for it to disappear). For long waits (downloads, uploads); gestures already settle.
| Name | Required | Description | Default |
|---|---|---|---|
| gone | No | ||
| text | No | ||
| device | No | ||
| package | No | ||
| timeout | No | ||
| activity | No | ||
| interval | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full behavioral burden. It discloses the core waiting behavior and the gone flag, and mentions that gestures already settle, implying this tool is not for gesture settling. However, it fails to disclose polling mechanics, default timeout behavior, or any side effects. For a tool with no annotations, this is insufficient behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no fluff. The main purpose is front-loaded, and the usage note is concise. It earns points for brevity and clarity of structure, though it sacrifices detail for conciseness.
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 7 parameters, no annotations, and no output schema details provided, the description is incomplete. It omits key parameter semantics (timeout, interval, device, package, activity) and does not mention polling behavior or return values. While an output schema exists, it does not cover parameter usage. The description is insufficient for an agent to call this tool correctly in varied 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%, so the description must explain parameters. It only explains the gone parameter (waits for disappearance) and implicitly relates text and foreground, but it does not explain device, package, timeout, activity, or interval. The timeout and interval defaults are not mentioned, leaving agents to guess their meaning. This is a significant gap given the 7 parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool waits until text appears on screen and/or an app/activity is in the foreground, with a note about gone=true for disappearance. It specifies the resource (text, app/activity) and the action (wait). It is distinct from browser_wait, which is contextually different, though it doesn't explicitly contrast with other wait-like 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 description gives some usage context: 'For long waits (downloads, uploads); gestures already settle.' This implies it is appropriate for long-running operations and not needed for gestures, but it doesn't explicitly state when to use this tool over alternatives or list exclusions. It provides a hint but not a clear decision rule.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
watch_device_eventsWatch Device EventsB
Collect what changes over duration seconds (max 30): foreground app, keyboard,
screen content, notifications posted/removed. kinds filters: foreground, keyboard,
screen, notifications.
| Name | Required | Description | Default |
|---|---|---|---|
| kinds | No | ||
| device | No | ||
| duration | No | ||
| interval | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full burden. It reveals that the tool collects specific event kinds over a duration (max 30 seconds) and mentions a 'kinds' filter. However, it omits key behavioral details: whether the tool blocks, how events are returned (streaming, batch, pagination), what 'screen content' entails (screenshots? OCR?), and any permission or rate-limit concerns. For a monitoring tool, this is a significant transparency 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 a single, concise sentence that front-loads the main purpose and key constraints (duration, kinds). The use of backticks for literals is acceptable, though slightly cluttered. Every clause adds information; there is no filler. However, it could be more structured by separating the kinds list from the general behavior.
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?
Despite an output schema existing (not shown), the description does not explain the output format, how events are aggregated, or whether the tool is synchronous. For a tool that monitors changes over time, an agent needs to know if it will receive a list, a stream, or a summary. Without annotations and with minimal description, the agent cannot predict the tool's full behavior, making it incomplete for safe 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 explains the 'kinds' filter values (foreground, keyboard, screen, notifications) and notes that duration has a max of 30 seconds. However, it does not explain the 'device' parameter (which device? default?) or 'interval' (polling frequency? meaning?). Thus it partially compensates for the schema gap but leaves two parameters underdocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: collecting changes over a duration, listing the specific event kinds (foreground app, keyboard, screen content, notifications). It uses an active verb 'collect' and specifies the resource (device events). It implicitly distinguishes from siblings like 'get_screenshot' or 'read_screen' which are point-in-time reads, whereas this is a temporal monitor.
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 for monitoring changes over time but does not explicitly contrast with alternatives or state when to prefer it over multiple snapshots. No exclusions are given, but the context of a monitoring tool is clear. A more explicit comparison, e.g., 'use this to track changes instead of repeatedly calling read_screen', would improve this.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
web_searchWeb SearchA
Search the web (title, url, snippet). Phrase it like 'how to in android'. Results are data to plan from; the screen overrules them.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | 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 disclosure burden. The 'results are data to plan from; the screen overrules them' caveat is a non-obvious and useful disclosure about result reliability. It does not mention network/error behavior, but the core epistemic limitation is addressed.
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 compact and front-loaded: main action first, then query guidance, then a one-line behavioral caveat. Every sentence earns its place 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?
Given the simple 2-parameter schema and output schema, the description covers result format, query style, and how much to trust the results. It is nearly complete, but a brief note on what limit controls would remove the last ambiguity.
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 query phrasing guidance partially compensates for the missing schema property descriptions. However, with schema description coverage at 0%, the optional limit parameter is left entirely to inference. The description adds meaning for query but not for limit.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource ('Search the web') and lists the returned fields (title, url, snippet). It is clear and distinct from many sibling tools, but it does not explicitly differentiate itself from search-adjacent tools like browser_find.
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 concrete query-shaping advice ('how to <task> in <app> android') and a context cue that results are for planning while the live screen takes precedence. This frames when to rely on results, though it does not explicitly name alternative tools or exclusion conditions.
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.
68 tool updates
v0.1.0- First observed
browser_act - First observed
browser_close - First observed
browser_extract - First observed
browser_find - First observed
browser_handoff - First observed
browser_open - First observed
browser_read - First observed
browser_screenshot - First observed
browser_tabs - First observed
browser_upload - First observed
browser_wait - First observed
connect_device - First observed
dismiss_notification - First observed
double_tap - First observed
echo - First observed
end_session - First observed
find_files - First observed
get_device_status - First observed
get_media_sessions - First observed
get_screenshot - First observed
get_ui_tree - First observed
get_usage_guide - First observed
launch_app - First observed
list_app_deeplinks - First observed
list_apps - First observed
list_devices - First observed
long_press - First observed
lookup_app - First observed
mark_step - First observed
media_control - First observed
mute - First observed
notification_action - First observed
open_deeplink - First observed
open_file - First observed
open_recent_apps - First observed
perceive_screen - First observed
ping_device - First observed
press - First observed
press_back - First observed
press_enter - First observed
press_home - First observed
read_notifications - First observed
read_screen - First observed
record_finding - First observed
request_screen_capture_permission - First observed
resolve_contact - First observed
resolve_deeplink - First observed
run_task - First observed
screenshot - First observed
screenshot_path - First observed
scroll_down - First observed
scroll_left - First observed
scroll_right - First observed
scroll_to - First observed
scroll_up - First observed
set_plan - First observed
start_app - First observed
swipe - First observed
system_intent - First observed
tap - First observed
type_text - First observed
validate_action - First observed
verify_action - First observed
volume_down - First observed
volume_up - First observed
wait_for - First observed
watch_device_events - First observed
web_search
TDQS
Scored across 68 tools
Several tools appear to do the same thing: get_screenshot and screenshot are aliases, launch_app and start_app are aliases, and press overlaps with press_home/press_back/press_enter. Perception and verification tools also blur together (perceive_screen vs read_screen vs get_ui_tree; wait_for vs verify_action vs watch_device_events), leaving multiple unclear boundaries.
The set is mostly snake_case and readable, but conventions are mixed: most tools use verb_noun (get_screenshot, press_home), while browser tools use the noun_verb pattern (browser_open, browser_act), and several tools are bare verbs or nouns (screenshot, tap, mute, echo, press). Legacy aliases like start_app and press further weaken the pattern.
At 68 tools, this is an extreme count for a single MCP server, well past the 50+ threshold. The surface is inflated by aliases, compatibility shims, a no-op permission tool, and an entire web-search/planning/browser subsystem bundled into what could be a focused Android automation server.
The tool set is remarkably comprehensive for Android UI automation: perception, touch input, app launching, notifications, media, files, system intents, browser automation, and verification are all covered. Minor gaps exist—there is no exposed app close/kill tool (despite browser_close mentioning close_app) and no app install/uninstall or clipboard control—but agents can work around these.
Maintenance
Related MCP Connectors
Control real Android and iOS devices with LLM agents — tap, swipe, type, automate flows.
Disposable cloud Android emulators for coding agents: run an APK or PR build, tap, type, screenshot.
Melaya is a remote MCP server. It gives an assistant hands on your own Android phone and browser: it reads the screen through the accessibility tree, then taps, types and navigates inside the apps and sites you allow-list, with no per-app API. It also builds, schedules and runs agent pipelines across 6k+ connected tools. OAuth 2.1, nothing to install.
Drive real devices from your AI Coding tool. Embed a client SDK (Unity, Godot, Flutter, iOS/macOS, Android, React Native, Web) in your app, then capture screenshots, traverse the UI tree, inject taps and key events, and run automated test tasks on the physical device over a secure relay.
Related MCP Servers
- AlicenseBqualityBmaintenanceEnables AI agents to control Android devices and emulators through direct UI interaction, allowing app navigation, automated testing, and real-world task execution via ADB without computer vision or scripts.182MIT
- AlicenseAqualityFmaintenanceProvides AI agents with real-time vision and control over Android devices through screen streaming, UI automation, and fast input control via scrcpy protocol.3318MIT
- AlicenseAqualityDmaintenanceEnables AI agents to fully control Android devices through over 30 tools for app management, UI automation, and vision-based analysis via ADB. It supports multi-device management, action recording, and smart execution strategies ranging from UI hierarchy parsing to coordinate-based interaction.37120 npm1MIT
- AlicenseBqualityCmaintenanceEnables AI agents to control Android devices via ADB, supporting gestures, input, screenshots, UI analysis, and app management.198 npmISC