Skip to main content
Glama

mobile-cli-allinone

由 xue-ding-e 维护的移动设备自动化工具。以 CLI 的 run / eval 为主要脚本入口,提供原生界面操作、Android WebView CDP 调试和 JSON 流程重放;另提供 MCP 服务供支持 MCP 的客户端使用。

仓库已从 mobile-mcp-allinone 更名为 mobile-cli-allinone,多平台源码与线性历史已推送到本仓库;以下链接和克隆示例使用当前名称。npm 包名 @xue-ding-e/mobile-mcp-allinone、MCP registry ID io.github.xue-ding-e/mobile-mcp-allinone 和 mcp-server-mobile 命令暂保持兼容,不表示发布了新包。

不同平台有不同的驱动和能力,不能把 Android 命令直接套到其他平台。下表描述当前源码接入情况,不代表已在所有系统、设备和版本上完成真机验收。

平台支持与边界

目标

CLI

MCP

所需驱动与限制

Android 真机 / 模拟器

已接入原生操作、脚本、流程、WebView

已接入

ADB;设备须在线并授权。WebView 需应用开启调试

HarmonyOS / OpenHarmony HDC 目标

已接入原生操作、脚本、原生流程

已接入设备发现、原生操作和原生流程

HDC、设备调试授权以及设备侧 UITest / bm / aa 等命令;不是 Android ADB

iOS 真机

已接入原生操作、脚本、原生流程(--platform ios)

已接入

go-ios、设备信任/开发配置、WebDriverAgent(WDA);iOS 17+ 还需 tunnel

iOS Simulator

已接入 Simctl / WDA(--platform ios-simulator);CLI 截图直接使用 Simctl

已接入 mobilecli / agent

macOS / Xcode / 已启动的模拟器;CLI 与 MCP 驱动不同,不能在 Windows / Linux 本机运行 simctl

  • Android 专属:wv-*、脚本 wv、WebView 流程和 CLI 录屏。没有 iOS Safari / WKWebView 或 HarmonyOS WebView CDP 接入。

  • HarmonyOS 支持控件读取、点击/双击/长按/滑动、文字输入、截图、应用启动/停止、签名 HAP 安装/卸载、文件传输与电源操作。长按时长由 UITest 决定,不支持自定义 duration;url、设置方向、录屏尚不支持。读取方向根据截图尺寸判断。

  • HDC install 仅接受 .hap,不会把 APK 当 HAP 安装。卓易通等兼容环境里的 APK 导入和手机端安装需要单独处理。

  • 默认 iOS 真机 go-ios 路径的 WDA 使用本机 localhost:8100,iOS 17+ tunnel 检查使用 60105。操作前必须确认该端口对应选定设备。CLI 模拟器不使用该共享端口,UI 控制必须提供独占 Runner 的显式绑定。

  • CLI 模拟器的 install / launch / shot 不需要 WDA。shot 从显式 simulator UUID 写入本次独占的临时 PNG,读取并校验头部和尺寸后清理;它不依赖部分 simctl 版本行为不一致的 - stdout 输出,不选择 booted 默认设备,也不会启动或查询共享 WDA。尺寸/元素读取与点击等 UI 控制需要 --simulator-wda-config;缺失或身份不符时直接失败。Windows 应通过 SSH 在 Mac 上运行 CLI,工具没有内置远程 simctl 传输。

  • MCP 的设备发现隔离不同驱动的失败;Android / HarmonyOS / iOS 真机的原生操作不要求先安装模拟器用的 mobilecli。MCP 录屏和崩溃报告仍使用 mobilecli,HarmonyOS 不支持这些工具。

  • CLI iOS 不支持 connect、wake、power-state、keep-awake、文件传输和录屏。WDA 按键仅支持 HOME、VOLUME_UP、VOLUME_DOWN、ENTER,不能照搬 Android 的 BACK。CLI 与 MCP 的模拟器驱动分别为 Simctl / WDA 与 mobilecli / agent。

Related MCP server: Mobile Testing AI Agent MCP Server

从源码安装

使用 Node.js 22 或更高版本以及 npm。各平台工具需要另行准备,不随此仓库自动完成设备授权、WDA 签名或 Xcode 配置。

git clone https://github.com/xue-ding-e/mobile-cli-allinone.git
cd mobile-cli-allinone
npm ci
npm run build
node lib/cli.js help

以上是本仓库源码安装方式,不假定 npm 包已经发布。修改 TypeScript 源码后重新执行 npm run build。

构建后也可把本地 checkout 安装到一个独立目录,使用新 CLI 别名(不修改全局安装):

npm install --prefix /path/to/local-install --ignore-scripts /path/to/mobile-cli-allinone
/path/to/local-install/node_modules/.bin/mobile-cli-allinone help

将路径替换成实际绝对路径;Windows 使用对应的 .cmd 垫片。此别名映射到 lib/cli.js;旧 mcp-server-mobile 仍映射到 lib/index.js。本地安装示例不表示新版已发布到 npm。

所有主机均可用 node lib/cli.js 启动 CLI。在 Windows PowerShell 中也可使用仓库垫片:

.\mobile.ps1 help
.\mobile.ps1 devices --all

CLI 的目标平台由驱动决定;能启动 Node.js 不代表主机具备目标平台的完整工具链。

平台前置条件

  • Android:安装 Android SDK Platform Tools,让 adb 可用,或设置 ANDROID_HOME 指向 SDK。手机开启调试并确认主机授权;模拟器先启动并确保出现在 adb devices 中。无线连接需要设备端预先配置,CLI 不代替配对和授权。

  • HarmonyOS:安装适合主机的 HDC。可通过 MOBILE_HDC_PATH 指定可执行文件完整路径;未设置时,Windows 会尝试 HiSuite 的固定路径,随后回退到 PATH 中的 hdc。设备需支持相应 UITest 等命令并已授权。USB 标识和无线 host:port 是独立连接目标。

  • iOS 真机:准备 go-ios,命令默认名为 ios,或以 GO_IOS_PATH 指定路径。先完成设备信任及所需开发配置、WDA 安装/运行、到本机 8100 的端口转发;iOS 17+ 还需运行 tunnel。程序检查这些前置状态,不会自动替你签名或部署 WDA。不同主机与 iOS 版本组合需自行验收。

  • iOS Simulator:需要 macOS、Xcode 和已启动(Booted)的模拟器。CLI 用 xcrun simctl 发现和管理应用,UI 操作还需预先建立并绑定独占 WDA Runner;CLI 不会启动、安装或签名 Runner。MCP 则使用 mobilewright 依赖提供的 mobilecli,可用 MOBILECLI_PATH 指定二进制路径,首次原生操作可能检测并安装模拟器 agent。不要将 mobilecli 的跨平台二进制名称理解为 Windows 可运行 iOS Simulator。

CLI 快速开始

示例中的设备 ID 和包名必须替换为自己的目标。建议先查看设备和界面,再执行会改变应用状态的命令。

node lib/cli.js devices --platform android --all
node lib/cli.js use ANDROID_SERIAL --platform android --pkg com.example.app
node lib/cli.js state
node lib/cli.js screen-size
node lib/cli.js elements
node lib/cli.js shot ./screen.png

capabilities --platform android|harmony|ios|ios-simulator 可查看各平台静态能力和依赖(命令中选择一个平台值);它不检查驱动安装、WDA 状态或设备是否就绪。

use 将默认设备、平台和包名写入当前用户的 ~/.mobile-cli/state.json。命令行 --device / --platform / --pkg 可以覆盖默认值;自动选取唯一在线设备也会更新状态。多设备操作应显式传参,运行前用 state 核对旧状态。

HarmonyOS 示例:

node lib/cli.js devices --platform harmony --all
node lib/cli.js use HDC_TARGET --platform harmony
node lib/cli.js elements
node lib/cli.js launch com.example.app --ability EntryAbility
node lib/cli.js tap-text "设置"
node lib/cli.js shot ./harmony-screen.png

已配置无线调试的 HDC 目标可使用 connect HOST:PORT --platform harmony。keep-awake 300、keep-awake restore 以及 file-send LOCAL REMOTE / file-recv REMOTE LOCAL 是 HarmonyOS 专用扩展;wake / power-state 同时支持 Android 和 HarmonyOS。文件发送和电源设置会修改目标设备。

iOS 真机示例(已完成 go-ios / WDA / tunnel 前置配置):

node lib/cli.js capabilities --platform ios
node lib/cli.js devices --platform ios
node lib/cli.js use IOS_UDID --platform ios
node lib/cli.js elements
node lib/cli.js shot ./ios-screen.png

iOS Simulator 示例(仅 macOS,已启动模拟器):

node lib/cli.js devices --platform ios-simulator --all
node lib/cli.js launch com.example.app --platform ios-simulator --device SIMULATOR_UUID
node lib/cli.js shot /absolute/screen.png --platform ios-simulator --device SIMULATOR_UUID
node lib/cli.js wda-status --platform ios-simulator --device SIMULATOR_UUID --simulator-wda-config /private/simulator-wda.json
node lib/cli.js eval "return await robot.getScreenSize()" --platform ios-simulator --device SIMULATOR_UUID --simulator-wda-config /private/simulator-wda.json

--all 可显示未启动的模拟器,不代表它可以立即执行操作。CLI 不会自动创建/启动模拟器,也不会创建 iOS 无线连接或部署 WDA。模拟器安装使用适配模拟器的 .app,也支持顶层包含 .app 的 .zip;不能将真机 IPA 当作模拟器应用通用安装。

Simulator 的独占 WDA 绑定

--simulator-wda-config 只接受显式 --platform ios-simulator --device <完整 UUID>。私有 JSON 的 schemaVersion 为 1,simulatorUuid 必须与命令一致,wdaOrigin 为独占数字 loopback HTTP origin,须显式端口且不能使用共享 8100。配置不写入全局默认,也不适用于物理 iOS 的 --ios-config。

runner 必填 bundleId(以 .xctrunner 结尾)、pid、processStart(实际 ps -p PID -o lstart=)、executableSha256、wdaProductBundleIdentifier 和 codeFiles。每项代码包含安装 bundle 内的 relativePath 与小写 sha256;应从本次独占构建枚举完整 Mach-O 清单并安装回读。至少包含 XCTest 主执行文件和 WebDriverAgentLib.framework/WebDriverAgentLib,两项还须提供实际加载的绝对 mappedPath。XCTest 可从该构建的 DerivedData 加载 framework,所以同时核对安装和实际映射的字节。不要把配置、运行路径或设备身份提交到公共源码。

