Agent-Android
This server lets AI agents discover and control Android devices over MCP: inspect screens, automate UI interactions, manage apps and text input, and handle connected devices.
Discover devices: list USB/WiFi devices, connect to WiFi ADB endpoints, pair via six-digit code, and reconnect remembered devices.
Inspect the screen: capture screenshots, get screen dimensions, dump the accessibility UI tree, or get a compact visible-label summary.
Use OCR: read text from screens without accessibility trees and tap text found via OCR.
Find and interact with UI elements: locate elements by text, resource ID, class, or content description; tap them, wait for them, or tap coordinates.
Perform gestures and input: tap, double-tap, swipe, send key events, type/clear text, and check text-input/IME capabilities.
Manage apps: list/search installed packages, launch apps, wait for a foreground app, and get the current foreground package.
Coordinate actions: read-only hints and destructive-action annotations help agents avoid unintended changes, and the README describes a per-device serialized async command queue with status/cancel support.
Allows controlling Android devices via ADB for automation, testing, and interaction, including screen capture, clicks, text input, app management, UI tree extraction, and OCR.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Agent-AndroidList connected devices and give a screen summary"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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。
推荐调用顺序
list_devices
screen_summary;无有效无障碍树时再用 screenshot 或 OCR
ind_element / wait_for_element
执行最小必要动作
再次读取 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 toolsclear_textBDestructive
Clear text in the currently focused input field.
| Name | Required | Description | Default |
|---|---|---|---|
| device_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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_deviceADestructive
Connect to a WiFi device by ip:port (already tcpip-enabled or paired).
| Name | Required | Description | Default |
|---|---|---|---|
| ip | Yes | ||
| port | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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_tapADestructive
Double-tap the screen at pixel coordinates (x, y).
| Name | Required | Description | Default |
|---|---|---|---|
| x | Yes | ||
| y | Yes | ||
| device_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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_uiARead-onlyIdempotent
Get all UI elements on screen (text/resource-id/class/bounds/clickable) via the accessibility tree.
| Name | Required | Description | Default |
|---|---|---|---|
| device_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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_elementBRead-onlyIdempotent
Find the first UI element matching the given (non-None) attributes. Returns None if not found.
| Name | Required | Description | Default |
|---|---|---|---|
| text | No | ||
| exact | No | ||
| device_id | Yes | ||
| class_name | No | ||
| resource_id | No | ||
| content_desc | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
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.
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.
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.
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.
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.
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_appARead-onlyIdempotent
Get the package name of the currently foregrounded app.
| Name | Required | Description | Default |
|---|---|---|---|
| device_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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_sizeARead-onlyIdempotent
Get active and physical screen dimensions without transferring a screenshot.
| Name | Required | Description | Default |
|---|---|---|---|
| device_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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_textADestructive
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.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | ||
| clear | No | ||
| method | No | auto | |
| device_id | Yes | ||
| restore_ime | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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_eventADestructive
Press a named key (home, back, recent, volume_up, ...) or raw Android keycode.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | ||
| device_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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_appCDestructive
Launch an app and, by default, wait until it is confirmed foreground.
| Name | Required | Description | Default |
|---|---|---|---|
| stop | No | ||
| wait | No | ||
| timeout | No | ||
| device_id | Yes | ||
| package_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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_appsBRead-onlyIdempotent
List installed package names on the device.
| Name | Required | Description | Default |
|---|---|---|---|
| device_id | Yes | ||
| third_party_only | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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_devicesARead-onlyIdempotent
List all currently visible Android devices (USB and already-connected WiFi).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
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.
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.
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.
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.
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.
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_devicesARead-onlyIdempotent
List WiFi device_ids previously paired/connected, whether or not currently reachable.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
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.
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.
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.
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.
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.
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_screenARead-onlyIdempotent
Run OCR on the current screen for UIs with no usable accessibility tree (canvas/games/WebView). Returns matched text + bounding box + confidence.
| Name | Required | Description | Default |
|---|---|---|---|
| device_id | Yes | ||
| min_confidence | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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_tapADestructive
Find text on screen via OCR (best fuzzy match) and tap its center. Raises if no good match is found.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | ||
| exact | No | ||
| device_id | Yes | ||
| min_similarity | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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_codeBDestructive
Pair with an Android 11+ wireless-debugging device using its six-digit code.
| Name | Required | Description | Default |
|---|---|---|---|
| ip | Yes | ||
| code | Yes | ||
| pairing_port | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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_devicesADestructive
Attempt to reconnect every remembered WiFi ADB device.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
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.
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.
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.
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.
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.
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.
screenshotBRead-onlyIdempotent
Capture the current screen of the given device as an image.
| Name | Required | Description | Default |
|---|---|---|---|
| device_id | Yes |
TDQS
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.
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.
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.
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.
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.
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_summaryARead-onlyIdempotent
Return compact visible labels and bounds; prefer this over dump_ui for routine inspection.
| Name | Required | Description | Default |
|---|---|---|---|
| device_id | Yes | ||
| max_items | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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_appsBRead-onlyIdempotent
Search installed package names containing keyword.
| Name | Required | Description | Default |
|---|---|---|---|
| keyword | Yes | ||
| device_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
swipeBDestructive
Swipe from (x1, y1) to (x2, y2) over duration seconds.
| Name | Required | Description | Default |
|---|---|---|---|
| x1 | Yes | ||
| x2 | Yes | ||
| y1 | Yes | ||
| y2 | Yes | ||
| duration | No | ||
| device_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
tapCDestructive
Tap the screen at pixel coordinates (x, y).
| Name | Required | Description | Default |
|---|---|---|---|
| x | Yes | ||
| y | Yes | ||
| device_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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_elementBDestructive
Find a UI element by attribute(s) and tap its center. Raises if no match is found.
| Name | Required | Description | Default |
|---|---|---|---|
| text | No | ||
| exact | No | ||
| device_id | Yes | ||
| class_name | No | ||
| resource_id | No | ||
| content_desc | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
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.
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.
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.
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.
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.
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_deviceADestructive
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.
| Name | Required | Description | Default |
|---|---|---|---|
| ip | Yes | ||
| port | No | ||
| usb_serial | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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_capabilitiesARead-onlyIdempotent
Inspect the active IME and whether reliable Unicode input is available.
| Name | Required | Description | Default |
|---|---|---|---|
| device_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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_appBRead-onlyIdempotent
Wait until the requested Android package becomes the foreground app.
| Name | Required | Description | Default |
|---|---|---|---|
| timeout | No | ||
| interval | No | ||
| device_id | Yes | ||
| package_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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_elementCRead-onlyIdempotent
Wait until an accessibility element appears, then return it.
| Name | Required | Description | Default |
|---|---|---|---|
| text | No | ||
| exact | No | ||
| timeout | No | ||
| interval | No | ||
| device_id | Yes | ||
| class_name | No | ||
| resource_id | No | ||
| content_desc | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
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.
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.
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.
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.
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.
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.
27 tool updates
v0.3.2- First observed
clear_text - First observed
connect_device - First observed
double_tap - First observed
dump_ui - First observed
find_element - First observed
get_current_app - First observed
get_screen_size - First observed
input_text - First observed
key_event - First observed
launch_app - First observed
list_apps - First observed
list_devices - First observed
list_remembered_devices - First observed
ocr_screen - First observed
ocr_tap - First observed
pair_with_code - First observed
reconnect_remembered_devices - First observed
screen_summary - First observed
screenshot - First observed
search_apps - First observed
swipe - First observed
tap - First observed
tap_element - First observed
tcpip_pair_device - First observed
text_input_capabilities - First observed
wait_for_app - First observed
wait_for_element
TDQS
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.
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.
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.
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
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
MCP server for building and testing AI agents with multi-model experimentation and insights.
Melaya is a remote MCP server. It gives an assistant hands on your own Android phone and browser: it reads the screen through the accessibility tree, then taps, types and navigates inside the apps and sites you allow-list, with no per-app API. It also builds, schedules and runs agent pipelines across 6k+ connected tools. OAuth 2.1, nothing to install.
Control real Android and iOS devices with LLM agents — tap, swipe, type, automate flows.
MCP server connecting AI agents to 100+ apps (Gmail, Slack, Notion, GitHub) via one-click OAuth.
Related MCP Servers
- FlicenseAqualityDmaintenanceA MCP server that enables AI assistants to control Android devices via ADB, supporting device info, screen control, input simulation, app management, shell execution, file transfer, and UI parsing.20-
- AlicenseBqualityAmaintenanceA comprehensive MCP server that enables AI agents to interact with Android devices through Android Debug Bridge (ADB), offering 198 tools for device control, app management, diagnostics, and more.1007515Apache 2.0
- AlicenseNot gradedqualityDmaintenanceA MCP server that enables LLMs to control Android devices via ADB, supporting input, UI hierarchy, device management, and shell commands.14MIT
- FlicenseNot gradedqualityDmaintenanceA powerful MCP server that provides comprehensive Android device automation capabilities through ADB, enabling AI agents to interact with Android devices for testing, automation, and device control tasks.1-
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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