Skip to main content
Glama
xiaoran7

Agent-Android

by xiaoran7

agent-Android-bridge

简体中文 | English | 美术与设计资产 (Assets)

agent-Android-bridge 是面向 AI Agent 的 Android 执行桥。它通过 MCP 暴露设备发现、应用与进程管理、UI 树、截图/OCR、输入手势、文件与 Shell 操作,以及按设备串行的异步命令队列。

当前主线是 2.0.0 架构,提供两种设备驱动:

  • ADB 驱动:通过 USB 或 Wireless ADB 控制已授权设备,能力最完整。

  • Android Runner:手机主动建立 WSS 连接,适合跨 NAT 场景;当前 APK 主要覆盖截图、UI 树、手势、文字和剪贴板能力。

当前源码注册 58 个 MCP 工具。工具列表以 MCP 客户端发现结果和 src/agent_android/mcp_server/server.py 为准。

agent-Android-bridge 可以触发真实点击、消息发送、文件修改和应用操作。只控制自己拥有或获准控制的设备;付款、删除、发送等后果性动作应保留人工确认,并读取操作后的 UI 验证结果。

快速开始

要求:Windows、Python 3.11,以及 ADB 驱动路径所需的 Android Platform Tools。

powershell git clone https://github.com/xiaoran7/agent-Android-bridge.git agent-Android-bridge cd agent-Android-bridge py -3.11 -m venv .venv .\.venv\Scripts\python.exe -m pip install -U pip .\.venv\Scripts\python.exe -m pip install -e ".[dev,ocr]" .\.venv\Scripts\agent-android-bridge.exe setup

连接手机并在设备上批准调试授权:

powershell .\.venv\Scripts\agent-android-bridge.exe devices .\.venv\Scripts\agent-android-bridge.exe info "<device-id>"

启动本地 stdio MCP:

powershell .\.venv\Scripts\agent-android-bridge.exe mcp

Codex 注册示例:

powershell codex mcp add agent-android-bridge --env "ADB_PATH=C:\Android\platform-tools\adb.exe" -- "C:\path\to\agent-Android-bridge\.venv\Scripts\python.exe" -m agent_android.cli mcp

其他 stdio 客户端可参考 .mcp.json.example

Related MCP server: DeepADB

SSE 与 Android Runner

SSE 模式同时挂载 Android Runner 的 WebSocket 入口 /runner/ws:

powershell .\.venv\Scripts\agent-android-bridge.exe mcp --transport sse --host 127.0.0.1 --port 8765

Runner 必须连接到同一服务对应的 ws://.../runner/ws 或 wss://.../runner/ws。

Runner 身份认证(tg-oauth)

Runner 握手支持 OAuth 2.0 Bearer 认证:APK 以 Authorization Code + PKCE 通过 TannerLab ID(tg-oauth)登录,WebSocket 握手携带 Authorization: Bearer ,网关经 RFC 7662 introspection 验证通过后才注册会话。

配置以下三项后认证强制开启(缺一项即回退为接受未认证设备,仅限本机开发):

变量

用途

AGENT_ANDROID_RUNNER_OAUTH_ISSUER

tg-oauth 发行者 URL,如 https://auth.tannerlab.cn

AGENT_ANDROID_RUNNER_OAUTH_CLIENT_ID

网关使用的机密客户端 ID(调 introspection 用)

AGENT_ANDROID_RUNNER_OAUTH_CLIENT_SECRET

上述机密客户端的 secret

AGENT_ANDROID_RUNNER_OAUTH_ALLOWED_CLIENTS

允许接入的 Runner 客户端列表,默认 gent-android-runner,agent-android-bridge-runner,droidbridge-runner

tg-oauth 侧需在部署环境变量 OAUTH_CLIENTS 注册两个客户端(公共客户端给 APK,机密客户端给网关;接入契约见 tg-oauth docs/INTEGRATION.md):

json [ {"client_id": "droidbridge-runner", "name": "agent-Android-bridge Runner", "description": "agent-Android-bridge Android Runner 设备端", "redirect_uris": ["agent-android-bridge://oauth/callback", "droidbridge://oauth/callback"]}, {"client_id": "droidbridge-gateway", "name": "agent-Android-bridge Gateway", "description": "agent-Android-bridge Runner 接入网关(introspection)", "redirect_uris": ["https://mcp2.tannerlab.xyz/runner/callback"], "client_secret": "<与网关 env 一致>"} ]

注意:tg-oauth 的 seed 校验要求每条 edirect_uris 非空,机密客户端也要至少登记一个占位回调地址。

公网部署必须同时具备受信任反代的 TLS 与此处认证;认证回答的是"这条会话是谁发起的",设备授权与后果性动作确认仍由运营者自行保留。

Android APK 的构建、权限与当前能力见 Runner README

推荐调用顺序

  1. list_devices

  2. screen_summary;无有效无障碍树时再用 screenshot 或 OCR

  3. ind_element / wait_for_element

  4. 执行最小必要动作

  5. 再次读取 UI、前台应用或命令状态,确认真实结果

submit_action、get_command_status、list_commands 与 cancel_command 提供非阻塞命令票据。同一设备按提交顺序执行,不同设备可并行;只能取消仍处于 pending 的命令。

Unicode 输入

ADB 路径的可靠 Unicode 输入需要用户自行提供并核验 ADBKeyBoard:

powershell .\scripts\install_adb_keyboard.ps1 -DeviceId "<device-id>" -ApkPath "C:\path\to\ADBKeyboard.apk"