每条 WDA HTTP 请求(包括 session 清理)前,CLI 使用 lsof 核对端口唯一 listener、ps 核对 PID/启动时间/执行文件,并把进程关联到指定 UUID 的 simctl get_app_container;随后核对安装代码与实际加载代码哈希。HTTP /status 的 ready、build product 与 /wda/device/info 的 isSimulator 仅作补充检查;device info 的 vendor UUID 不能当作 simulator UUID。任一检查失败均拒绝请求,不接管新 Runner、不自动恢复。

Simulator wda-status 包含上述本机取证以及 /status、/wda/device/info 两个只读请求;run/eval 的 robot.captureScreen() 在自己创建的一个 session 内读取尺寸与元素,PNG 仍走显式 UUID 的原生截图。坐标使用 WDA points,截图尺寸为像素。检查与 HTTP 之间不是原子绑定;静态回执、进程存活或一次 ready 均不能代替实际 UI 验证。

可选 iOS Wi-Fi CLI 配置

--ios-config 选择已经完成信任配对的 Wi-Fi 入口;不传该参数时仍保留原 go-ios / WDA 路径。该配置只用于 CLI,不改变 MCP 和 Simulator 的驱动。工具不会自动配对、生成配对记录、启动 WDA、构建或签名应用。

准备 Python 3.11 或更新版本,在所选 Python 环境安装可选依赖:

python -m pip install -r scripts/ios-wifi-bridge/requirements.txt

该入口固定依赖 pymobiledevice3 11.32.0,其许可证为 GPL-3.0-or-later;它是使用者单独安装的可选运行依赖,不属于本仓库 Apache-2.0 许可证覆盖的第三方代码。所附 Python 文件是调用该依赖的自研适配,不包含该依赖源码或设备配对数据。默认 go-ios 路径不要求安装此 Python 依赖。

在仓库外创建私有 JSON,例如 private-ios.json;下列全部为占位符,必须替换成自己的已配对设备和已运行 WDA 的地址:

{
  "device": {
    "udid": "YOUR_PAIRED_IPHONE_UDID",
    "wdaUrl": "http://YOUR_WDA_HOST:8100",
    "lastWifiHost": "YOUR_PAIRED_IPHONE_HOST"
  },
  "pythonRelative": "./YOUR_PYTHON_RUNTIME/python.exe"
}

pythonRelative 相对于该 JSON 所在目录解析;macOS/Linux 可使用自己的 Python 可执行文件路径。配对记录由使用者预先保存在所选运行用户的 ~/.pymobiledevice3/,不得提交 JSON、配对记录或 Python 环境。命令优先复用 JSON 同目录完整的 identity_probe.py / device.py / install_wifi.py 脚本组;缺少任一文件时统一使用仓库随附的 scripts/ios-wifi-bridge/,不混用两组脚本。脚本执行仍检查真实设备 UDID,不会退回 USB 或另一台手机。UI 前身份检查仅读取配对 TCP lockdown,不创建开发者隧道、RSD 或 XCTest 服务;应用启动和安装仍通过相应受控开发接口完成。

每条设备命令都显式传相同的 --device 和 --ios-config:

node lib/cli.js devices --platform ios --device YOUR_PAIRED_IPHONE_UDID --ios-config /PRIVATE_PATH/private-ios.json
node lib/cli.js probe --platform ios --device YOUR_PAIRED_IPHONE_UDID --ios-config /PRIVATE_PATH/private-ios.json
node lib/cli.js wda-status --platform ios --device YOUR_PAIRED_IPHONE_UDID --ios-config /PRIVATE_PATH/private-ios.json
node lib/cli.js elements --platform ios --device YOUR_PAIRED_IPHONE_UDID --ios-config /PRIVATE_PATH/private-ios.json
node lib/cli.js shot ./ios-screen.png --platform ios --device YOUR_PAIRED_IPHONE_UDID --ios-config /PRIVATE_PATH/private-ios.json

可再传 --wda-url http://YOUR_WDA_HOST:8100 核对目标;它必须与私有 JSON 中配置的 HTTP(S) origin 完全相同,不接受另一个地址,也不接受凭据、路径、query 或 fragment。Wi-Fi 设备身份验证成功只证明认证传输可用,UI 操作还要求 WDA 就绪。

wda-status 在认证设备后仅执行一次只读 GET /status,输出实际 endpoint、HTTP 状态、原始响应(最多 64KiB,含 truncated 标记)、解析结果或错误、耗时及网络错误原因。HTTP 200 不等于就绪:当前只接受无 HTTP / WebDriver 协议错误且 value.ready === true 的响应,其余结果 ok: false 并返回失败退出码。大响应不重复输出完整 parsed JSON,错误文本同样限长。该命令不会创建 WDA session 或执行点击;连接错误不代表应用渲染或整个平台功能已验收失败。

批量读取 iOS 界面时,在 run / eval 中调用 await robot.captureScreen(),返回 {size, elements, screenshot},其中截图为 Buffer,应通过脚本的文件接口保存。三项读取使用本次创建的同一个 WDA session,按官方路由访问 source?format=json 和 screenshot,完成或失败后清理本次 session;不会接管已有 session。单独的 getScreenSize()、getElementsOnScreen()、getScreenshot() 仍可分别使用。共享 session 只约束读取的会话身份,不表示三次操作发生在同一绘制帧。

应用启动和安装示例:

node lib/cli.js launch com.example.app --platform ios --device YOUR_PAIRED_IPHONE_UDID --ios-config /PRIVATE_PATH/private-ios.json
node lib/cli.js install /PRIVATE_PATH/App.ipa --pkg com.example.app --platform ios --device YOUR_PAIRED_IPHONE_UDID --ios-config /PRIVATE_PATH/private-ios.json

launch 使用显式 bundle ID,install 必须另传 --pkg。安装前读取 IPA 中唯一主 App 的 Info.plist,核对 bundle 与版本;安装后通过真实设备 lookup 再核对相同身份和版本,不能把设备上已有的另一应用或旧版本当作本次安装成功。Wi-Fi profile 的 apps、stop、uninstall 明确不支持;应用编译、签名和 WDA 部署由外部工具完成。本节描述接口和前置条件,不表示任何原始应用页面、设备型号或 GUI 交互已经通过验收。

一次脚本完成多个步骤

run <script.js> 执行脚本文件;eval "<js>" 执行内联脚本。两者注入 robot、device、platform、sleep、flows、wv,以及平台专用的 adb / hdc。robot 的接口定义见 src/robot.ts。

node lib/cli.js eval "return await robot.getScreenSize()"
node lib/cli.js run ./inspect.js --platform android --device ANDROID_SERIAL

inspect.js 示例(脚本体可直接 await / return):

const size = await robot.getScreenSize();
const elements = await robot.getElementsOnScreen();
return { device, platform, size, elements: elements.slice(0, 10) };

脚本默认超时为 120 秒,可用 --timeout 30 调整。超时不是事务回滚,也不保证撤销已开始的设备动作。run / eval 在本机 Node.js 进程执行,不是安全沙箱;只运行你已审查、信任的脚本。

普通结果输出紧凑 JSON;help 输出文本,失败诊断输出到 stderr。截图命令将图片写入指定文件;自行编写脚本时,应显式保存二进制结果,不要依赖 JSON 输出携带图片。

原生命令与 Android WebView

常用原生命令:apps、launch、stop、install、uninstall、tap、longpress、doubletap、tap-text、swipe、key、button、shot、elements、screen-size、orientation。命令能否执行以平台支持矩阵为准;完整参数见 help 和 src/cli.ts。

WebView 只连接目标 Android 应用中已开启调试的页面,不会自动开启应用调试:

node lib/cli.js wv-pages --platform android --device ANDROID_SERIAL --pkg com.example.app
node lib/cli.js wv-outline --platform android --device ANDROID_SERIAL --pkg com.example.app
node lib/cli.js wv-style body --props color,font-size --platform android --device ANDROID_SERIAL --pkg com.example.app
node lib/cli.js wv-eval "document.title" --platform android --device ANDROID_SERIAL --pkg com.example.app

另有 wv-tap-text、wv-shot、wv-net。单命令自动连接并断开,脚本中的 wv 延迟到首次使用时连接。页面 JavaScript 受设备 WebView 引擎版本限制;老引擎可能不支持可选链等语法。网络记录、DOM、截图可能包含敏感信息。

JSON 流程重放

流程是步骤数组,原生步骤复用当前平台的 Robot。下面只记录一条说明并截图:

[
  { "op": "log", "note": "Capture current screen" },
  { "op": "screenshot", "saveTo": "./screen.png" }
]

将其保存为 inspect.json 后:

node lib/cli.js flow-run ./inspect.json --platform harmony --device HDC_TARGET
node lib/cli.js flow-list
node lib/cli.js flow-save inspect ./inspect.json

默认在失败步骤停止;--keep-going 会继续后续步骤,可能继续产生副作用,不等于回滚。支持步骤与参数见 src/flows.ts,WebView 步骤与断言仅适用于 Android。

具名流程默认存于仓库 flows/,也可通过 MOBILEMCP_FLOWS_DIR 指向个人目录。个人回放、截图和现场脚本建议放入已忽略的 ignore/;不要把私有账号、业务内容或凭据提交到公共流程。

MCP:另一种调用入口

CLI 使用 lib/cli.js;MCP 使用 lib/index.js。两者不是同一启动命令。构建后,在 MCP 客户端配置中填入本机绝对路径:

{
  "mcpServers": {
    "mobile-cli-allinone": {
      "command": "node",
      "args": ["/absolute/path/to/mobile-cli-allinone/lib/index.js"],
      "env": {
        "MOBILEMCP_DISABLE_TELEMETRY": "1"
      }
    }
  }
}

Windows 路径可写成 D:/path/to/mobile-cli-allinone/lib/index.js。默认使用 stdio。客户端可从 mobile_list_available_devices 开始,再按工具列表调用原生操作、截图、Android WebView 或流程工具;不要假定 CLI 与 MCP 的命令和驱动完全相同:MCP 没有 CLI 的 run / eval 命令,也没有独立的 HDC 文件传输、电源管理命令;原生流程可调用已支持的平台 Robot,WebView 流程仅 Android。

可选 HTTP SSE 模式:

node lib/index.js --listen localhost:3000

