Skip to main content
Glama

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

adb (platform-tools)

device access

download, apt install adb, brew install android-platform-tools

uv (or Python 3.11+)

environment and dependencies

install

mobilerun CLI

installing the Portal; run_task

uv tool install mobilerun

tesseract (optional)

OCR on screens with a sparse accessibility tree

install, apt install tesseract-ocr, brew install tesseract

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:5555

Install

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 1

Register with your MCP client

Claude Code

claude mcp add --scope user mobilerun -e MOBILERUN_DEVICE=<serial> -- "$PWD/.venv/bin/python" -m mobilerun_mcp

Claude 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)

~/Library/Application Support/Claude/claude_desktop_config.json

Claude Desktop (Windows)

%APPDATA%\Claude\claude_desktop_config.json

Cursor

~/.cursor/mcp.json

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:

device / MOBILERUN_DEVICE

Target

emulator-5554, 192.168.1.20:5555, a USB serial

Android over adb (all tools)

http://host:8080 or android-http:<url>

Android through the Portal HTTP API only (MOBILERUN_ANDROID_PORTAL_TOKEN)

ios or ios:<url>

iOS via ios-portal (default http://127.0.0.1:6643)

cloud:<id> or a device UUID

Mobilerun Cloud device (MOBILERUN_CLOUD_API_KEY)

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

[device_unreachable] no device selected

adb devices, then set MOBILERUN_DEVICE=<serial>

adb devices shows unauthorized

Accept the USB debugging prompt on the device; if it does not appear, adb kill-server and reconnect

adb devices empty or offline

Replug USB; for a container or remote device run adb connect <host>:<port>

adb: command not found

Install platform-tools, or set MOBILERUN_ADB_BIN

Mobilerun Portal is not enabled as an accessibility service

Enable it under Settings > Accessibility, or rerun mobilerun setup

mobilerun setup stalls after "Found Portal APK"

Play Protect is scanning the install (redroid, emulators with Google Play): adb -s <serial> shell settings put global verifier_verify_adb_installs 0 and ... package_verifier_enable 0, then rerun

Client lists no mobilerun tools

Restart the client and check the config path. Run .venv/bin/python -m mobilerun_mcp by hand: a FastMCP banner followed by waiting is healthy, a traceback is the cause

[stale_som_id]

An action changed the screen; call perceive_screen again

Slow first launch

Cold starts take 20 to 30 s on slow devices; launch_app waits for the app

web_search error

DuckDuckGo throttled the request; retry or set BRAVE_API_KEY

Sparse text on image-heavy screens

Install tesseract for OCR, or tap by coordinates from the screenshot

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:

  1. perceive_screen returns a numbered list of everything tappable or readable (som_ids) and an annotated screenshot with the same numbers drawn on it.

  2. An action tool (tap, type_text, launch_app, ...) waits for the screen to settle, then returns a post_action_observation: foreground app, element count, keyboard state, the top labels on screen and whether the screen changed. That block is the verification step.

  3. 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 input as 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; null also means "not given".

  • device is an optional argument on every tool that touches a device (an adb serial). Leave it out to use MOBILERUN_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_screen and 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

foreground_app, package, activity

What is in front now

element_count

How many numbered elements are on screen

keyboard_visible

Whether the on-screen keyboard is up

top_labels

The first few labels on screen, in reading order

screen_changed

Whether the screen differs from before the action

loading_indicator_present

A spinner or progress bar is visible

settled, settle_ms

The screen stopped changing before the wait ended; how long that took

screen_changed_confidence

low when the screen never settled

seen_before

This screen was already seen N actions ago (going in circles?)

sensitive_foreground

A banking / payment / authenticator app is in front

hint

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

perceive_screen

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_screen

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

get_ui_tree

Compact accessibility tree (class, id, label, flags C/L/E/S/K/P, bounds).

[max_depth=8]

get_screenshot

Plain screenshot as an image.

none

screenshot

Plain screenshot.

[hide_overlay=false]

screenshot_path

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

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

Double-tap at (x, y) or a mark.

[x] [y] [som_id]

long_press

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

Long press at (x, y) (mobilerun agent action).

x y

swipe

Swipe from (x1, y1) to (x2, y2) over duration_ms / ms (default 300).

[x1] [y1] [x2] [y2] [duration_ms] [ms] [coordinate] [coordinate2] [duration]

scroll_down

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_up

Scroll the content up (reveal what is above).

[amount=0.5] [som_id]

scroll_left

Scroll the content left (reveal what is to the left).

[amount=0.5] [som_id]

scroll_right

Scroll the content right (reveal what is to the right).

[amount=0.5] [som_id]

scroll

Scroll the content in direction (up / down / left / right) by distance (fraction of the screen).

direction [distance=0.5] [ms=300] [verify=false]

scroll_to

Two modes.

[x1] [y1] [x2] [y2] [duration_ms=300] [text] [direction=down] [max_scrolls=8]

type_text

Type into the focused field (tap it first, or pass som_id).

text [clear=false] [submit=false] [som_id]

type

Type text (mobilerun).

text [index] [clear=false] [wpm] [stealth=false]

press_home

Press the Home button.

none

press_back

Press Back (also closes the keyboard without leaving the screen).

none

press_enter

Press Enter (submits search bars and forms).

none

open_recent_apps

Open the recent-apps overview.

none

key

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"}

Tool

What it does

Arguments

launch_app

Open an app by name (fuzzy) or exact package_name.

[app_name] [package_name] [force=false] [package]

start_app

Start an app by id (Android package / iOS bundle id), optionally a specific activity.

[app_id] [activity] [package]

lookup_app

Search installed apps by name or package; returns ranked candidates with scores.

[app_name] [query] [limit=5]

list_apps

List installed apps (user apps only unless include_system_apps=true).

[include_system_apps=false] [include_protected_apps=false] [system=false]

list_app_deeplinks

Deep links into an app, best first.

[package_name] [app_name] [package]

resolve_deeplink

Which app would open this URI (or intent action such as android.settings.WIFI_SETTINGS)?

uri

open_deeplink

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

system_intent

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]