input_text(method="auto") 在没有可靠输入后端时会明确失败。若显式使用 method="raw",应接受输入法拦截、转义和 OEM 差异带来的不可靠性。Runner 使用无障碍输入,不依赖 ADBKeyBoard。

配置

变量

用途

ADB_PATH

db 可执行文件路径

AGENT_ANDROID_DATA_DIR

设备记录和活动数据库目录

AGENT_ANDROID_RUNTIME_DIR

命令队列与进程锁目录

AGENT_ANDROID_COMMANDS_DB

命令队列 SQLite 文件

AGENT_ANDROID_COMMAND_QUEUE_TIMEOUT

命令开始前的排队超时

AGENT_ANDROID_COMMAND_QUEUE_MAX_PENDING

单设备待处理/运行命令上限

AGENT_ANDROID_SCRCPY_SERVER_JAR

开发时覆盖 scrcpy-server

AGENT_ANDROID_SCRCPY_SERVER_VERSION

自定义 scrcpy-server 版本

AGENT_ANDROID_SCRCPY_SERVER_SHA256

自定义 scrcpy-server 摘要

AGENT_ANDROID_SCRCPY_MAX_SIZE

scrcpy 编码最长边

AGENT_ANDROID_RUNNER_OAUTH_ISSUER

tg-oauth 发行者 URL;与 CLIENT_ID/SECRET 同时配置后 Runner 握手强制认证

AGENT_ANDROID_RUNNER_OAUTH_CLIENT_ID

网关 introspection 用的机密客户端 ID

AGENT_ANDROID_RUNNER_OAUTH_CLIENT_SECRET

上述机密客户端的 secret

AGENT_ANDROID_RUNNER_OAUTH_ALLOWED_CLIENTS

允许接入的 Runner 客户端列表

开发检查

powershell .\scripts\setup_venv.ps1 .\.venv\Scripts\python.exe -m ruff check . .\.venv\Scripts\python.exe -m ruff format --check . .\.venv\Scripts\python.exe -m pytest -q .\.venv\Scripts\python.exe -m bandit -q -r src .\.venv\Scripts\python.exe -m build

Android Runner 需要 Android Studio、JDK 17 和 Android SDK 35;仓库目前没有 Gradle Wrapper。

当前边界

  • stdio 适合本机 Agent + ADB;Android Runner 需要 SSE 服务承载 WebSocket。

  • Runner 握手认证依赖 tg-oauth introspection;未配置 issuer 时网关接受未认证设备,只应用于本机开发。

  • Runner APK 只实现 MCP 表面的一个能力子集;未知动作会返回失败。

  • 无障碍树可能缺失 Canvas、游戏或部分 WebView 内容,此时使用截图/OCR。

  • Android OEM 的输入法、后台冻结、无线调试和无障碍策略差异较大。

  • 命令队列只持久化脱敏参数和状态;可执行回调留在提交进程,进程退出后不能由其他进程重放。

  • pyproject.toml 已是 2.0.0,但部分打包脚本和运行时版本常量仍在迁移;发布前必须完成一致性检查。

文档

代码采用 MIT License。内置 scrcpy-server 的来源与 Apache 2.0 许可见第三方声明

Available Tools

27 tools
clear_textB
Destructive

Clear text in the currently focused input field.

ParametersJSON Schema
NameRequiredDescriptionDefault
device_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already mark destructiveHint=true, aligning with clearing text. The description adds the constraint that it operates on the 'currently focused input field', but does not disclose edge cases (e.g., no focus) or additional behaviors.

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

Conciseness5/5

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

The description is a single sentence with no wasted words, delivering the core purpose efficiently.

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 the tool's simplicity (one parameter, output schema exists), the description is adequate but misses details: no explanation of device_id, no mention of behavior when no input field is focused, and no return value description.

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

Parameters1/5

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

The input schema has one parameter (device_id) with 0% description coverage. The tool description does not mention or explain the parameter, leaving the agent without guidance on its meaning or expected format.

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 'Clear' and resource 'text in the currently focused input field', distinguishing it from siblings like input_text or key_event.

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 versus alternatives (e.g., key_event for deleting text). The description does not provide context on prerequisites or effective scenarios.

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

connect_deviceA
Destructive

Connect to a WiFi device by ip:port (already tcpip-enabled or paired).

ParametersJSON Schema
NameRequiredDescriptionDefault
ipYes
portYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already indicate destructiveHint=true and readOnlyHint=false. The description adds valuable context: it requires the device to be in a specific state. No contradictions; the description enriches the behavioral understanding beyond 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 sentence with no fluff, front-loading the core action and condition. It is appropriately sized for the tool's simplicity.

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 low complexity and existing output schema, the description is fairly complete. It covers the prerequisite and method. Minor gaps like failure behavior or expected post-connection state do not significantly detract.

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

Parameters3/5

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

Schema description coverage is 0%, and the description only mentions 'ip:port' without adding detail on format or constraints. Parameter names are self-explanatory, so the description provides minimal added semantic value beyond the schema.

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 'Connect', the resource 'WiFi device', and the method 'by ip:port', with a prerequisite condition. It effectively distinguishes from sibling tools like 'tcpip_pair_device' and 'pair_with_code' by specifying 'already tcpip-enabled or paired'.

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

Usage Guidelines4/5

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

The description provides a clear condition for use ('already tcpip-enabled or paired'), but does not explicitly state when not to use this tool or mention alternatives. The context of siblings includes pairing tools, offering implicit guidance.

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