端点为 http://localhost:3000/mcp;这是 SSE transport,不是 Streamable HTTP。默认监听 localhost,当前实现仅允许一个活动 SSE 客户端。设置 MOBILEMCP_AUTH 后,客户端必须发送相应的 Authorization: Bearer …。未设置时没有认证;不要直接暴露到公网,也不要将 token 写进命令示例或仓库。

MCP 服务保留上游 PostHog 使用统计逻辑;设置 MOBILEMCP_DISABLE_TELEMETRY=1 可关闭,上述配置已关闭统计。

安全与验证范围

  • 仅操作你有权控制的设备。安装/卸载、输入、点击、URL、脚本、流程和测试都可能改变应用状态、发送消息或触发交易;执行前核对设备、应用和步骤。

  • 此工具不代替使用者或调用它的 agent 做授权判断。MCP 客户端应限制不受信任内容触发设备操作。

  • 不提交设备截图、调试日志、令牌、签名文件或个人流程;调试工具及端口只开放给可信主机。更多见 SECURITY.md。

  • 平台矩阵表示源码具备的接入路径。自动化测试、构建成功不等于真机验证;设备型号、OS 版本、中文输入、权限弹窗、应用兼容层、WDA 签名/tunnel 和无线连接需要在自己的环境单独验收。

开发检查:

npm run build
npm run lint
npx tsc --noEmit
npm run test:offline

test:offline 先构建,再仅运行十二个指定文件:PNG、Harmony、ADB 安装结果、原 CLI iOS 路由、WDA 错误处理、MCP 平台路由,以及 Wi-Fi CLI 身份约束、WDA 诊断、本地子进程集成、纯 lockdown 身份、IPA 安装身份与模拟器原生截图测试。它们不发现或操作真实设备;HTTP 仅连接 loopback。子进程集成测试使用本机 Python 运行合成脚本,没有 Python 时明确跳过该项。不要在不了解测试内容时直接运行 npm test:默认套件包含 Android / iOS / 模拟器测试,可能读取或改变已连接设备,部分测试在收集阶段就调用平台工具。

问题反馈:Issues。请附提交版本、主机系统、目标平台及脱敏复现信息,区分“源码已实现”“模拟测试通过”和“真机已验证”。

许可与来源

本项目基于 Mobile Next 的 mobile-mcp 开发,保留 Apache-2.0 许可证和适用的原始版权声明,详见 LICENSE。CHANGELOG.md 中早于本分支的版本记录属于上游历史。Android DeviceKit、mobilewright 等依赖保留各自的名称和来源。

Available Tools

35 tools
list_flowsList FlowsA
Read-only

列出所有已存的具名 flow。

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.8/5.0
Behavior3/5

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

The readOnlyHint annotation already establishes the non-mutating nature, and the description aligns with that. The description adds some scope context, 'saved' and 'named', but does not disclose additional behavioral details like return format or pagination. No contradiction with annotations.

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

Conciseness5/5

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

The description is a single short sentence with no filler. It front-loads the action and the scope, every word earning its place.

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

Completeness4/5

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

For a zero-parameter, read-only listing tool the description is mostly sufficient. However, since there is no output schema, it could be slightly more complete by stating what the returned list contains (e.g., flow names vs. full flow objects).

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-level meaning the description needs to add. The baseline of 4 applies because no parameter explanation is required.

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

Purpose5/5

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

The description uses a specific verb ('list') and resource ('all saved named flows'), making the operation unambiguous. It is also clearly distinct from sibling tools like run_flow and save_flow.

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 explicit guidance about when to use this tool versus alternatives such as run_flow or save_flow. An agent must infer usage from the tool name and sibling list, which is not enough to count as real guidance.

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

mobile_click_on_screen_at_coordinatesClick ScreenA
Destructive

Click on the screen at given x,y coordinates. If clicking on an element, use the list_elements_on_screen tool to find the coordinates.

ParametersJSON Schema
NameRequiredDescriptionDefault
xYesThe x coordinate to click on the screen, in pixels
yYesThe y coordinate to click on the screen, in pixels
deviceYesThe device identifier to use. Use mobile_list_available_devices to find which devices are available to you.

TDQS

A4/5.0
Behavior3/5

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

The destructiveHint annotation already flags this as potentially destructive, and the description doesn't add further behavioral details beyond the click action. It provides a useful workflow hint but not additional side-effect information, which is acceptable given the simple nature of the tool.

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

Conciseness5/5

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

The description is two short sentences with the action first. No redundant phrases, every sentence serves a purpose.

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 simple, all params are documented, and the annotation covers the destructive nature. The description gives enough context for using coordinates and when to use list_elements. Minor lack of success/failure details is acceptable without an output schema.

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

Parameters3/5

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

Schema coverage is 100%, with descriptions for x, y, and device. The description doesn't add new semantics beyond the schema, but the guidance about element coordinates complements the parameter meaning. Baseline 3 is appropriate.

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

Purpose5/5

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

The description clearly identifies the action as clicking at x,y coordinates with a specific verb and resource. It differentiates from sibling tools like double_tap or long_press by focusing on a single coordinate-based click. It also mentions an alternative for element-based clicking.

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

Usage Guidelines4/5

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

It explicitly states that for clicking on an element, one should first use list_elements_on_screen to find coordinates, providing direct guidance on when to use this tool versus the alternative. It doesn't explicitly exclude other gesture tools, but the guidance 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.

mobile_double_tap_on_screenDouble Tap ScreenA
Destructive

Double-tap on the screen at given x,y coordinates.

ParametersJSON Schema
NameRequiredDescriptionDefault
xYesThe x coordinate to double-tap, in pixels
yYesThe y coordinate to double-tap, in pixels
deviceYesThe device identifier to use. Use mobile_list_available_devices to find which devices are available to you.

TDQS

A3.6/5.0
Behavior2/5

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

The description offers no behavioral context beyond the action itself. While the destructiveHint annotation indicates potential destructive effects, the description does not elaborate on consequences, such as triggering app actions or changing UI state, which would be valuable for an agent deciding to invoke this tool.

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

Conciseness5/5

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

The description is a single, concise sentence that directly states the action and inputs. There is no unnecessary information, and it is front-loaded with the core purpose.

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 action tool with three well-documented parameters and no output schema, the description is sufficient to convey its purpose and usage. However, it could be slightly enhanced by noting typical return behavior or potential side effects, but the current level is adequate.

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

Parameters3/5

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

The input schema provides full descriptions for all three parameters (x, y, device), including units and a hint for finding devices. The description adds no additional parameter semantics, so the baseline score of 3 is appropriate given complete schema coverage.

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

Purpose5/5

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

The description clearly identifies the action (double-tap) and target (screen), and specifies the input as x,y coordinates. This distinguishes it from sibling tools like click, long press, and swipe, which involve different gestures.

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 a double-tap gesture is needed, but it does not explicitly state when to prefer this over alternatives such as single tap or long press. No exclusion or alternative guidance is provided beyond the tool name and description.

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

mobile_get_crashGet Crash ReportA
Read-only

Get the full content of a crash report by its ID. Use mobile_list_crashes to find available crash IDs.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe crash report ID to retrieve
deviceYesThe device identifier to use. Use mobile_list_available_devices to find which devices are available to you.

TDQS

A4.2/5.0
Behavior4/5

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

The readOnlyHint=true annotation already signals a safe read operation. The description adds that it retrieves the full crash report content, clarifying the scope beyond just retrieving an ID. No additional behavioral disclosures are necessary for this straightforward read.

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 concise sentences, front-loaded with the primary purpose. The second sentence adds essential guidance on finding IDs. No wasted words or redundant information.

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

Completeness4/5

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

For a simple get tool with complete schema and annotations, the description covers the prerequisite (mobile_list_crashes) and indicates the output type ('full content'). It does not describe return format, but given the simplicity and lack of an output schema, this is acceptable.

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?

Both parameters are fully described in the input schema, which already explains their purpose. The description's phrase 'by its ID' reinforces the id parameter but does not introduce new semantic information beyond what the schema provides.

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 ('Get the full content of a crash report') and the resource ('by its ID'). It distinguishes from sibling tools like mobile_list_crashes by emphasizing 'full content' retrieval.

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

Usage Guidelines4/5

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

Explicitly directs users to mobile_list_crashes to find available crash IDs, providing a clear prerequisite workflow. The schema also references mobile_list_available_devices for device selection, but the description does not explicitly exclude alternative tools.

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

mobile_get_orientationGet OrientationA
Read-only

Get the current screen orientation of the device

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceYesThe device identifier to use. Use mobile_list_available_devices to find which devices are available to you.

TDQS

A3.6/5.0
Behavior3/5

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

The readOnlyHint annotation already declares this is a safe read operation. The description adds minimal context beyond the annotation—merely specifying 'current' orientation. This is not misleading, but it does not disclose any additional behavioral traits such as return format or potential platform limitations.

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 immediately states the tool's function. Every word contributes to clarity, with no unnecessary 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 getter with one parameter, the description is sufficient. The lack of an output schema is somewhat mitigated by the clarity of 'screen orientation,' though the exact return format is not specified. Given the low complexity, this is not a significant 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 only parameter 'device' has a full description in the schema, including a pointer to mobile_list_available_devices. Since schema coverage is 100%, the description does not need to add parameter details. Baseline of 3 applies.

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

Purpose5/5

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

The description 'Get the current screen orientation of the device' uses a specific verb (get) and identifies the exact resource (screen orientation), clearly distinguishing it from the sibling tool mobile_set_orientation. It is unambiguous and 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?

The description provides no guidance on when to use this tool versus alternatives. It does not mention that it is the read counterpart to mobile_set_orientation, nor does it reference sibling tools like mobile_get_screen_size. No explicit or implied usage context is given.

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

mobile_get_screen_sizeGet Screen SizeA
Read-only

Get the screen size of the mobile device in pixels

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceYesThe device identifier to use. Use mobile_list_available_devices to find which devices are available to you.

TDQS

A3.5/5.0
Behavior3/5

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

The annotation readOnlyHint=true already signals a safe read operation, and the description's 'Get' is consistent with that. The description adds minor value by specifying the unit 'pixels' and the device scope, but does not disclose the return format or any other behavioral 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?