resolve_contact

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

read_notifications

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_notification

Dismiss one notification (by key, or package/title) or every clearable one.

[key] [package] [title] [clear_all=false]

notification_action

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

get_media_sessions

Active media sessions (app, playback state, title/artist) and the music volume.

[include_system=false]

media_control

Control playback in any app without touching the screen: play, pause, play_pause, next, previous, stop, rewind, fast_forward.

[command] [package_name] [action]

volume_up

Raise the music volume by steps.

[steps=1]

volume_down

Lower the music volume by steps.

[steps=1]

mute

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

find_files

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_file

Open a file in its default viewer.

[uri] [path]

find_files {}
open_file {}

Waiting and checking

Tool

What it does

Arguments

wait_for

LONG waits only (downloads, uploads, processing, status changes); gestures already settle.

[condition] [timeout_ms] [poll_interval_ms] [text] [package] [activity] [gone=false] [timeout] [interval]

watch_device_events

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]

validate_action

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]

verify_action

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

web_search

Search the web for how to do something in an app ('how to in android').

query [max_results] [topic=general] [limit=5]

set_plan

Start a plan checklist.

steps [goal] [deliverable] [target_count=0] [search_query]

mark_step

Update a plan step: pending / in_progress / done / skipped / failed.

index status [note]

record_finding

Record one item you found.

item quote

end_session

Mark the end of the task (the server keeps listening; the next call starts fresh).

[reason=agent-end] [outcome=success] [goal_type] [summary]

get_usage_guide

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

browser_open

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]

browser_tabs

Several pages at once.

[action=list] [url] [index] [session=scratch]

browser_close

Close a browser session and free it (the page is blanked); close_app also stops the app.

[session=scratch] [close_app=false]

browser_screenshot

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]

browser_read

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]

browser_find

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]

browser_wait

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]

browser_extract

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]

browser_act

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]

browser_handoff

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]

browser_upload

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

ui

Raw UI snapshot (a11y_tree, phone_state, device_context, ...), as Device.ui().

[filter=true]

ui_json

The UI snapshot serialized as JSON text.

[filter=true] [indent]

ui_with_recovery

UI snapshot that retries past a dead or empty accessibility tree.

[filter=true]

capabilities

Backend, platform and the actions this device supports.

none

supports

Whether this device supports a Device action (e.g.

action

screen_size

[width, height] in pixels.

none

current_app_id

Package / bundle id of the foreground app.

none

time

The device clock.

none

find_nodes

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]