double_tapA
Destructive

Double-tap the screen at pixel coordinates (x, y).

ParametersJSON Schema
NameRequiredDescriptionDefault
xYes
yYes
device_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior2/5

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

Annotations already indicate destructiveHint=true, but the description adds no further behavioral context beyond the action itself, such as potential side effects or return values.

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

Conciseness5/5

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

The description is a single, front-loaded sentence with no wasted words, achieving maximum efficiency.

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

Completeness3/5

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

For a simple tool with an output schema, the description is adequate but lacks usage guidelines and deeper context, making it minimally 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 description adds meaning to x and y as pixel coordinates, but device_id is not explained, and schema coverage is 0%, so it partially compensates for missing parameter documentation.

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

Purpose5/5

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

The description clearly states the action (double-tap) and the resource (screen at pixel coordinates), distinguishing it from sibling tools like 'tap' (single tap) and 'swipe'.

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 double-tapping but does not explicitly state when to use this tool versus alternatives like 'tap' or 'swipe', nor does it provide any exclusions or context.

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

dump_uiA
Read-onlyIdempotent

Get all UI elements on screen (text/resource-id/class/bounds/clickable) via the accessibility tree.

ParametersJSON Schema
NameRequiredDescriptionDefault
device_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior5/5

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

The description adds 'via the accessibility tree', which is meaningful behavioral detail beyond the annotations (readOnlyHint, idempotentHint, destructiveHint). It explains the source of data, which helps the agent understand potential limitations or permissions. No contradictions 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 succinct sentence that front-loads the purpose and key details. Every word is informative, 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 presence of an output schema and the tool's read-only nature, the description adequately explains what is returned and the method. However, it could be improved by mentioning output structure or usage scenarios. Still, it's largely complete for a basic inspection tool.

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

Parameters1/5

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

The sole parameter 'device_id' is not explained in the description. With 0% schema description coverage, the description should compensate but fails to add any meaning beyond the schema field name. This leaves the agent unclear about what device IDs are valid or how to obtain them.

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 'all UI elements on screen', listing specific attributes (text, resource-id, class, bounds, clickable). This distinguishes it from sibling tools like screenshot (image capture) or find_element (search for specific element).

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

Usage Guidelines3/5

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

The description implies usage when you need all UI elements on screen, but does not explicitly state when not to use it or suggest alternatives like find_element or screen_summary. The context is clear but no exclusion criteria are provided.

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

find_elementB
Read-onlyIdempotent

Find the first UI element matching the given (non-None) attributes. Returns None if not found.

ParametersJSON Schema
NameRequiredDescriptionDefault
textNo
exactNo
device_idYes
class_nameNo
resource_idNo
content_descNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.1/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, openWorldHint, idempotentHint, destructiveHint. The description adds the 'non-None' attribute filtering and return behavior, but lacks details on search scope (e.g., visible elements only) or performance implications.

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

Conciseness5/5

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

Two sentences with no redundancy. Front-loaded with action and return value.

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?

With 6 parameters and an output schema, the description minimally covers behavior but omits how results can be used with sibling tools and does not specify matching behavior for multiple candidates.

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

Parameters2/5

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

Schema coverage is 0%, and the description only mentions 'non-None attributes' without explaining individual parameters like text, exact, or class_name. The 'exact' parameter's role is unclear.

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

Purpose4/5

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

The description clearly states the tool finds the first UI element matching attributes, but does not explicitly differentiate from sibling tools like wait_for_element or tap_element, which have overlapping purposes.

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 versus alternatives such as wait_for_element or dump_ui. No context about prerequisites or typical use cases.

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

get_current_appA
Read-onlyIdempotent

Get the package name of the currently foregrounded app.

ParametersJSON Schema
NameRequiredDescriptionDefault
device_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior2/5

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

The description adds no behavioral details beyond what annotations already provide. Annotations already indicate read-only, idempotent, and non-destructive behavior. The description could have warned that the foregrounded app might change rapidly or that the package name might be null, but it does not.

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 with no wasted words. It is front-loaded with the verb and resource, making it easy to parse quickly.

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, clear annotations, and an output schema), the description is mostly complete. However, it does not explain the return value, but the output schema handles that. The missing parameter description is a minor gap.

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

Parameters2/5

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

Schema description coverage is 0%, meaning the description does not explain the 'device_id' parameter. With low coverage, the description should compensate, but it does not mention the parameter at all. The purpose is clear without parameter details, but the agent might need to know which device this refers to.

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 'package name of the currently foregrounded app', making the purpose unambiguous. It distinguishes this tool from siblings like 'list_apps' or 'wait_for_app' by specifying 'currently foregrounded'.

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 does not provide explicit guidance on when to use this tool vs alternatives such as 'list_apps' or 'wait_for_app'. The context is clear but no exclusions or alternatives are mentioned, so the usage is only implied.

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

get_screen_sizeA
Read-onlyIdempotent

Get active and physical screen dimensions without transferring a screenshot.

ParametersJSON Schema
NameRequiredDescriptionDefault
device_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and idempotentHint; description adds value by stating no screenshot transfer, enhancing transparency.

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 clear, front-loaded action; no extraneous 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?

Tool has output schema and low complexity; description covers core purpose and key benefit, though misses parameter details.

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

Parameters2/5

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

Schema has 0% description coverage and the only param device_id is not explained in description, leaving agents without guidance on its 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?