A single, clear sentence delivers the essential information with no filler. The action and subject are front-loaded, making it immediately 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 is simple, but since there is no output schema, the description leaves ambiguity about the exact return structure (e.g., width x height vs. diagonal). The phrase 'in pixels' offers the unit but not the shape of the result, which is a notable 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 input schema fully documents the single 'device' parameter, including guidance to use mobile_list_available_devices. The description itself does not add parameter semantics beyond the schema, so the baseline score of 3 is appropriate.

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

Purpose5/5

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

The description clearly states the verb 'Get' and the resource 'screen size' with an explicit unit ('in pixels'). This sufficiently distinguishes it from sibling tools like mobile_get_orientation, which retrieves a different device property.

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. The only contextual hint appears in the schema's parameter description (referencing mobile_list_available_devices), which helps with parameter selection but not tool selection.

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

mobile_install_appInstall AppB
Destructive

Install an app on mobile device

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesThe path to the app file to install. For iOS simulators, provide a .zip file or a .app directory. For Android provide an .apk file. For iOS real devices provide an .ipa file
deviceYesThe device identifier to use. Use mobile_list_available_devices to find which devices are available to you.

TDQS

B3.3/5.0
Behavior3/5

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

The annotations include destructiveHint: true, which already informs the agent of the destructive nature. The description adds no additional behavioral context such as potential app replacement, permissions needed, or installation failure modes. Since the annotation covers the key safety aspect, the lack of extra disclosure is acceptable, keeping the score at a baseline 3.

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, focused sentence with no redundant words. It conveys the core action without elaboration, which is the pinnacle of conciseness and structure.

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, combined with the rich schema and annotation, covers the essential information for invoking the tool. However, it does not mention installation outcome or side effects beyond the annotation's destructive hint. Since there is no output schema, a bit more context on expected results would improve completeness, but the current level is minimally sufficient.

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

Parameters3/5

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

The input schema provides full descriptions for both parameters, including file format guidance for different platforms and device discovery instructions. With 100% schema description coverage, the description has no additional need to explain parameters, aligning with the baseline of 3.

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

Purpose4/5

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

The description clearly states the verb 'Install' and the resource 'an app on a mobile device', making the primary purpose obvious. It does not explicitly differentiate from sibling tools like mobile_launch_app or mobile_uninstall_app, but the action verb itself distinguishes the operation as an installation, which is specific enough for a clear purpose.

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 such as mobile_launch_app or mobile_uninstall_app. It also doesn't mention prerequisites like device availability. The only usage hint is in the schema's device parameter description, but the tool description itself is silent on 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.

mobile_launch_appLaunch AppB
Destructive

Launch an app on mobile device. Use this to open a specific app. You can find the package name of the app by calling list_apps_on_device.

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceYesThe device identifier to use. Use mobile_list_available_devices to find which devices are available to you.
localeNoComma-separated BCP 47 locale tags to launch the app with (e.g., fr-FR,en-GB)
packageNameYesThe package name of the app to launch

TDQS

B3.4/5.0
Behavior2/5

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

Annotations mark destructiveHint as true, but the description adds no behavioral detail beyond 'launch' or 'open.' It does not explain what happens to the current app, whether the app is brought to the foreground, or why the operation is considered destructive. It provides no context beyond the annotation.

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 short sentences, front-loading the main purpose without unnecessary fluff. The package-finding hint is concise, even though the referenced tool name is incorrect.

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 schema is detailed, the description references a nonexistent tool for discovering the required packageName and provides no clarification around the destructive annotation. This leaves the agent without reliable guidance for successful invocation.

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

Parameters3/5

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

The input schema already covers all parameters with descriptions, so the baseline is 3. The only additional hint in the description is to find packageName via 'list_apps_on_device,' which is an inaccurate tool reference; it adds nothing about device or locale 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 clearly states the tool 'Launch an app on mobile device' and 'Use this to open a specific app,' giving a specific verb and resource. This distinguishes it from siblings like mobile_terminate_app, mobile_install_app, and mobile_open_url.

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 provides clear context for when to use the tool ('Use this to open a specific app'). However, it instructs calling 'list_apps_on_device' to find package names, but that tool is not in the sibling list—mobile_list_apps is the actual tool. This makes the guidance partly misleading and there are no exclusions or alternatives mentioned.

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

mobile_list_appsList AppsA
Read-only

List all the installed apps on the device

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceYesThe device identifier to use. Use mobile_list_available_devices to find which devices are available to you.

TDQS

A4/5.0
Behavior3/5

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

The description is consistent with the readOnlyHint annotation and adds the scope detail 'all installed apps'. However, it does not disclose return format, whether system apps are included, or any permission requirements. With annotations already declaring read-only, the description provides minimal additional behavioral context beyond the scope.

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 concise sentence of six words. No filler or redundancy, every word earns its place.

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

Completeness4/5

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

For a simple read-only list tool, the description combined with the schema and annotation is largely sufficient. It does not mention return format or app name specifics, but given the tool's simplicity and lack of output schema, the current description is nearly complete for selection purposes.

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

Parameters3/5

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

Schema description coverage is 100%: the device parameter is fully explained as the identifier to use, with a pointer to mobile_list_available_devices. The description does not add any parameter-specific detail beyond referencing 'the device', so it relies on the schema, matching the baseline.

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

Purpose5/5

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

The description uses the specific verb 'List' with a clear resource 'installed apps on the device'. This clearly distinguishes it from sibling tools like mobile_launch_app, mobile_install_app, and mobile_list_crashes, which target different actions or data types.

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?

While no explicit alternatives or exclusions are given, the phrase 'List all the installed apps' provides clear context for when to use this tool. The schema also points to mobile_list_available_devices for device selection, which is useful guidance even though it's not in the description itself.

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

mobile_list_available_devicesList DevicesA
Read-only

List all available devices. This includes both physical mobile devices and mobile simulators and emulators. It returns both Android and iOS devices.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true. The description adds valuable behavioral context beyond that: it lists physical devices, simulators, and emulators, and clarifies that both Android and iOS are included. It does not mention output format details, but the added scope information is meaningful for a read-only list tool.

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

Conciseness5/5

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

The description is two short sentences with the main action front-loaded ('List all available devices'). Every sentence contributes meaning, 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.

Completeness5/5

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

For a tool with no input parameters and no output schema, the description adequately covers the tool's purpose and scope. It explains what devices are returned (physical, simulator, emulator; Android, iOS), which is sufficient for an agent to select and invoke the tool correctly.

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

Parameters4/5

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

The tool has zero parameters, and schema coverage is 100% by default. The description adds no parameter-specific details because none exist, but the baseline of 4 is appropriate for a no-parameter tool, and the description clarifies the result set (available devices across platforms).

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 ('List') and resource ('available devices'), clearly distinguishing it from sibling tools related to orientation, screen recording, crashes, and apps. It also specifies the scope: physical devices, simulators, and emulators, across both Android and iOS.

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 about what the tool returns (both platforms, physical and virtual devices), effectively indicating when to use it. It does not explicitly name alternatives or exclusions, but no sibling tool performs a similar listing function, so the usage context is sufficient.

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

mobile_list_crashesList Crash ReportsA
Read-only

List crash reports available on the device

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceYesThe device identifier to use. Use mobile_list_available_devices to find which devices are available to you.

TDQS

A4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, so the agent knows this is a safe read operation. The description adds the scope 'on the device' but does not disclose any additional behavioral traits such as return format or ordering. With annotations covering the safety profile, a 3 is appropriate for the minimal added context.

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 immediately communicates the tool's function. No unnecessary words or redundancy.

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

Completeness4/5

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

For a simple, one-parameter, read-only listing tool, the description covers the essential purpose and scope. It could optionally mention that the returned crash reports could be used with 'mobile_get_crash,' but this is not strictly necessary given the tool's simplicity and the lack of an output schema.

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

Parameters3/5

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

Schema description coverage is 100% and the single parameter 'device' already has a helpful description with a pointer to a companion tool. The tool description adds no additional parameter semantics beyond what the schema provides, so the baseline score of 3 applies.

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

Purpose5/5

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

The description uses a specific verb 'List' with a clear resource 'crash reports' and scope 'on the device,' making its purpose unambiguous. It also distinguishes itself from the sibling tool 'mobile_get_crash,' which likely retrieves a single crash, by focusing on the listing action.

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 input schema description provides usage guidance by directing the user to 'mobile_list_available_devices' to find valid device identifiers. However, the tool description itself does not explicitly state when to use this over alternatives like 'mobile_get_crash,' though the use case is clear from the context.

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

mobile_list_elements_on_screenList Screen ElementsA
Read-only

List elements on screen and their coordinates, with display text or accessibility label. Do not cache this result.

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceYesThe device identifier to use. Use mobile_list_available_devices to find which devices are available to you.

TDQS

A3.8/5.0
Behavior4/5

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

Beyond the readOnlyHint, the description adds the specific instruction 'Do not cache this result,' indicating the output is dynamic. It also specifies the output content (coordinates, text/label), providing transparency about what to expect. However, it does not discuss potential failures, required permissions, or return structure, so it's not a 5.

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

Conciseness5/5

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

The description is two concise sentences, front-loaded with the primary action. Every word adds value, with no redundant or fluff content.

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

Completeness4/5

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

For a single-parameter read-only tool with no output schema, the description is fairly complete: it states what is listed (elements, coordinates, text/label) and adds a caching caution. It could benefit from clarifying what qualifies as an 'element' or whether the output is a list, but overall it covers the essential context.

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

Parameters3/5

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

The input schema already provides a complete description of the 'device' parameter, including a pointer to mobile_list_available_devices. The tool description adds no parameter-specific information, but since schema coverage is 100%, the baseline of 3 applies.

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

Purpose5/5

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

The description clearly states the tool's function: listing on-screen elements with coordinates and display text or accessibility label. It distinguishes from sibling tools like mobile_take_screenshot or mobile_get_screen_size by focusing on UI element hierarchy rather than images or dimensions.

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 does not explicitly state when to use this tool versus alternatives. It only includes 'Do not cache this result,' which is a usage caution, but there is no mention of alternatives or contextual triggers. The schema's parameter description references sibling tool mobile_list_available_devices, but that's for parameter resolution, not tool selection.

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

mobile_long_press_on_screen_at_coordinatesLong Press ScreenA
Destructive

Long press on the screen at given x,y coordinates. If long pressing on an element, use the list_elements_on_screen tool to find the coordinates.