find_nodes_on_screen

Like find_nodes, limited to nodes inside the visible screen.

[text] [desc] [resource_id] [class_name] [text_contains] [desc_contains] [any_contains] [tree]

tap_text

Tap the first on-screen node whose text/description contains text.

text

tap_node

Tap the center of a node returned by find_nodes / find_nodes_on_screen.

node [stealth=true]

tap_and_wait

Tap a text (or node) and wait until the UI has been idle for idle seconds.

target [idle=2.0]

scroll_until

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_input

Clear the focused text field.

none

assert_on

Fail unless app_id is in the foreground.

app_id

assert_text_visible

Fail unless text becomes visible on screen within timeout seconds.

text [timeout=5.0]

wait_for_app

Wait until app_id is in the foreground.

app_id [timeout=10.0] [poll=0.5]

wait_for_idle

Wait until the UI stops changing.

[timeout=5.0] [poll=0.5]

wait_for_screen_change

Wait until the UI differs from now.

[timeout=10.0] [poll=0.5]

wait_for_text

Wait until a node containing text exists (off-screen nodes count).

text [timeout=10.0] [poll=0.5]

wait_for_nodes

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]

open_and_settle

Start an app and wait until it is in front and idle.

app_id [timeout=15.0] [idle=3.0]

stop_app

Force-stop an app; clear_data also wipes its data.

app_id [clear_data=false]

install_app

Install an APK (host path) on the device.

path [replace=false] [grant_permissions=true]

uninstall_app

Uninstall an app.

app_id

grant_permission

Grant a runtime permission (android.permission.*) to an app.

package permission

open_deep_link

Dispatch a deep link / intent (default action VIEW), optionally pinned to a package.

deep_link [package_name] [action]

execute_script

Run JavaScript in the foreground browser page and return its JSON result.

js

get_clipboard

The clipboard's text (Android needs the Mobilerun Keyboard as the active IME).

none

set_clipboard

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

get_state

The screen as the mobilerun agent sees it: phone state plus numbered UI elements ('index.

none

click

Click the get_state element with this index (its center, avoiding views drawn on top).

index

click_at

Click at screen position (x, y).

x y

click_area

Click the center of the area (x1, y1, x2, y2).

x1 y1 x2 y2

system_button

Press a system button: back, home or enter.

button

wait

Wait for duration seconds (max 60).

[duration=1.0]

open_app

Open an app by name or package (mobilerun agent action).

text

complete

Finish the task (mobilerun agent action): success flag plus the result or the reason for failure.

success message

type_secret

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

run_task

Hand a natural-language goal to the Mobilerun agent.

task [deviceId] [llmModel] [maxSteps] [vision] [reasoning=false] [stealth] [outputSchema] [apps] [credentials] [files] [wait=true] [steps]

get_task

A task's summary, status or trajectory (view).

taskId [view=summary] [offset] [limit]

list_tasks

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_task

Stop a running task.

taskId

get_task_media

A screenshot (or ui_state) the task recorded; index picks the step (default latest).

taskId [kind=screenshot] [index]

send_task_message

Send a message to a running cloud task (e.g.

taskId message

macro_list

Recorded trajectories (mobilerun macro list); defaults to this server's task folder.

[directory]

macro_replay

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

get_device

Fetch one device by id (a Mobilerun Cloud id, or a local device: adb serial, ios...).

deviceId

get_device_screenshot

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

get_device_ui_state

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 xy, flags).

deviceId [contains] [resourceId] [includeAll] [offset]

list_apps_on_device

List apps installed on a device (package_name, label, version_name, version_code, is_system_app).

deviceId [includeSystemApps] [includeProtectedApps]

create_device

Provision a new Mobilerun Cloud device (billing is enforced by the API).

[deviceType] [name] [country]

terminate_device

Terminate a Mobilerun Cloud device.

deviceId

manage_device

Device lifecycle operations.

operation [deviceId] [name]

device_action

Low-level device input.

operation deviceId [displayId] [x] [y] [startX] [startY] [endX] [endY] [duration] [stealth] [text] [clear] [errorRate] [wpm] [key] [action]

manage_device_apps

Mutate apps on a device.

operation deviceId [packageName] [bundleId] [activity] [includeSystemPackages] [includeProtectedPackages]

manage_device_files

Device filesystem access.

operation deviceId path [contentBase64] [fileName] [contentType]

configure_device

Read/write device settings.

operation deviceId [locale] [restart] [timezone] [latitude] [longitude] [visible] [proxyName] [smartIp] [socks5Host] [socks5Port] [socks5User] [socks5Password]

manage_esim

eSIM subscription management (Mobilerun Cloud devices).

operation deviceId [enable] [smDpAddr] [confirmationCode] [matchingId] [subId]

list_credentials

List saved credentials (metadata only; values never leave credentials storage).

[packageName]

list_credential_packages

List app packages that have any credential configured.

none

manage_credentials

Write path for the credentials vault.

operation [packageName] [credentialName] [fieldType] [value] [fields]

webhooks

Manage outbound webhooks and inspect deliveries.

operation [endpointId] [deliveryId] [url] [eventTypes] [description] [state] [status] [page] [pageSize] [since]

proxies

Manage device-bound proxy configs (socks5 or wireguard).

operation [proxyId] [protocol] [name] [host] [port] [user] [password] [config] [lookupUser] [lookupPassword]

connect

droidrun-connect residential SOCKS5 proxies and their users (distinct from the device-bound proxies tool).

operation [proxyId] [userId] [country] [type] [page] [pageSize] [status] [protocol] [provider] [dstHost] [dstPort] [sessionId] [startedAfter] [startedBefore] [endedAfter] [endedBefore] [order] [orderBy]

apps

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]