Description states specific action 'Get active and physical screen dimensions' and distinguishes from sibling 'screenshot' by noting no screenshot transfer.

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?

Implies use when needing dimensions without screenshot, but no explicit when-to-use or alternative comparisons.

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

input_textA
Destructive

Type text into the focused field.

``auto`` only uses an unattended-safe ADBKeyBoard backend and fails clearly
when it isn't installed. ``raw`` is explicit best-effort ASCII and can be
intercepted or changed by the active Android IME.
ParametersJSON Schema
NameRequiredDescriptionDefault
textYes
clearNo
methodNoauto
device_idYes
restore_imeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already indicate destructive behavior (destructiveHint=true). The description adds that the 'auto' method uses ADBKeyBoard and fails if not installed, and 'raw' is best-effort ASCII that can be intercepted. It does not disclose that restore_ime may change the IME or what happens to existing text when clear is false.

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

Conciseness5/5

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

The description is extremely concise, with two sentences that deliver the core purpose and key method details upfront. No fluff or redundant information is present.

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

Completeness2/5

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

Given 5 parameters, destructive behavior, and no schema descriptions, the description lacks details on critical parameters (clear, restore_ime) and does not mention the output or side effects beyond focusing. The agent would need additional knowledge to use the tool correctly.

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

Parameters2/5

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

With 0% schema description coverage, the description must compensate but only explains the 'method' parameter. It does not describe 'text' format, 'clear' behavior, 'device_id' usage, or 'restore_ime' purpose, leaving significant gaps for correct invocation.

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 'Type text into the focused field,' which is a specific verb and resource. It distinguishes itself from sibling tools like tap, key_event, and clear_text by focusing on text input.

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

Usage Guidelines3/5

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

The description provides guidance on selecting between 'auto' and 'raw' methods based on backend availability and reliability. However, it does not explicitly compare input_text to sibling tools like tap or key_event, leaving the agent to infer when this tool is preferred over alternatives.

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

key_eventA
Destructive

Press a named key (home, back, recent, volume_up, ...) or raw Android keycode.

ParametersJSON Schema
NameRequiredDescriptionDefault
keyYes
device_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already indicate destructiveHint=true and readOnlyHint=false, so the description does not need to re-state mutation. It adds value by specifying the range of keys (named/keycode). No additional behavioral traits 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?

Single sentence, no unnecessary words. All information is front-loaded and relevant.

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 press action, the description covers the main purpose and key parameter, but lacks mention of device_id and error conditions. With an output schema present, return values are handled externally. Still, incomplete parameter coverage hurts completeness.

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

Parameters2/5

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

Schema coverage is 0%, so the description must clarify parameters. It explains the 'key' parameter with examples but entirely omits 'device_id'. This is a significant gap.

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

Purpose5/5

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

The description clearly states the tool's action ('press a named key') and provides specific examples (home, back, recent, volume_up) and mentions raw Android keycodes. It differentiates from sibling tools like tap and swipe by focusing on hardware-style key presses.

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 examples of named keys and raw keycodes, implicitly guiding when to use this tool (for hardware key presses) vs siblings (touch, text). However, it lacks explicit 'when not to use' or alternative tool references.

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

launch_appC
Destructive

Launch an app and, by default, wait until it is confirmed foreground.

ParametersJSON Schema
NameRequiredDescriptionDefault
stopNo
waitNo
timeoutNo
device_idYes
package_nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior3/5

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

The description adds behavioral context beyond annotations by specifying the default wait behavior. However, it does not disclose effects like whether it brings the app to foreground if already running, or handles launch failures.

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, making it concise and front-loaded. However, brevity comes at the cost of omitting important details about parameters like 'stop'.

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

Completeness2/5

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

Given 5 parameters and no schema descriptions, the description is overly brief. It does not cover core aspects like the 'stop' functionality or timeout behavior, leaving the tool inadequately documented for an agent to use correctly.

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

Parameters2/5

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

With 0% schema description coverage, the description only explains the 'wait' parameter effect. Other parameters like 'stop', 'timeout', and 'device_id' are left undefined, failing to add meaning beyond the raw 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 action 'Launch an app' and the default behavior of waiting until foreground. However, it omits that the tool can also stop an app via the 'stop' parameter, which adds ambiguity.

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

Usage Guidelines2/5

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

No explicit guidance on when to use this tool vs alternatives like 'wait_for_app' or 'tap'. The description implies usage for launching but does not provide exclusions or context for choosing this over siblings.

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

list_appsB
Read-onlyIdempotent

List installed package names on the device.

ParametersJSON Schema
NameRequiredDescriptionDefault
device_idYes
third_party_onlyNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, openWorldHint, idempotentHint true and destructiveHint false, so the agent knows this is safe and idempotent. The description adds that it returns package names but does not mention any limitations (e.g., filtering by third_party_only). It does not contradict 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 one short sentence with no wasted words. It is highly concise.

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 the existence of an output schema (not shown) and strong annotations, the description is minimally adequate. However, it lacks parameter documentation and does not state the output format (list of strings). It could be more complete.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must explain parameters. It only says 'installed package names' but does not clarify that device_id is required or that third_party_only controls whether system apps are included. The agent must infer from defaults.

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

Purpose5/5

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

The description states the tool lists installed package names on the device. The verb 'list' and resource 'package names' are specific. Among siblings like search_apps and get_current_app, this tool's purpose is clearly to enumerate all installed packages.

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 search_apps or get_current_app. No exclusion or context is given.

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