ParametersJSON Schema
NameRequiredDescriptionDefault
xYesThe x coordinate to long press on the screen, in pixels
yYesThe y coordinate to long press on the screen, in pixels
deviceYesThe device identifier to use. Use mobile_list_available_devices to find which devices are available to you.
durationNoDuration of the long press in milliseconds. Defaults to 500ms.

TDQS

A4.2/5.0
Behavior3/5

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

The annotation destructiveHint: true already signals potential destructive behavior. The description adds minimal extra context beyond the action itself, only noting how to find coordinates for elements. It does not contradict the annotation, but it also doesn't disclose additional behavioral traits such as side effects or system behavior. Given the annotation covers the safety profile, a score of 3 is appropriate.

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, concise, and front-loaded with the core action. The second sentence provides a practical tip without redundancy. Every word earns its place, and it avoids repeating schema details.

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?

This is a simple action tool with no output schema and a single annotation. The description covers the core action and a key usage tip. It omits details like duration default, but that is already in the schema. For a tool of this complexity, the description is sufficiently complete, though it could theoretically mention that a long press may trigger context menus or custom actions.

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

Parameters4/5

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

Schema coverage is 100% with all parameters (x, y, device, duration) described. The description adds value by instructing to use list_elements_on_screen to find coordinates, which clarifies the expected format of x/y parameters in a real workflow. This goes beyond the schema's bare pixel descriptions, earning a 4.

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 'Long press on the screen at given x,y coordinates', identifying the specific action (long press) and resource (screen coordinates). It distinguishes from sibling tools like click, double tap, and swipe by the verb 'long press', and the second sentence adds a usage hint without ambiguity.

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 explicit guidance for one common scenario: 'If long pressing on an element, use the list_elements_on_screen tool to find the coordinates.' This tells the agent how to obtain coordinate input and implies this tool is for coordinate-based presses. However, it does not explicitly contrast with click/double-tap tools, so it's not a full when-to-use vs alternatives guideline.

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

mobile_open_urlOpen URLA
Destructive

Open a URL in browser on device

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesThe URL to open
deviceYesThe device identifier to use. Use mobile_list_available_devices to find which devices are available to you.

TDQS

A3.5/5.0
Behavior3/5

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

The annotation destructiveHint: true already informs the agent that this operation is potentially destructive. The description adds the context that the URL opens 'in browser on device', but does not disclose additional behavioral details such as navigation side effects, default browser behavior, or whether the current app will be left.

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 filler. Every word earns its place, making it highly concise and 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 tool is simple with only two parameters, both documented, and the action is clear. However, the description lacks information about expected outcomes or side effects beyond the destructive annotation, and there is no output schema. It is adequate but leaves room for more detail.

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

Parameters3/5

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

Schema description coverage is 100%, with both 'device' and 'url' adequately documented in the schema. The description adds no additional semantic meaning beyond what the schema already provides, so the baseline score of 3 is appropriate.

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

Purpose5/5

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

The description uses a specific verb ('Open') and resource ('a URL in browser on device'), clearly distinguishing it from sibling tools that launch apps, take screenshots, or manage devices. It is unambiguous and actionable.

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, no prerequisites, and no exclusions. It simply states the action without contextual usage instructions.

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

mobile_press_buttonPress ButtonC
Destructive

Press a button on device

ParametersJSON Schema
NameRequiredDescriptionDefault
buttonYesThe button to press. Supported buttons: BACK (android only), HOME, VOLUME_UP, VOLUME_DOWN, ENTER, DPAD_CENTER (android tv only), DPAD_UP (android tv only), DPAD_DOWN (android tv only), DPAD_LEFT (android tv only), DPAD_RIGHT (android tv only)
deviceYesThe device identifier to use. Use mobile_list_available_devices to find which devices are available to you.

TDQS

C2.9/5.0
Behavior2/5

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

The destructiveHint annotation is present, but the description adds no behavioral context beyond restating the action. It does not mention potential side effects like navigation changes or platform-specific behavior, which would be valuable despite the annotation.

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 with no unnecessary words. It is front-loaded and to the point, though it could be slightly more informative without losing brevity.

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 rich schema and destructiveHint annotation help compensate for the sparse description. However, it lacks contextual cues to differentiate from sibling input tools and does not explicitly state that it handles hardware/device buttons, relying on the schema for that distinction.

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

Parameters3/5

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

Schema description coverage is 100% and includes detailed descriptions for both parameters, including a list of supported buttons and a reference to mobile_list_available_devices. The tool description itself adds no parameter semantics, so the baseline score of 3 applies.

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

Purpose4/5

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

The description states 'Press a button on device', which is a clear verb+resource. However, it does not explicitly distinguish from sibling input tools like clicking on screen or typing keys, so it is clear but lacks strong 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. No mention of platform limitations or use cases is provided, leaving the agent to infer from the schema.

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

mobile_save_screenshotSave ScreenshotA
Destructive

Save a screenshot of the mobile device to a file

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceYesThe device identifier to use. Use mobile_list_available_devices to find which devices are available to you.
saveToYesThe path to save the screenshot to. Filename must end with .png, .jpg, or .jpeg

TDQS

A3.8/5.0
Behavior3/5

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

The tool has a destructiveHint: true annotation, so the bar for additional behavioral disclosure is lower. The description accurately describes a file-writing operation but adds no extra context such as potential overwriting of existing files, required permissions, or side effects beyond what the annotation already signals.

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. It succinctly conveys the tool's purpose without unnecessary detail.

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?

This is a simple tool with a well-documented schema and clear annotations. The description is sufficient for the agent to understand the basic operation, though a note about overwriting behavior or file path handling would enhance completeness. Overall, it is adequate for the tool's simplicity.

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

Parameters3/5

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

The input schema provides 100% coverage of both parameters with clear descriptions. The tool description itself adds no parameter-level meaning beyond the schema, so the baseline score of 3 applies.

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

Purpose5/5

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

The description uses a specific verb ('save') and clearly identifies the resource ('screenshot of the mobile device') and the target ('to a file'). This distinguishes it from the sibling tool mobile_take_screenshot, which likely captures a screenshot without saving to a file.

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 use when you need to persist a screenshot to a file, but it does not explicitly state when to use this tool versus alternatives like mobile_take_screenshot, nor does it mention any exclusions or prerequisites.

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

mobile_set_orientationSet OrientationA
Destructive

Change the screen orientation of the device

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceYesThe device identifier to use. Use mobile_list_available_devices to find which devices are available to you.
orientationYesThe desired orientation

TDQS

A3.6/5.0
Behavior2/5

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

The description adds no behavioral context beyond what annotations already indicate (destructiveHint=true). It does not disclose side effects, reversibility, or any device-specific behavior. Given that this is a mutating operation, more transparency would be valuable, but the annotation covers the basic destructive nature.

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, clear, front-loaded sentence with no filler. It efficiently states the action and target resource, earning a high score for conciseness.

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 two well-documented parameters and no output schema, the description and schema provide sufficient information. The only minor gap is the lack of usage guidance, but overall the definition is complete enough for its complexity.

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

Parameters3/5

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

Schema coverage is 100% and both parameters are fully described, including the enum values for orientation. The description adds no extra parameter semantics, so the baseline of 3 is appropriate.

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

Purpose5/5

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

The description uses a specific verb ('Change') and a clear resource ('screen orientation'), making the tool's purpose unambiguous. It naturally distinguishes from sibling mobile_get_orientation, which reads orientation rather than changing it.

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 a setter role opposite to mobile_get_orientation, but it does not explicitly state when to use this tool versus alternatives, nor does it mention any prerequisites or side effects. Usage context is only inferred from the verb 'change' and the sibling tool name.

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

mobile_start_screen_recordingStart Screen RecordingA
Destructive

Start recording the screen of a mobile device. The recording runs in the background until stopped with mobile_stop_screen_recording. Returns the path where the recording will be saved.

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceYesThe device identifier to use. Use mobile_list_available_devices to find which devices are available to you.
outputNoThe file path to save the recording to. Filename must end with .mp4. If not provided, a temporary path will be used.
timeLimitNoMaximum recording duration in seconds. The recording will stop automatically after this time.

TDQS

A4.3/5.0
Behavior4/5

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

The annotation destructiveHint:true already signals potential harm, and the description adds behavioral context: the recording runs in the background, requires an explicit stop, and returns a save path. No contradiction with annotations is present.

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 concise sentences, front-loaded with the action, and no fluff or repetition of schema details.

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

Completeness5/5

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

For a simple start-recording tool with no output schema, the description conveys the key return value (path), the background lifecycle, and the stop counterpart. The schema covers parameter details, making this description sufficient.

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?

Input schema covers all three parameters with descriptions (100% coverage), so the description adds little beyond noting the returned path. This aligns with the baseline score of 3.

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

Purpose5/5

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

The description uses the specific verb 'Start recording' with the resource 'screen of a mobile device,' clearly distinguishing the tool from its sibling mobile_stop_screen_recording, which is explicitly named. It states the action and the object precisely.

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

Usage Guidelines4/5

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

It explains that the recording runs in the background until stopped with mobile_stop_screen_recording, giving clear context for when to use this tool and naming its counterpart. It lacks explicit 'when not to use' guidance, but the context is unambiguous.

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

mobile_stop_screen_recordingStop Screen RecordingA
Destructive

Stop an active screen recording on a mobile device. Returns the file path, size, and approximate duration of the recording.

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceYesThe device identifier to use. Use mobile_list_available_devices to find which devices are available to you.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true, and the description adds value by specifying that the tool returns file path, size, and approximate duration. This discloses the outcome of stopping a recording, which is not captured by the annotation alone.

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 primary action and then tersely lists the return values. Every word earns its place with no redundancy.

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

Completeness4/5

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

Given the tool's simplicity (one parameter, no output schema), the description adequately covers purpose and return values. It could mention error behavior if no recording is active, but this is a minor omission for such a straightforward stop operation.

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

Parameters3/5

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

Schema coverage is 100% for the sole parameter 'device', and its description already provides complete guidance including a reference to mobile_list_available_devices. The tool description does not need to add further parameter details beyond what the schema already contains.

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 ('Stop') and the resource ('an active screen recording on a mobile device'). It is distinct from siblings, especially the paired mobile_start_screen_recording, and adds return value information that makes the tool's purpose 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 phrase 'Stop an active screen recording' implies the tool should be used only when a recording is in progress. This provides clear context, but the description does not explicitly state what happens if no recording is active or mention any alternatives, though the sibling list makes the pairing obvious.

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