platform_catalog

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_workflow_resources

List one kind of workflow resource.

resource [service] [search] [activation] [eventType] [enabled] [triggerId] [flowId] [status] [page] [pageSize] [limit]

get_workflow_resource

Fetch one workflow resource by id (full config/params).

resource id

create_action

Create an action from a catalog entry.

catalogEntryId name [description] [isAsync] [params]

create_trigger

Create a trigger.

name activation [eventType] [scheduleRule] [customPayloadSchema] [timezone] [description] [conditions]

create_flow

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]

manage_flow

Flow lifecycle beyond create_flow.

operation [flowId] [name] [deviceIds] [actionId] [position] [continueOnError] [nameOverride] [overrides] [parentFlowActionId] [children] [flowActionId] [actions] [triggerId] [from] [to]

workflow_events

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

get_device_status

Battery, screen power, foreground app, size, storage, network addresses, volume.

none

list_devices

Devices you can control.

[scope=local] [state] [type] [name] [country] [page] [pageSize] [filters]

ping_device

Is the device reachable?

none

connect_device

(Re)connect adb and the Portal for a device; use after the network path came back.

none

disconnect_device

Disconnect a TCP/IP adb device (adb disconnect host:port) and drop its session.

none

setup_portal

Install and enable the Mobilerun Portal on the device (mobilerun setup); path installs a specific Portal APK.

[path]

doctor

Health check of adb, the Portal and the device (mobilerun doctor).

none

request_screen_capture_permission

Compatibility no-op: screenshots use the Portal / adb screencap, no prompt is needed.

none

echo

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

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

aura-adb

Run an adb command against the device.

command

adb

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

MOBILERUN_DEVICE

the only attached device

Default device (see the device table above)

MOBILERUN_MCP_POLICY

off

Safety policy: off, standard, strict

MOBILERUN_MCP_SCOPES

read,write

Set to read to expose only read-only tools

MOBILERUN_MCP_ENABLE_ADB

0

Set to 1 to expose the raw adb tool

BRAVE_API_KEY

unset

web_search uses Brave when set, DuckDuckGo otherwise

TAVILY_API_KEY

unset