list_devicesA
Read-onlyIdempotent

List all currently visible Android devices (USB and already-connected WiFi).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already provide readOnlyHint, openWorldHint, idempotentHint, destructiveHint. The description adds context about the scope ('currently visible') and connection types (USB and WiFi), which clarifies what the tool returns beyond the annotations. No contradictory information.

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

Conciseness5/5

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

A single, front-loaded sentence that covers the core purpose without any wasted words. Efficient and clear.

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?

Given no parameters and rich annotations (readOnlyHint, etc.), the description is complete. The output schema exists to cover return values, so no additional details are necessary.

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 schema coverage is 100%. According to rules, baseline is 4. No parameter descriptions are needed, and the description does not provide redundant param info.

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 'List' and the resource 'currently visible Android devices (USB and already-connected WiFi)', distinguishing it from sibling tools like reconnect_remembered_devices or pairing tools. It is specific about scope and connection types.

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 for discovering available devices, but does not explicitly state when to use or when not to use this tool versus alternatives like list_remembered_devices. No exclusions or internal/external guidance is provided.

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

list_remembered_devicesA
Read-onlyIdempotent

List WiFi device_ids previously paired/connected, whether or not currently reachable.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already provide readOnlyHint, openWorldHint, idempotentHint, and destructiveHint. The description adds significant context by noting that devices are listed even if not currently reachable, which is a behavioral trait beyond what annotations convey. There is no contradiction.

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 of 12 words that immediately conveys the core functionality. No extraneous information.

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?

Given the tool has no parameters and an output schema exists, the description fully informs the agent about what the tool returns: a list of previously paired/connected WiFi device_ids, including those not currently reachable. No gaps remain.

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 the baseline is 4 per guidelines. The description adds no parameter info (none needed), but it is sufficient.

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 it lists WiFi device_ids that were previously paired or connected, regardless of current reachability. It uses a specific verb ('List') and resource ('WiFi device_ids'), and the 'whether or not currently reachable' clause distinguishes it from a sibling like list_devices that might only show active connections.

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

Usage Guidelines3/5

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

The description implies that this tool is for remembered devices (past connections) and not just current ones, but it does not explicitly state when to use this versus sibling tools like list_devices. It provides clear context but lacks explicit exclusions or alternative tool references.

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

ocr_screenA
Read-onlyIdempotent

Run OCR on the current screen for UIs with no usable accessibility tree (canvas/games/WebView). Returns matched text + bounding box + confidence.

ParametersJSON Schema
NameRequiredDescriptionDefault
device_idYes
min_confidenceNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior4/5

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

Annotations already mark the tool as readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds value by specifying the return format (matched text, bounding box, confidence), which goes beyond annotations. It does not describe failure modes or performance, but the core behavior is clear.

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 long, front-loads the purpose, and contains no unnecessary words. Every sentence adds value.

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 that the tool has an output schema (covering return values), the description is mostly complete for a simple OCR tool. However, the lack of parameter explanations and the absence of details on language support or failure cases mean it falls short of being fully comprehensive.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must explain parameters. It does not mention 'device_id' or 'min_confidence' at all. The description only implies that confidence is returned, but does not explain how the min_confidence parameter affects filtering. This is a significant gap.

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

Purpose5/5

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

The description clearly states the tool performs OCR on the current screen, specifies the target use case (no usable accessibility tree), and lists return values (text, bounding box, confidence). This differentiates it from sibling tools like ocr_tap and dump_ui.

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 tells when to use the tool ('for UIs with no usable accessibility tree'), providing explicit context. However, it does not explicitly mention when not to use it or name alternative tools, leaving a minor gap.

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

ocr_tapA
Destructive

Find text on screen via OCR (best fuzzy match) and tap its center. Raises if no good match is found.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYes
exactNo
device_idYes
min_similarityNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already show destructiveHint=true and readOnlyHint=false. The description adds that it uses 'best fuzzy match' and raises an error on no match, providing behavioral context beyond 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?

Single sentence, front-loaded with main action, no wasted words. Perfectly concise for the complexity.

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?

Description mentions failure case but lacks details on parameter tuning (e.g., exact vs fuzzy, similarity threshold). Output schema covers returns, so completeness is adequate but not rich.

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

Parameters2/5

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

Schema coverage is 0% and description does not explain parameters. 'text' and 'exact' are implied by the description, but 'device_id' and 'min_similarity' are not mentioned, leaving parameter semantics vague.

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

Purpose5/5

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

Description clearly states the tool finds text via OCR and taps its center. This distinguishes it from sibling tools like 'tap' (coordinates) and 'ocr_screen' (just OCR), providing a specific verb+resource+action.

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: for tapping text found by OCR. However, no explicit when-not-to-use or alternatives are given, leaving the agent to infer context from sibling tool names.

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

pair_with_codeB
Destructive

Pair with an Android 11+ wireless-debugging device using its six-digit code.

ParametersJSON Schema
NameRequiredDescriptionDefault
ipYes
codeYes
pairing_portYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior2/5

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

Annotations already indicate destructiveHint=true. Description only states 'pair', adding no further behavioral details such as success/failure outcomes, side effects, or required device state. Minimal added value beyond 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?

Single sentence of 12 words, front-loaded with purpose. No wasted words; efficient and direct.

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 pairing tool with an output schema, the basic action is covered. However, it lacks context like prerequisite device state (pairing mode) and expected outcomes, which would aid completeness.

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

Parameters2/5

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