mobile_swipe_on_screenSwipe ScreenC
Destructive

Swipe on the screen

ParametersJSON Schema
NameRequiredDescriptionDefault
xNoThe x coordinate to start the swipe from, in pixels. If not provided, uses center of screen
yNoThe y coordinate to start the swipe from, in pixels. If not provided, uses center of screen
deviceYesThe device identifier to use. Use mobile_list_available_devices to find which devices are available to you.
distanceNoThe distance to swipe in pixels. Defaults to 400 pixels for iOS or 30% of screen dimension for Android
directionYesThe direction to swipe

TDQS

C2.9/5.0
Behavior2/5

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

The description adds no behavioral details beyond the annotation destructiveHint: true. It does not explain what side effects a swipe might have, whether it triggers scrolling or navigation, or how it interacts with the app's UI. The burden is partially on the annotation, but the description itself contributes nothing about potential 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, short sentence: 'Swipe on the screen.' It is concise and front-loaded with the key verb and object, with no wasted words. However, its brevity borders on under-specification, as it omits any context about direction or intended use, but it remains appropriately size for a simple gesture tool.

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

Completeness3/5

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

For a straightforward swipe tool, the description plus schema and annotations provide a minimally viable level of information. The schema explains parameters, and the annotation flags destructive potential, but the description lacks contextual guidance on when to choose this tool over siblings and what the effect will be on the app state. This leaves some gaps for an agent to reason about.

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

Parameters3/5

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

The input schema provides 100% coverage with descriptions for all five parameters, including units, defaults, and how to discover device identifiers. The description adds no additional parameter information, so it relies on the schema, which is already sufficient. This aligns with the baseline score of 3 for full schema coverage.

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

Purpose4/5

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

The description 'Swipe on the screen' clearly states the action (swipe) and the target (screen), making the tool's purpose obvious. It does not explicitly differentiate from sibling interaction tools like tap or long press, but the verb itself is distinct enough to convey the intended gesture.

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 such as mobile_click_on_screen_at_coordinates or mobile_long_press_on_screen_at_coordinates. There are no usage scenarios, prerequisites, or conditions specified, leaving the agent to infer appropriateness from the tool name alone.

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

mobile_take_screenshotTake ScreenshotA
Read-only

Take a screenshot of the mobile device. Use this to understand what's on screen, if you need to press an element that is available through view hierarchy then you must list elements on screen instead. Do not cache this result.

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceYesThe device identifier to use. Use mobile_list_available_devices to find which devices are available to you.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, so the read-only nature is covered. The description adds valuable behavioral context beyond annotations: 'Do not cache this result,' which is a non-obvious constraint that the agent must know. It also clarifies that the screenshot is for understanding the screen, not for saving or interaction, which supplements the annotation's minimal safety signal.

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: two sentences, with the main purpose stated first, followed by usage guidance and a cache warning. Every sentence serves a distinct and valuable purpose, with no wasted words.

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 well-documented parameter and a read-only annotation, the description is quite complete. It covers purpose, usage guidelines, and a behavioral note about caching. It does not explicitly describe the return format, but given the tool's nature and the lack of an output schema, the omission is acceptable because the screenshot result is inherently visual and the description implies its purpose.

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 schema has 100% coverage for the single parameter, and its description already explains how to find available devices. The tool description adds no additional parameter detail, so the schema carries the full burden, which matches the baseline of 3 for high schema coverage.

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

Purpose5/5

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

The description clearly states the tool's function with a specific verb and resource: 'Take a screenshot of the mobile device.' It also distinguishes its purpose from the sibling tool for listing elements by explaining when each should be used, which is exactly what a clear purpose statement should do.

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 provides explicit guidance on when to use this tool versus alternatives: use it to understand what's on screen, but if you need to press an element available through the view hierarchy, you must list elements on screen instead. It also adds a constraint not to cache the result, giving clear usage context.

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

mobile_terminate_appTerminate AppB
Destructive

Stop and terminate an app on mobile device

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceYesThe device identifier to use. Use mobile_list_available_devices to find which devices are available to you.
packageNameYesThe package name of the app to terminate

TDQS

B3.2/5.0
Behavior3/5

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

Annotations declare destructiveHint=true, and the description aligns by saying 'terminate'. However, the description adds no additional context about effects such as process termination vs. data removal, or whether stopping is reversible. Since annotations already convey destructiveness, the description provides minimal extra value.

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 sentence and front-loaded. It is concise but includes slight redundancy with 'Stop and terminate'. Overall, it's appropriately sized but lacks extra useful content.

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, with full schema coverage and a destructive annotation, so the description meets a minimum viable threshold. However, it fails to clarify the distinction from uninstall and provides no usage context, making it only partially complete.

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

Parameters3/5

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

The input schema provides descriptions for both parameters (device and packageName), covering 100% of the schema. The description itself adds no parameter-specific information, so it does not exceed the baseline.

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

Purpose4/5

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

The description uses a specific verb 'Stop and terminate' with a clear resource 'app on mobile device'. It clearly conveys the action, but doesn't explicitly distinguish this from mobile_uninstall_app, which could be a source of confusion.

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 provided on when to use this tool versus alternatives. The description doesn't mention that this only terminates the running app and does not uninstall it, nor does it reference sibling tools like mobile_uninstall_app.

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

mobile_type_keysType TextA
Destructive

Type text into the focused element

ParametersJSON Schema
NameRequiredDescriptionDefault
textYesThe text to type
deviceYesThe device identifier to use. Use mobile_list_available_devices to find which devices are available to you.
submitYesWhether to submit the text. If true, the text will be submitted as if the user pressed the enter key.

TDQS

A3.5/5.0
Behavior3/5

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

The annotation destructiveHint=true indicates the operation is potentially destructive, and the description adds the condition 'focused element' as the target. However, it does not explain side effects such as overwriting the current text, what happens if no element is focused, or the behavior when 'submit' is true (though this is partially covered in the schema).

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

Conciseness5/5

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

The description is a single sentence of six words, front-loading the core action and target. Every word contributes meaning; there is no fluff or repetition.

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 typing tool, the description covers the basic operation and the schema covers parameters. However, it lacks usage context (e.g., when to use vs. alternatives, prerequisites like having a focused element clearly established) and does not compensate for the absence of an output schema with information about expected results or errors.

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

Parameters3/5

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

The input schema provides full descriptions for all three parameters (text, device, submit), including guidance for finding available devices. The tool description itself adds no additional parameter semantics, so the schema's 100% coverage establishes a baseline of 3.

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

Purpose5/5

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

The description clearly states the tool's function: 'Type text into the focused element.' The verb 'type' and the resource 'text into the focused element' distinguish it from sibling input tools like mobile_press_button or mobile_click_on_screen_at_coordinates, which involve different forms of interaction.

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 pressing a button or tapping coordinates. The only context is the parameter description for 'device' recommending mobile_list_available_devices, but this is not about tool selection or exclusions.

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

mobile_uninstall_appUninstall AppB
Destructive

Uninstall an app from mobile device

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceYesThe device identifier to use. Use mobile_list_available_devices to find which devices are available to you.
bundle_idYesBundle identifier (iOS) or package name (Android) of the app to be uninstalled

TDQS

B3.3/5.0
Behavior2/5

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

Description adds no behavioral context beyond the destructiveHint annotation. It does not mention permanence, data removal, 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.

Conciseness5/5

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

Single sentence with no redundancy. Front-loaded with the action and resource, making it efficient and 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?

Simple tool with complete schema and destructive annotation. Description conveys the core function but lacks usage context, alternatives, or outcome details.

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 provides complete descriptions for both parameters (100% coverage), so the description need not add parametric details. Baseline of 3 is appropriate.

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

Purpose5/5

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

Clear verb 'uninstall' with resource 'app' and location 'mobile device'. It distinguishes from sibling tools like install, launch, and terminate.

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

Usage Guidelines2/5

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

No guidance on when to use this tool vs alternatives (e.g., terminate vs uninstall). No prerequisites or context provided.

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

run_flowRun Flow (replay steps)A
Destructive

按序回放一段步骤(原生+webview 混合,搭积木)。传 steps(内联数组)或 name(已存 flow)二选一;device=默认设备。step 例:[{op:'launch_app',packageName:'..'},{op:'webview_connect',packageName:'..'},{op:'assert_route',contains:'main'},{op:'tap_text',text:'登录'}]。op 全集见 flows.ts(launch_app/terminate_app/tap/tap_text/press_button/swipe/type_keys/screenshot/wait/log + webview_connect/webview_evaluate/webview_computed_style/webview_click_text/webview_disconnect + assert_route/assert_eval)。

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNo已存 flow 名(与 steps 二选一)
stepsNo内联步骤数组(与 name 二选一)
deviceNo默认设备 serial(各 step 未指定 device 时用)
saveAsNo同时把这组 steps 存为具名 flow
stopOnErrorNo遇错即停,默认 true

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true, and the description adds useful context consistent with that: the tool executes steps in order, spans native and webview, and enumerates the full op set including terminate_app, which is the destructive operation an agent should be cautious about. It does not, however, describe failure modes, side effects, or what happens with assertions/stopOnError behavior beyond what the schema already states – for a destructive tool, some cautionary framing would add value.

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 block with the purpose and the key parameter constraint (steps/name 二选一) front-loaded, followed by the device rule, an illustrative example, and the op enumeration. No sentence is wasted. It loses one point for structure: the long op list is run together as one parenthetical dump, making it harder to parse than a list or shorter grouping would be.

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 composite tool with 5 parameters, a destructive annotation, and no output schema, the description covers invocation essentials well: parameter choice, example step shape, and op set. However, it never states what the tool returns (success/failure, assertion results, collected artifacts), and it defers detailed per-op field requirements to a source file (flows.ts) rather than documenting them. With no output schema, the description carries that burden and leaves a clear gap.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds genuine meaning beyond the schema: the steps array's items are empty objects in the schema, and the description compensates with a concrete step example ({op:'launch_app',...}, {op:'tap_text',text:'登录'}) and enumerates the complete op vocabulary. It also clarifies the mutual-exclusivity and default-device semantics. It falls short of 5 because per-op required fields are not fully specified, and it defers to flows.ts for details.

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 ('按序回放' – replay in sequence) and a concrete resource ('一段步骤' – a sequence of steps), and immediately characterizes the tool as a composite '搭积木' (building-blocks) operation over native+webview primitives. This clearly distinguishes it from the many atomic sibling tools (mobile_launch_app, webview_click_text, etc.) and from save_flow/list_flows, which manage flows rather than execute them.

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