web_search uses Tavily (synthesized answer, AURA's provider) when set

MOBILERUN_CLOUD_API_KEY

unset

Mobilerun Cloud devices, tasks and the cloud platform tools

MOBILERUN_CREDENTIALS

config/credentials.yaml

Secrets file for type_secret (mobilerun format)

MOBILERUN_DETECTOR_MODEL

downloaded

Path to an OmniParser icon-detect .onnx

MOBILERUN_IOS_PORTAL_URL, MOBILERUN_IOS_PORTAL_TOKEN

http://127.0.0.1:6643

iOS portal for device="ios"

MOBILERUN_ANDROID_PORTAL_TOKEN

unset

Bearer token for Portal-HTTP-only Android targets

MOBILERUN_MCP_HTTP_HOST, MOBILERUN_MCP_HTTP_PORT

127.0.0.1, 4816

Address for --http

MOBILERUN_ADB_BIN, MOBILERUN_BIN

on PATH

Binary overrides

Safety policy

The policy is off by default, so an agent can sign in to accounts and use any app.

  • standard blocks banking, payment and wallet apps, authenticator apps and password managers, Luhn-valid card numbers, and fields asking for a card security code.

  • strict additionally 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_control with package_name goes 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 adb cannot fire a PendingIntent. Ongoing notifications cannot be dismissed.

  • Local run_task runs the mobilerun CLI agent; outputSchema, apps, credentials, files and stealth apply 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 tests
  • Unit tests run against real output captured from a device (tests/fixtures; regenerate with scripts/capture_fixtures.py). The JavaScript snippets are syntax-checked with node when 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 group

Relationship 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 Device runs 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.py are 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

MIT. See LICENSE and NOTICE.

Available Tools

68 tools
browser_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.

ParametersJSON Schema
NameRequiredDescriptionDefault
keyNo
refNo
textNo
clearNo
valueNo
actionYes
amountNo
deviceNo
submitNo
sessionNodefault
selectorNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

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

With no annotations, the description carries the behavioral disclosure burden 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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceNo
sessionNodefault
close_appNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose4/5

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

The description uses a specific verb-resource 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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
kindNotable
limitNo
deviceNo
sessionNodefault
selectorNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.8/5.0
Behavior2/5

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

With no annotations provided, the description carries 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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose4/5

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

The description states a specific verb ('Pull') and resource ('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.

Usage Guidelines2/5

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

There is no guidance on when to use this 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
queryYes
deviceNo
sessionNodefault

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description carries the 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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceNo
messageNo
sessionNodefault

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior3/5

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

With no annotations provided, the description carries the full behavioral burden. It 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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose5/5

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

The description states a specific verb and resource ('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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
appNo
urlNo
waitNo
deviceNo
sessionNodefault
timeoutNo
target_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior2/5

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

No annotations are provided, so the description 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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose5/5

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

The description clearly states the tool's 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.

Usage Guidelines4/5

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

The description explains when to use the tool: 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceNo
sessionNodefault
selectorNo
max_charsNo
structureNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior4/5

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

With no annotations, the description 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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose5/5

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

The description states a specific verb and resource ('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.

Usage Guidelines3/5

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).

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceNo
sessionNodefault
full_pageNo

TDQS

C2.9/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters1/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

There is no guidance on when to use this 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.2/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden 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.

Conciseness3/5

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.

Completeness2/5

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.

Parameters1/5

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.

Purpose3/5

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.

Usage Guidelines2/5

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

There is no guidance on when to use this 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
refNo
pathYes
deviceNo
sessionNodefault
selectorNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior3/5

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

With no annotations provided, the description carries the 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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose5/5

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

The description states a specific verb and resource: '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.

Usage Guidelines3/5

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).

ParametersJSON Schema
NameRequiredDescriptionDefault
textNo
deviceNo
sessionNodefault
timeoutNo
selectorNo
url_containsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.7/5.0
Behavior2/5

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

With no annotations, the description carries the full burden 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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

There is no explicit guidance on when to use 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.3/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
keyNo
titleNo
deviceNo
packageNo
clear_allNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.7/5.0
Behavior2/5

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

With no annotations, the description carries the full burden 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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
xNo
yNo
deviceNo
som_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.7/5.0
Behavior2/5

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

With no annotations provided, the description carries the full 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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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).

ParametersJSON Schema
NameRequiredDescriptionDefault
messageNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior3/5

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

No annotations are present, so the description carries the 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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceNo
outcomeNosuccess
summaryNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations provided, the description 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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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).

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNo/sdcard
limitNo
queryNo
deviceNo
max_depthNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.3/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden 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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure, 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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceNo
include_systemNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.6/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters1/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceNo

TDQS

C2.4/5.0
Behavior2/5

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

With no annotations, the description carries the full burden 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.

Conciseness3/5

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.

Completeness1/5

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.

Parameters1/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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).

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceNo
max_depthNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.6/5.0
Behavior2/5

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

With no annotations, the description carries the full burden. It 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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters1/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
topicNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden 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.