Adds that 'code' is six-digit, but provides no description for 'ip' or 'pairing_port' format or acceptable values. Schema coverage is 0%, so description only partially compensates.

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?

Clearly states the action (pair), resource (Android wireless-debugging device), and method (six-digit code). Differentiates from sibling tools like tcpip_pair_device and connect_device by specifying the code-based pairing method.

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?

Implies usage for Android 11+ wireless debugging, but does not explicitly state when to use this tool over alternatives like tcpip_pair_device or connect_device. No exclusion criteria or prerequisites are mentioned.

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

reconnect_remembered_devicesA
Destructive

Attempt to reconnect every remembered WiFi ADB device.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already indicate destructiveHint=true and readOnlyHint=false. The description adds 'Attempt' hinting at potential failure, but does not elaborate on what gets modified (e.g., connection state). With annotations covering core traits, the description adds moderate value.

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, no waste. Perfectly sized for the tool's simplicity.

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 no parameters and existence of an output schema, the description adequately covers purpose and scope. Could mention side effects or error handling, but not critical for a simple reconnection tool.

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?

No parameters exist (schema coverage 100%), so baseline is 4. The description clarifies the scope: 'every remembered WiFi ADB device', which adds meaning beyond the tool name.

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 'reconnect' and the resource 'every remembered WiFi ADB device'. It distinguishes from sibling tools like 'list_remembered_devices' (listing) and 'connect_device' (single device).

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

Usage Guidelines2/5

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

No explicit when-to-use or when-not-to-use guidance. The description implies usage when reconnecting all remembered devices, but lacks exclusions or alternatives. Given sibling tools, more context is needed.

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

screenshotB
Read-onlyIdempotent

Capture the current screen of the given device as an image.

ParametersJSON Schema
NameRequiredDescriptionDefault
device_idYes

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already provide readOnlyHint=true, destructiveHint=false, idempotentHint=true, openWorldHint=true. The description adds 'as an image' which is a minor behavioral detail. It does not discuss resolution, format, or side effects, but does not contradict 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 concise sentence that immediately communicates the tool's core function with no wasted words. It is well front-loaded and easy to parse.

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

Completeness2/5

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

Given no output schema, the description fails to clarify the return format (e.g., base64, file path, raw bytes). It also lacks detail on parameter semantics and prerequisites, making the description insufficient for a capture tool with a single parameter.

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

Parameters2/5

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

The single parameter 'device_id' has 0% schema description coverage. The tool description does not explain how to obtain or format this parameter (e.g., 'from list_devices'), providing no added value beyond the schema's name alone.

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 ('Capture'), the resource ('current screen'), and the output ('as an image'). It is specific and distinct from siblings like 'get_screen_size' or 'dump_ui', making 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 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 vs. alternatives like 'dump_ui' or 'get_screen_size'. It mentions 'given device' but lacks explicit context or exclusions, reducing its utility for selecting the right tool.

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

screen_summaryA
Read-onlyIdempotent

Return compact visible labels and bounds; prefer this over dump_ui for routine inspection.

ParametersJSON Schema
NameRequiredDescriptionDefault
device_idYes
max_itemsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, and non-destructive nature. Description adds 'compact' context but no additional behavioral details beyond what annotations provide.

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 clear front-loading of purpose and usage guidance. 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?

Given simple parameters, rich annotations, and presence of output schema, the description is mostly sufficient but lacks parameter documentation.

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

Parameters2/5

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

Schema description coverage is 0%, but the description does not explain any parameter semantics. Only implicit inference possible from names 'device_id' and 'max_items'.

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

Purpose5/5

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

Description explicitly states the tool returns 'compact visible labels and bounds' and contrasts with sibling dump_ui, making purpose specific and differentiable.

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?

Directly advises 'prefer this over dump_ui for routine inspection,' providing clear when-to-use guidance and an explicit alternative.

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

search_appsB
Read-onlyIdempotent

Search installed package names containing keyword.

ParametersJSON Schema
NameRequiredDescriptionDefault
keywordYes
device_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint, making the tool's safety profile clear. The description adds no further behavioral details, such as whether the search is case-sensitive or returns package names only.

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 essential information. It is appropriately brief for a simple search tool, though it could include more context without sacrificing conciseness.

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 the tool's simplicity (2 required parameters, no nested objects) and the presence of an output schema, the description provides enough to understand the basic operation. However, it lacks details on search behavior (e.g., exact vs. partial match, case sensitivity) that would be helpful 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?

The description explains the 'keyword' parameter ('containing `keyword`') but does not describe the 'device_id' parameter. With 0% schema description coverage, the description partially compensates but leaves one parameter unexplained.

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 ('Search') and the resource ('installed package names') and specifies the search parameter ('keyword'), distinguishing it from siblings like list_apps which lists all apps.

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 list_apps, get_current_app, or other search tools. The description implies usage for keyword-based search but does not explain when it is appropriate.

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

swipeB
Destructive

Swipe from (x1, y1) to (x2, y2) over duration seconds.

ParametersJSON Schema
NameRequiredDescriptionDefault
x1Yes
x2Yes
y1Yes
y2Yes
durationNo
device_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior3/5

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

Annotations indicate destructiveHint=true and readOnlyHint=false. Description adds no behavioral details beyond the basic action, such as smoothness or device-specific behavior.

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

Conciseness4/5

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

Single sentence, no unnecessary words. Front-loaded with purpose, but lacks depth.

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

Completeness2/5

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