Usage Guidelines3/5

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

The description gives solid internal usage guidance: steps vs. name are mutually exclusive ('传 steps(内联数组)或 name(已存 flow)二选一') and device falls back to a default. However, it never explicitly says when to choose this tool over siblings (e.g., 'for a single action use mobile_*; use this to replay multiple steps') nor references the save_flow/list_flows alternative for flow management. The usage context is implied by the composite nature, not stated.

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

save_flowSave FlowA
Destructive

把一段步骤序列存为具名 flow(下次用 run_flow name= 直接回放)。

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesflow 名
stepsYes步骤数组

TDQS

A4/5.0
Behavior3/5

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

Annotations already flag destructiveHint=true, so the destructive nature is covered. The description adds the intent (saving for later replay) but does not disclose details like overwriting behavior on duplicate names or what the function returns. Given the annotation, a score of 3 is appropriate – it adds some context but not deep behavioral specifics.

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 concise sentence that front-loads the purpose and includes the key use-case link. There is zero fluff, and every word earns its place.

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

Completeness4/5

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

For a simple two-parameter tool with no output schema and annotations covering the destructive hint, the description is nearly complete. It could mention overwrite behavior or return values, but the core purpose and usage are clear, so it is adequate for an agent to invoke correctly.

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

Parameters3/5

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

Schema coverage is 100% with minimal descriptions for both parameters ('flow name' and 'step array'). The tool description restates the concept of a step sequence but adds no new detail about step format or constraints. Since the schema covers the parameters, baseline 3 is correct.

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 the specific action 'save' and the resource 'flow', and explains that it stores a step sequence under a name. It also explicitly connects to the sibling run_flow, making the distinction clear: save now, replay later with run_flow.

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

Usage Guidelines4/5

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

It gives a clear usage context by mentioning the future replay with run_flow, which implies when to use it. However, it does not explicitly state exclusions or when not to use it (e.g., for listing flows), but the context is sufficient for basic routing.

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

webview_click_textClick Webview Element by TextA
Destructive

按可见文本点击 webview 内元素(找最外层匹配且可见者)。

ParametersJSON Schema
NameRequiredDescriptionDefault
textYes元素可见文本
deviceYes目标设备 serial(同 mobile_list_available_devices 的 id)

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already disclose destructiveHint=true, and the description adds a meaningful selection behavior: it chooses the outermost matching visible element. This goes beyond what the schema or annotations provide. It does not address edge cases like missing text or multiple matches, but the added context is valuable.

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 compact sentence that front-loads the primary action ('click by visible text') and immediately clarifies the selection rule. There is no redundant or filler content; every clause carries distinct information.

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

Completeness3/5

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

For a simple two-parameter tool with complete schema coverage and a destructive annotation, the description covers core behavior and selection logic. However, it omits any mention of prerequisites (e.g., a connected webview) or failure behavior, which the schema and annotations do not provide. This is adequate but not exhaustive.

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 schema description coverage is 100%, so both parameters ('text' and 'device') are already fully documented. The description adds no additional parameter-level meaning beyond what the schema states, so baseline 3 applies.

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

Purpose5/5

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

The description states a specific action ('click') and target ('webview element by visible text'), and adds a precise selection rule ('outermost matching and visible'). This clearly distinguishes it from coordinate-based clicks (mobile_click_on_screen_at_coordinates) and other webview operations (evaluate, screenshot, etc.).

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 an agent needs to click a webview element via its visible text, but it does not explicitly state when to prefer this over alternatives, nor does it mention exclusions or prerequisites (e.g., needing an active webview connection). Guidance is inferred rather than explicit.

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

webview_connectConnect WebviewA
Destructive

连接/重连目标 App 的 in-app 系统 WebView(自动 adb forward),返回当前页 url/title/路由。读 webview DOM 前必须先调它。

ParametersJSON Schema
NameRequiredDescriptionDefault
portNo本地转发端口,默认 9222
deviceYes目标设备 serial(同 mobile_list_available_devices 的 id)
packageNameYesApp 包名(其 webview 被调试),如 cn.csxs.xiaoshuo

TDQS

A4/5.0
Behavior3/5

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

注释已提供 destructiveHint=true,描述未与之矛盾,且添加了自动 adb forward 和返回值细节,但未说明具体副作用(如是否重连会中断现有会话)。由于注释已覆盖破坏性,描述未充分补充行为上下文,评分3。

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?

描述仅一句话,却包含连接/重连、自动 adb forward、返回值及前置条件,无冗余信息,且关键信息前置,结构高效。

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?

无输出 schema,但描述已说明返回 url/title/路由,提供了必要返回值概要。虽未提及连接后的状态或更多细节,但对于简单工具已基本完整,评分4。

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 描述覆盖率为100%,所有参数(port、device、packageName)在 schema 中已有说明,描述本身未额外提供参数语义,按规则基线为3。

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

Purpose5/5

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

描述明确指出动词'连接/重连'、资源'目标 App 的 in-app 系统 WebView',并返回 url/title/路由,同时强调是读取 DOM 的前置步骤,与 webview_* 系列兄弟工具(如 evaluate、click)区分明显,目的非常清晰。

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?

描述明确给出使用时机:读取 webview DOM 前必须先调用,提供了清晰的上下文。但未提及何时不应使用或替代方案,不过对于此类前置连接工具,已足够。

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

webview_disconnectDisconnect WebviewA
Destructive

断开本工具对 webview 的 CDP 连接,释放该 page 的唯一 CDP socket(把 webview 交给 Appium/chromedriver 前先调它)。

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceYes目标设备 serial(同 mobile_list_available_devices 的 id)

TDQS

A4.2/5.0
Behavior4/5

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

The destructiveHint annotation already marks this as destructive, and the description adds valuable context by naming what is destroyed: the only CDP socket for the page. It also explains the interop reason. It doesn't cover edge cases like calling it when already disconnected, but the main side effect 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 a single front-loaded sentence with no filler. The action and resource come first, and the timing rationale is tucked into a short parenthetical that earns its place.

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

Completeness4/5

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

For a simple one-parameter destructive tool with annotations and no output schema, this description provides enough context: what it disconnects, what it releases, and when to call it. A no-op or already-disconnected behavior would be a nice extra, but it isn't essential for correct invocation.

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

Parameters3/5

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

Schema coverage is 100%, and the single device parameter is already described in the schema as a target device serial matching mobile_list_available_devices id. The description doesn't repeat or expand parameter semantics, but the schema carries the needed meaning.

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

Purpose5/5

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

The description clearly states a specific action: disconnecting this tool's CDP connection to the webview and releasing the page's unique CDP socket. This goes beyond the title and makes the tool's role distinct from webview_connect and other webview operations.

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 concrete usage condition: call this before handing the webview over to Appium/chromedriver. It doesn't explicitly mention alternatives or when not to use it, so it stops short of full routing guidance.

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

webview_dom_outlineGet Webview DOM OutlineA
Read-only

取 webview 内某元素(默认 body)的 outerHTML 概要(截断,排错 DOM 结构用)。

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceYes目标设备 serial(同 mobile_list_available_devices 的 id)
maxCharsNo截断长度,默认 4000
selectorNoCSS 选择器,默认 body

TDQS

A4.2/5.0
Behavior4/5

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

The readOnlyHint annotation already signals a safe read operation, and the description adds behavioral context by disclosing that the output is truncated and that the element defaults to body. It does not cover error behavior or connection prerequisites, but the annotation lowers the burden.

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 with essential behavior front-loaded and no filler. Every part contributes to understanding what the tool does.

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 read-only tool with fully described parametersholistic, the description plus schema is nearly sufficient. The only notable gap is the lack of an output schema or an explicit statement of the return type/format, though 'outerHTML 概要' strongly implies a truncated string.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents device, maxChars, and selector. The description adds only domain context, not new parameter details, so the baseline of 3 is appropriate.

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

Purpose5/5

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

The description states a specific verb ('取' / get), a specific resource (outerHTML outline of an element in a webview), and the default target (body). This clearly differentiates it from mobile-screen and other webview sibling tools.

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

Usage Guidelines4/5

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

The description explicitly frames the tool for debugging DOM structure ('排错 DOM 结构用'), giving the agent a clear usage context. It does not name alternative tools or when-not conditions, so it stops short of a 5.

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

webview_evaluateEvaluate JS in WebviewA
Destructive

在 webview 页面执行 JS 并返回 JSON 结果(Runtime.evaluate,returnByValue+awaitPromise)。⚠ chrome68 老机型禁用 ?./??,用 a&&a.b。

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceYes目标设备 serial(同 mobile_list_available_devices 的 id)
expressionYesJS 表达式,如 location.hash 或 (function(){...})()

TDQS

A3.5/5.0
Behavior3/5

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

Annotations include destructiveHint: true, indicating potential destructive effects. The description does not explain what might be destructive, leaving the agent uncertain. It does provide useful technical details like using returnByValue and awaitPromise, and warns about JS syntax limitations on old devices, which adds value. No contradiction with annotations, but could better clarify 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 concise and information-dense, with no fluff. It front-loads the main action and technical details, then adds a critical compatibility warning at the end. Every word 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?

Given no output schema, the description mentions it returns JSON, which is helpful. However, it does not specify the exact structure of the return value (e.g., whether it includes exceptions, result object). It also lacks behavioral details about side effects, which is important due to destructiveHint. The description is adequate but not complete.

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

Parameters3/5

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

The schema description coverage is 100%, so parameters are already documented. The description adds an example of expression format and the meaning of device serial, but the schema already provides that. Minimal added value beyond schema.

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

Purpose4/5

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

The description clearly states the tool evaluates JavaScript in a webview and returns JSON results, specifying the protocol method and options. It mentions execution context and return behavior. It does not explicitly differentiate from sibling tools like webview_click_text or webview_get_computed_style, but the focus on arbitrary JS evaluation is distinct enough.

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 running JavaScript in a webview but does not state when to prefer this over alternatives, such as using dedicated tools for clicking or styling. It also does not mention prerequisites like needing a webview connection (via webview_connect). The warning about old devices is a usage constraint but not for alternative selection.

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

webview_get_computed_styleGet Webview Computed StyleB
Read-only

取 webview 内某元素的 computed CSS + 包围盒(getComputedStyle)。