Conciseness5/5

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.

Completeness4/5

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

For a simple tool with one optional parameter and 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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceNo
packageNo
app_nameNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

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

With no annotations, the description carries the behavioral disclosure burden, 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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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_appsList AppsA

List installed apps (user apps only unless system=true).

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceNo
systemNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full 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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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

States a specific verb and resource: "List installed 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.

Usage Guidelines2/5

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).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.3/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden 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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
xNo
yNo
deviceNo
som_idNo
duration_msNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full 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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
queryYes
deviceNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden 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.

Conciseness5/5

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

The description is a single, well-structured sentence that front-loads the 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.

Completeness3/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
noteNo
indexYes
deviceNo
statusYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden 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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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

The description implies when to use 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
actionYes
deviceNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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

The tool is simple and 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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

There is no guidance on when to use this 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
mutedNo
deviceNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior3/5

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

With no annotations, the description carries the 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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose4/5

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

The description clearly states the tool's 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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
keyNo
titleNo
actionYes
deviceNo
packageNo
reply_textNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior3/5

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

With no annotations, the description carries 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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose4/5

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

The description states a specific verb and resource: '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.

Usage Guidelines3/5

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_fileOpen FileC

Open a file in whichever app handles its type.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
deviceNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.7/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden 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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.7/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden. 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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
ocrNoauto
langNoeng
deviceNo
max_marksNo
include_imageNo

TDQS

A3.7/5.0
Behavior4/5

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

No annotations are provided, so the description carries the full burden. It 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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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).

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior3/5

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

Since no annotations are provided, the description carries 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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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).

ParametersJSON Schema
NameRequiredDescriptionDefault
buttonYes
deviceNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. It 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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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).

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3/5.0
Behavior3/5

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

With no annotations, the description carries the behavioral burden. It usefully discloses that 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.

Conciseness3/5

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.

Completeness3/5

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

For a simple, one-parameter 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.

Parameters1/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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).

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior3/5

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

With no annotations, the description carries the 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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose5/5

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

The description clearly states the action (press 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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.4/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full 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.

Conciseness3/5

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.

Completeness2/5

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

For a one-parameter tool with 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.

Parameters1/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
deviceNo
packageNo
include_ongoingNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.2/5.0
Behavior2/5

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.

Conciseness3/5

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.

Completeness2/5

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.

Parameters1/5

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.

Purpose3/5

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.

Usage Guidelines2/5

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

There is no guidance on when to use this 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior3/5

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

Since no annotations are provided, the description carries 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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
itemYes
quoteYes
deviceNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3/5.0
Behavior3/5

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

With no annotations, the description carries the full disclosure burden, and 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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior5/5

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

With no annotations provided, the description 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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
limitNo
deviceNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior3/5

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

With no annotations, the description carries the 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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
taskYes
stepsNo
deviceNo
visionNo
reasoningNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does 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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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).

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceNo

TDQS

C2/5.0
Behavior1/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It 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.

Conciseness2/5

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.

Completeness1/5

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.

Parameters1/5

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.

Purpose3/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.8/5.0
Behavior2/5

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

With no annotations provided, the description carries 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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters1/5

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.

Purpose5/5

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

The description clearly states a specific action (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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
amountNo
deviceNo
som_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior3/5

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

With no annotations, the description carries 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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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).

ParametersJSON Schema
NameRequiredDescriptionDefault
amountNo
deviceNo
som_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.6/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters1/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

There is no guidance on when to use this 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).

ParametersJSON Schema
NameRequiredDescriptionDefault
amountNo
deviceNo
som_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.3/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters1/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYes
deviceNo
directionNodown
max_scrollsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden 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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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).

ParametersJSON Schema
NameRequiredDescriptionDefault
amountNo
deviceNo
som_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.6/5.0
Behavior2/5

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

No annotations are provided, so the description 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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters1/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

There is no guidance on when to use this 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
goalNo
stepsYes
deviceNo
deliverableNo
search_queryNo
target_countNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden of 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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool 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=...)).

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceNo
packageYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior2/5

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

No annotations are provided, so the description 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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
x1Yes
x2Yes
y1Yes
y2Yes
deviceNo
durationNo
duration_msNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.8/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