With 6 parameters and an output schema, the description is too brief. It omits coordinate system, coordinate units, and behavior edge cases (e.g., duration=0).

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

Parameters2/5

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

Schema description coverage is 0%. Description provides no additional meaning for the 6 parameters; just restates coordinate names already in schema.

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 (swipe), start and end points, and duration. It distinguishes this tool from siblings like 'tap' and 'double_tap'.

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 swipe versus alternatives like 'hyper_swipe' or 'scroll'. Missing context for when this tool is appropriate.

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

tapC
Destructive

Tap the screen at pixel coordinates (x, y).

ParametersJSON Schema
NameRequiredDescriptionDefault
xYes
yYes
device_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior2/5

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

Annotations indicate destructiveHint=true and readOnlyHint=false, but the description adds no behavioral context such as side effects (e.g., triggering actions). It fails to supplement the annotations with practical implications.

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 with no wasted words. Front-loaded with the core action and parameters.

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

Completeness2/5

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

Despite having an output schema and simple function, it lacks coordinate system origin, bounds, or error behavior. The required device_id is not explained, making it incomplete for reliable use.

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

Parameters3/5

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

The description clarifies that x and y are pixel coordinates, adding value over the schema (types only). However, it omits the required device_id parameter entirely, leaving it undocumented.

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

Purpose4/5

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

The description clearly states the action (tap) and resource (screen) with required inputs (x,y). However, it does not distinguish this tool from similar siblings like tap_element or double_tap.

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 versus alternatives. For instance, it should indicate that tap_element is preferred when targeting a UI element. The description leaves the agent to infer usage context.

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

tap_elementB
Destructive

Find a UI element by attribute(s) and tap its center. Raises if no match is found.

ParametersJSON Schema
NameRequiredDescriptionDefault
textNo
exactNo
device_idYes
class_nameNo
resource_idNo
content_descNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior3/5

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

Annotations already indicate destructiveHint=true (side effects) and readOnlyHint=false. The description adds that it 'raises if no match is found', which is helpful. However, it does not disclose visibility requirements or scrolling behavior. The description complements annotations but does not go beyond them significantly.

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

Conciseness5/5

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

Two sentences with the main action and error condition front-loaded. No unnecessary words. Every sentence is essential.

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

Completeness2/5

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

Given six parameters and zero schema descriptions, the description is incomplete. It does not explain search logic, parameter combinations, or required device_id. The presence of an output schema does not compensate for missing input documentation.

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

Parameters1/5

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

The schema has 0% description coverage, so the description must explain parameters. It briefly mentions 'by attribute(s)' but does not explain any of the six parameters (e.g., what 'exact' means, or how attributes combine). This leaves the agent to guess from parameter names alone.

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 (find and tap), the resource (UI element), and the method (by attributes). It distinguishes from sibling tools like 'tap' (coordinate-based) and 'find_element' (find only) by including both find and tap in one action.

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

Usage Guidelines2/5

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

The description provides no explicit guidance on when to use this tool versus alternatives like 'tap' or 'double_tap'. It implies attribute-based search but does not exclude coordinate-based tapping or suggest prerequisites.

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

tcpip_pair_deviceA
Destructive

Switch a USB-connected, already-trusted device into WiFi mode and connect to it. Requires the device to have been used over USB at least once already.

ParametersJSON Schema
NameRequiredDescriptionDefault
ipYes
portNo
usb_serialYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already indicate destructiveHint=true and readOnlyHint=false, so the description's mention of switching modes is consistent. The description adds the prerequisite but doesn't elaborate on side effects, error states, or behavioral nuances beyond what annotations provide.

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

Conciseness5/5

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

Two sentences, no fluff. Essential information is front-loaded and every sentence adds value.

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 the tool's complexity (3 parameters, no parameter docs) and the presence of an output schema, the description is adequate but leaves gaps. It does not explain how to obtain usb_serial, expected IP format, or what happens on failure. The output schema reduces the need to document return values.

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

Parameters1/5

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

With 0% schema description coverage, the description must compensate for missing parameter documentation. It does not explain the purpose of 'ip', 'port', or 'usb_serial' beyond implying they are connection parameters. No additional meaning is provided.

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 (switch to WiFi mode and connect) and the resource (USB-connected, already-trusted device). It distinguishes this tool from siblings like connect_device or pair_with_code by specifying the prerequisite of prior USB use.

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 mentions a prerequisite ('Requires the device to have been used over USB at least once already'), which guides usage. However, it does not explicitly state when to use this tool vs alternatives or when not to use it.

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

text_input_capabilitiesA
Read-onlyIdempotent

Inspect the active IME and whether reliable Unicode input is available.

ParametersJSON Schema
NameRequiredDescriptionDefault
device_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds specific behavioral context about inspecting IME and Unicode input reliability, which goes beyond the annotations without contradiction.

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 with the verb front-loaded. Every word contributes to the purpose, and there is no redundancy or 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?

Given the presence of a full output schema and rich annotations, the description is sufficiently complete. It covers the essential purpose for a simple inspection tool, though it could briefly note the parameter's role.

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

Parameters2/5

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

The description does not mention or elaborate on the sole parameter 'device_id.' With schema description coverage at 0%, the description offers no additional meaning beyond the schema's basic type and title.

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 'Inspect' and the specific resources: 'active IME' and 'whether reliable Unicode input is available.' This is precise and distinguishes the tool from siblings like 'input_text' or 'key_event' that perform actions rather than inspections.

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 provide any guidance on when to use this tool versus alternatives. There is no mention of prerequisites, context, or exclusions, leaving the agent to infer usage solely from the tool's purpose.

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