ParametersJSON Schema
NameRequiredDescriptionDefault
propsNoCSS 属性名数组,默认常用集
deviceYes目标设备 serial(同 mobile_list_available_devices 的 id)
selectorYesCSS 选择器

TDQS

B3.4/5.0
Behavior3/5

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

Annotations declare readOnlyHint=true, so the agent knows this is a safe read operation. The description adds that it returns computed CSS and bounding box, which is useful. However, it doesn't disclose details like whether the bounding box is in CSS pixels or device pixels, whether the element must be visible, or what happens if the selector matches multiple elements. With annotations covering the safety profile, a 3 is appropriate.

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 core purpose (get computed CSS + bounding box). It's efficient and doesn't waste words. It could add a bit more context about return format, but for its length it's well-structured.

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 read-only tool with full schema coverage and no output schema, the description is mostly adequate. It tells the agent what it does and what it returns. However, it doesn't mention the bounding box coordinate system, behavior with multiple matches, or whether the webview must be connected first. These are minor gaps for a simple read tool, but they prevent a higher score.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all three parameters. The description adds the default behavior for 'props' (默认常用集 = default common set), which is a small addition beyond the schema. However, it doesn't explain the format of the selector or how the bounding box is returned. Baseline 3 is correct when schema does the heavy lifting.

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

Purpose4/5

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

The description states a specific verb ('取' = get) and resource (computed CSS + bounding box of an element in a webview), which clearly distinguishes it from sibling webview tools like webview_dom_outline or webview_evaluate. However, it doesn't explicitly name a sibling alternative, so it doesn't fully earn 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 description implies usage context: it's for reading computed styles and bounding boxes from a webview element. It doesn't explicitly state when to use this vs alternatives like webview_dom_outline or webview_evaluate, nor does it mention prerequisites like needing an active webview connection. The context is clear but exclusions/alternatives are not stated.

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

webview_network_captureCapture Webview NetworkA
Read-only

抓 N 毫秒内 webview 的网络请求(Network 域:url/method/status/类型)。

ParametersJSON Schema
NameRequiredDescriptionDefault
msNo抓取时长毫秒,默认 3000
deviceYes目标设备 serial(同 mobile_list_available_devices 的 id)

TDQS

A3.7/5.0
Behavior3/5

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

The annotation readOnlyHint=true already covers the safety profile, so the description only needs to add non-obvious behavior. It adds that the capture runs for N milliseconds and collects specific fields, which is useful. However, it does not disclose whether the call blocks for the full duration, whether it returns immediately, or whether it affects ongoing network monitoring; it also omits the return format.

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

Conciseness5/5

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

The description is a single compact sentence with zero filler. It front-loads the core action and scope, immediately followed by the relevant captured fields. Every element 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?

The tool is simple (2 params, 1 required) and the read-only annotation covers safety. Yet there is no output schema, and the description does not describe the return structure, so an agent must guess at the response format. It also omits any mention of requiring an active webview connection, which is relevant context given the sibling webview_connect/disconnect tools.

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

Parameters3/5

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

Schema description coverage is 100%: both 'ms' (duration, default 3000) and 'device' (target serial) are already documented in the input schema. The description merely restates the 'N milliseconds' concept and adds no new meaning beyond the schema, so the baseline of 3 is appropriate.

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

Purpose5/5

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

The description uses a specific verb ('抓'/'capture') and a clear resource ('webview 的网络请求'/'webview network requests'), scoped by a duration (N milliseconds). It also enumerates the captured fields (url/method/status/type) and explicitly ties it to the Network domain, making it distinct from every sibling webview tool (screenshot, evaluate, DOM outline, etc.).

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

Usage Guidelines3/5

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

Usage is implied by the tool's unique purpose: there is no other network-capture sibling, so an agent can infer when to call it. However, the description does not explicitly state prerequisites (e.g., whether a webview connection via webview_connect is required) or mention any exclusions/alternatives, leaving the when-to-use guidance implicit rather than explicit.

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

webview_pagesList Webview PagesA
Read-only

列出目标 App webview 的调试目标(/json/list,自动 adb forward),确认 type:page 页面。

ParametersJSON Schema
NameRequiredDescriptionDefault
portNo本地转发端口,默认 9222
deviceYes目标设备 serial(同 mobile_list_available_devices 的 id)
packageNameYesApp 包名(其 webview 被调试)

TDQS

A3.8/5.0
Behavior4/5

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

Beyond the readOnlyHint annotation, the description adds genuine behavioral detail: it uses the /json/list endpoint, automatically performs an adb forward (a side effect on local port forwarding), and filters targets to type:page. These details are consistent with readOnlyHint=true and give the agent useful expectations about mechanism and scope.

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 dense sentence that front-loads the primary action and packs in the endpoint, the auto-forward behavior, and the page-type filter. All information earns its place, though the mechanism details could arguably have followed the core purpose rather than being embedded mid-sentence.

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

Completeness3/5

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

The tool is simple (3 params, no output schema) and the description covers what it does and its mechanism. However, with no output schema, the description never explains what the returned list contains (e.g., whether webSocketDebuggerUrl, title, or url fields are present) or how results feed into webview_connect, leaving a meaningful gap.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents device, packageName, and the optional port with its default of 9222. The description reinforces that packageName refers to the app whose webview is being debugged, but adds little meaning beyond the schema, making the baseline of 3 appropriate.

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

Purpose5/5

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

The description states a specific verb and resource: listing the debugging targets of a target app's webview, via the /json/list endpoint, and filtering to type:page targets. This clearly differentiates it from its webview_* siblings, all of which perform actions (connect, evaluate, screenshot) rather than discovery.

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 but not explicit: the tool is clearly a discovery step that would naturally precede webview_connect or webview_evaluate, and the '确认 type:page' phrase implies it filters out non-page targets. However, it never says 'use this before connecting' or names alternatives, leaving the agent to infer when this tool is the right choice.

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

webview_screenshotScreenshot WebviewB
Read-only

page 级截图(Page.captureScreenshot)并落盘,返回文件路径(不回传 base64)。

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceYes目标设备 serial(同 mobile_list_available_devices 的 id)
saveToYes保存绝对路径,如 D:\\tmp\\wv.png

TDQS

B3.4/5.0
Behavior1/5

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

The description transparently discloses that the tool captures a screenshot and writes it to disk, but the annotations declare readOnlyHint=true. Writing a file is a side effect that modifies the environment, so the description contradicts the annotation. Per the rubric, this contradiction forces a score of 1.

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 dense sentence with no filler. It packs the protocol, output behavior, and a negative constraint (no base64) into minimal wording.

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

Completeness4/5

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

With no output schema, the description explicitly covers the return value (file path) and format exclusion (not base64). Both required parameters are fully documented. Minor gaps include prerequisites such as an established webview connection, but these are reasonably inferable from sibling webview tools.

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

Parameters3/5

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

Schema description coverage is 100%: device is cross-referenced to mobile_list_available_devices, and saveTo is documented with an absolute-path example. The description adds no parameter-specific meaning beyond the schema, so baseline 3 is appropriate.

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

Purpose5/5

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

The description states a specific action ('page 级截图' using Page.captureScreenshot), the output behavior (save to disk and return file path), and an explicit exclusion (no base64). This distinguishes it from mobile screenshot tools like mobile_take_screenshot and mobile_save_screenshot.

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 'page 级' phrasing implies this is for webview page screenshots rather than device-level screenshots, and the sibling tools include webview_connect and mobile_take_screenshot. However, it does not explicitly state when to use this tool versus mobile_save_screenshot/mobile_take_screenshot or mention prerequisites like a connected webview.

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. 35 tool updatesv0.0.1
    • First observedlist_flows
    • First observedmobile_click_on_screen_at_coordinates
    • First observedmobile_double_tap_on_screen
    • First observedmobile_get_crash
    • First observedmobile_get_orientation
    • First observedmobile_get_screen_size
    • First observedmobile_install_app
    • First observedmobile_launch_app
    • First observedmobile_list_apps
    • First observedmobile_list_available_devices
    • First observedmobile_list_crashes
    • First observedmobile_list_elements_on_screen
    • First observedmobile_long_press_on_screen_at_coordinates
    • First observedmobile_open_url
    • First observedmobile_press_button
    • First observedmobile_save_screenshot
    • First observedmobile_set_orientation
    • First observedmobile_start_screen_recording
    • First observedmobile_stop_screen_recording
    • First observedmobile_swipe_on_screen
    • First observedmobile_take_screenshot
    • First observedmobile_terminate_app
    • First observedmobile_type_keys
    • First observedmobile_uninstall_app
    • First observedrun_flow
    • First observedsave_flow
    • First observedwebview_click_text
    • First observedwebview_connect
    • First observedwebview_disconnect
    • First observedwebview_dom_outline
    • First observedwebview_evaluate
    • First observedwebview_get_computed_style
    • First observedwebview_network_capture
    • First observedwebview_pages
    • First observedwebview_screenshot

TDQS

B3.3/5.0

Scored across 35 tools

Disambiguation3/5

Most tools divide into clear mobile, webview, and flow groups, but run_flow's op list overlaps with many individual tools (launch_app, screenshot, webview_connect, tap_text), and there are three screenshot-related tools (mobile_take_screenshot, mobile_save_screenshot, webview_screenshot). Descriptions clarify some boundaries, but an agent could easily select a single-step run_flow or the wrong screenshot tool.

Naming Consistency4/5

Snake_case verb_noun naming is used throughout, with clear mobile_ and webview_ prefixes plus flow verbs. Minor inconsistencies exist: the webview group lacks the mobile_ prefix, coordinate suffixes vary (click_on_screen_at_coordinates vs double_tap_on_screen vs long_press_on_screen_at_coordinates), and run_flow/save_flow/list_flows form a separate prefix family.

Tool Count2/5

With 35 tools, this exceeds the 25+ threshold for 'too many' even for an all-in-one mobile/webview/flow server. Several tools could be consolidated, such as the screenshot variants and the overlap between run_flow's op set and individual action tools.

Completeness3/5

App lifecycle, device interactions, screenshots, and webview inspection are broadly covered. However, flows can be saved, listed, and run but not deleted or updated, and some run_flow operations (wait, tap_text, assert_route) have no standalone equivalents, forcing workarounds. These are notable gaps but not fatal.

Maintenance

ActivityMaintained
ResponsivenessUnresponsive

Related MCP Connectors

Related MCP Servers