There is no guidance on when to use 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
endNo
bodyNo
hourNo
modeNodrive
textNo
verbYes
labelNo
notesNo
startNo
titleNo
deviceNo
minuteNo
secondsNo
skip_uiNo
subjectNo
locationNo
destinationNo
phone_numberNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.3/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full behavioral burden. It 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.

Conciseness5/5

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.

Completeness3/5

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

The description covers the main 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.

Parameters3/5

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.

Purpose4/5

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

The description clearly states the tool's purpose 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.

Usage Guidelines3/5

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).

ParametersJSON Schema
NameRequiredDescriptionDefault
xNo
yNo
deviceNo
som_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior3/5

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

No annotations exist, so the description carries the 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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

There is no guidance on when to choose 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYes
clearNo
deviceNo
som_idNo
submitNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior2/5

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

With no annotations, the description carries the full burden 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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
xNo
yNo
uriNo
textNo
actionYes
deviceNo
som_idNo
packageNo
app_nameNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior4/5

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

With no annotations, the description carries the 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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters1/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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).

ParametersJSON Schema
NameRequiredDescriptionDefault
kindNotext
deviceNo
timeoutNo
use_ocrNo
expectedYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior3/5

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

With no annotations provided, the description carries the 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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose4/5

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

The description clearly states the tool's 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.

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
stepsNo
deviceNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.6/5.0
Behavior2/5

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

No annotations are provided, so the description 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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters1/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
stepsNo
deviceNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.7/5.0
Behavior2/5

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

With no annotations provided, the description carries the full 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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
goneNo
textNo
deviceNo
packageNo
timeoutNo
activityNo
intervalNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description 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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
kindsNo
deviceNo
durationNo
intervalNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.3/5.0
Behavior2/5

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

No annotations are provided, so the description 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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose5/5

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

The description clearly states the tool's 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.

Usage Guidelines3/5

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.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 68 tool updatesv0.1.0
    • First observedbrowser_act
    • First observedbrowser_close
    • First observedbrowser_extract
    • First observedbrowser_find
    • First observedbrowser_handoff
    • First observedbrowser_open
    • First observedbrowser_read
    • First observedbrowser_screenshot
    • First observedbrowser_tabs
    • First observedbrowser_upload
    • First observedbrowser_wait
    • First observedconnect_device
    • First observeddismiss_notification
    • First observeddouble_tap
    • First observedecho
    • First observedend_session
    • First observedfind_files
    • First observedget_device_status
    • First observedget_media_sessions
    • First observedget_screenshot
    • First observedget_ui_tree
    • First observedget_usage_guide
    • First observedlaunch_app
    • First observedlist_app_deeplinks
    • First observedlist_apps
    • First observedlist_devices
    • First observedlong_press
    • First observedlookup_app
    • First observedmark_step
    • First observedmedia_control
    • First observedmute
    • First observednotification_action
    • First observedopen_deeplink
    • First observedopen_file
    • First observedopen_recent_apps
    • First observedperceive_screen
    • First observedping_device
    • First observedpress
    • First observedpress_back
    • First observedpress_enter
    • First observedpress_home
    • First observedread_notifications
    • First observedread_screen
    • First observedrecord_finding
    • First observedrequest_screen_capture_permission
    • First observedresolve_contact
    • First observedresolve_deeplink
    • First observedrun_task
    • First observedscreenshot
    • First observedscreenshot_path
    • First observedscroll_down
    • First observedscroll_left
    • First observedscroll_right
    • First observedscroll_to
    • First observedscroll_up
    • First observedset_plan
    • First observedstart_app
    • First observedswipe
    • First observedsystem_intent
    • First observedtap
    • First observedtype_text
    • First observedvalidate_action
    • First observedverify_action
    • First observedvolume_down
    • First observedvolume_up
    • First observedwait_for
    • First observedwatch_device_events
    • First observedweb_search

TDQS

C2.6/5.0

Scored across 68 tools

Disambiguation2/5

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.

Naming Consistency3/5

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.

Tool Count1/5

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.

Completeness4/5

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

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    B
    maintenance
    Enables AI agents to control Android devices and emulators through direct UI interaction, allowing app navigation, automated testing, and real-world task execution via ADB without computer vision or scripts.
    18
    2
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    Enables 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.
    37
    120 npm
    1
    MIT