wait_for_appB
Read-onlyIdempotent

Wait until the requested Android package becomes the foreground app.

ParametersJSON Schema
NameRequiredDescriptionDefault
timeoutNo
intervalNo
device_idYes
package_nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.3/5.0
Behavior3/5

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

Annotations declare readOnlyHint, openWorldHint, idempotentHint, and non-destructive. The description adds that the tool waits and checks foreground status, which is consistent. However, it does not disclose timeout or return behavior beyond the schema.

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

Conciseness5/5

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

The description is a single concise sentence that directly states the tool's purpose. No wasted words.

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

Completeness2/5

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

The description lacks information about return values, timeout behavior, error conditions, and prerequisites. Given the polling nature and sibling tools, more context is needed for effective use.

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

Parameters1/5

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

Schema description coverage is 0%, and the description provides no parameter details. It vaguely references 'requested Android package' but doesn't explain timeout, interval, or required device_id. This is a major gap.

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

Purpose5/5

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

The description clearly states the tool waits for an Android package to become the foreground app, specifying the verb 'wait', the resource 'Android package', and the condition. This distinguishes it from siblings like wait_for_element or get_current_app.

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

Usage Guidelines3/5

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

The description implies usage after launching an app, but does not explicitly state when to use versus alternatives like wait_for_element or launch_app. No exclusions or prerequisites are mentioned.

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

wait_for_elementC
Read-onlyIdempotent

Wait until an accessibility element appears, then return it.

ParametersJSON Schema
NameRequiredDescriptionDefault
textNo
exactNo
timeoutNo
intervalNo
device_idYes
class_nameNo
resource_idNo
content_descNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.7/5.0
Behavior3/5

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

Annotations already indicate readOnly, idempotent, non-destructive. Description adds the waiting behavior and that it returns the element. But it omits timeout and interval behavior, which are critical for understanding execution.

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?

Extremely concise, one sentence. However, it may be too short to convey needed detail; still, no wasted words.

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

Completeness2/5

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

Given 8 parameters, many sibling tools, and no output schema, the description is too sparse. It does not explain matching criteria, return value, or error conditions.

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

Parameters1/5

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

Schema coverage is 0%, yet description adds no information about any of the 8 parameters. The schema names are somewhat self-explanatory, but the agent gets no additional help from the description.

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

Purpose4/5

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

Description clearly states it waits for an accessibility element and returns it. However, it does not differentiate from sibling tools like find_element, which also finds elements but may not wait.

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. It does not explain that this is for waiting until an element appears, whereas find_element might return immediately if not found.

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. Dates show when Glama detected each change.

  1. 27 tool updatesv0.3.2
    • First observedclear_text
    • First observedconnect_device
    • First observeddouble_tap
    • First observeddump_ui
    • First observedfind_element
    • First observedget_current_app
    • First observedget_screen_size
    • First observedinput_text
    • First observedkey_event
    • First observedlaunch_app
    • First observedlist_apps
    • First observedlist_devices
    • First observedlist_remembered_devices
    • First observedocr_screen
    • First observedocr_tap
    • First observedpair_with_code
    • First observedreconnect_remembered_devices
    • First observedscreen_summary
    • First observedscreenshot
    • First observedsearch_apps
    • First observedswipe
    • First observedtap
    • First observedtap_element
    • First observedtcpip_pair_device
    • First observedtext_input_capabilities
    • First observedwait_for_app
    • First observedwait_for_element

TDQS

B3.2/5.0
Disambiguation4/5

Most tools have clearly distinct purposes, such as tap vs double_tap vs swipe vs key_event. However, there is some overlap between UI inspection tools (dump_ui vs screen_summary vs find_element vs ocr_screen) and between device connection tools (connect_device vs pair_with_code vs tcpip_pair_device), though descriptions help differentiate them.

Naming Consistency3/5

Tool names are mostly snake_case but mix verb_noun (e.g., list_devices, tap, input_text) with noun phrases (e.g., screenshot, key_event, screen_summary). Some names like 'tcpip_pair_device' are awkward. Overall readable but not fully consistent.

Tool Count3/5

27 tools is on the high side for an MCP server. While each tool has utility, the set could potentially be streamlined (e.g., combining some UI inspection tools). The count feels slightly excessive for the domain scope.

Completeness3/5

The tool set covers many key operations (device discovery, screen capture, input, UI inspection, app management), but lacks common actions like device info retrieval, app install/uninstall, clipboard access, and explicit scrolling. These gaps may limit automation scenarios.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • F
    license
    A
    quality
    D
    maintenance
    A MCP server that enables AI assistants to control Android devices via ADB, supporting device info, screen control, input simulation, app management, shell execution, file transfer, and UI parsing.
    20
    -
  • A
    license
    B
    quality
    A
    maintenance
    A comprehensive MCP server that enables AI agents to interact with Android devices through Android Debug Bridge (ADB), offering 198 tools for device control, app management, diagnostics, and more.
    100
    75
    15
    Apache 2.0
  • F
    license
    Not graded
    quality
    D
    maintenance
    A powerful MCP server that provides comprehensive Android device automation capabilities through ADB, enabling AI agents to interact with Android devices for testing, automation, and device control tasks.
    1
    -

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/xiaoran7/Agent-Android'

If you have feedback or need assistance with the MCP directory API, please join our Discord server