Skip to main content
Glama
swamiabhishek45

Android Control MCP Server

Android Control MCP Server

一个基于 Node.js 构建的生产级**模型上下文协议(MCP)**服务器,使 AI 助手(如 Claude Desktop、Cursor 以及自定义智能体工作流)能够观察、推理并控制已连接的 Android 设备。


🌟 功能特性

  • 👀 计算机使用观察:高分辨率 PNG 屏幕截图直接以 MCP 图像块形式返回,并附带设备元数据。

  • 🔍 UIAutomator 层级解析:智能 XML 转储解析器,将冗长的 Android UI 树转换为紧凑、结构化的 JSON。

  • 🎯 语义元素点击:通过可见文本、无障碍描述或资源 ID 点击按钮和控件,无需手动计算像素坐标。

  • ⚡ 快速手势与输入:像素级精确点击、多坐标滑动、方向滚动、硬件按键模拟以及经过 shell 转义处理的文本输入。

  • 📱 应用生命周期管理:通过包名启动应用,并检查当前聚焦的前台 Activity。

  • 🛡️ 安全与沙箱:输入坐标根据实际屏幕边界进行验证、严格的白名单按键码、参数清理、命令超时以及严格的 stderr 日志记录,确保 stdio MCP 流完整性。

  • 🔄 多设备支持:自动检测已连接的设备,或通过 ANDROID_DEVICE_ID 定位特定设备。


Related MCP server: Ultimate Android MCP

🏗️ 架构

AI Client (Claude Desktop, Cursor, Agent)
   │
   │ stdio transport (JSON-RPC)
   ▼
Node.js MCP Server
   │
   ├── Stderr Structured Logger
   ├── Zod Schema Validation
   │
   ├── ADB Controller Layer
   │   ├── Device Resolver (auto-detect or target serial)
   │   ├── Input Engine (tap, swipe, keyevent, text, scroll)
   │   ├── Screenshot Manager (exec-out binary stream)
   │   └── App Manager (launch, foreground inspection)
   │
   └── UIAutomator Engine
       ├── XML Hierarchy Dump & Normalizer
       ├── Bounds & Center Coordinate Extractor
       └── Semantic Element Finder & Click Resolver
   │
   ▼
Android Device / Emulator

📋 前置要求

  1. Node.js:v20.0.0 或更高版本(node -v)

  2. Android SDK Platform-Tools:已安装 ADB(adb)并可在系统 PATH 中访问(或通过 ADB_PATH 配置)。

  3. Android 设备或模拟器:

    • 物理设备:通过 USB 连接,启用开发者选项和USB 调试。

    • 模拟器:Android Studio AVD、Genymotion 或无头模拟器。

验证设备连接

adb devices -l

您应该看到设备被列为 device:

List of devices attached
emulator-5554          device product:sdk_gphone64_arm64 model:sdk_gphone64_arm64

🚀 安装与快速开始

# Clone or navigate to the repository
cd c:/Users/Abhishek/Code/mcp

# Install dependencies
npm install

# Run unit tests
npm test

# Start the MCP server
npm start

⚙️ 配置

创建 .env 文件或传入环境变量:

# Target device ID (serial number). If omitted and 1 device is connected, it auto-selects.
ANDROID_DEVICE_ID=

# Custom path to ADB executable if not in PATH
# Windows: C:\Users\<user>\AppData\Local\Android\Sdk\platform-tools\adb.exe
# macOS: /Users/<user>/Library/Android/sdk/platform-tools/adb
ADB_PATH=adb

# Log level: debug | info | warn | error
LOG_LEVEL=info

# Default ADB timeout in milliseconds
ADB_TIMEOUT_MS=15000

🔌 连接到 MCP 客户端

1. Claude Desktop 配置

将以下内容添加到您的 claude_desktop_config.json:

  • Windows:%APPDATA%\Claude\claude_desktop_config.json

  • macOS:~/Library/Application Support/Claude/claude_desktop_config.json

{
  "mcpServers": {
    "android-control": {
      "command": "node",
      "args": ["C:/Users/Abhishek/Code/mcp/src/index.js"],
      "env": {
        "ANDROID_DEVICE_ID": "",
        "ADB_PATH": "adb",
        "LOG_LEVEL": "info"
      }
    }
  }
}

2. Cursor / Windsurf MCP 配置

在 Cursor 的 Features > MCP Servers 或 Windsurf 设置中:

  • 名称:android-control

  • 类型:command

  • 命令:node C:/Users/Abhishek/Code/mcp/src/index.js


🛠️ MCP 工具参考

1. android_device_info

获取全面的设备硬件和操作系统元数据。

  • 参数:

    • deviceId (可选字符串):目标设备序列号。

  • 示例响应:

    {
      "deviceId": "emulator-5554",
      "model": "Pixel 8",
      "manufacturer": "Google",
      "androidVersion": "15",
      "sdk": 35,
      "resolution": {
        "width": 1080,
        "height": 2400
      },
      "connectionState": "connected"
    }

2. android_screenshot

将 Android 屏幕捕获为 MCP 图像内容块(image/png)。

  • 参数:

    • deviceId (可选字符串):目标设备序列号。

  • 返回:PNG base64 图像数据块 + 尺寸元数据。


3. android_ui_dump

将当前屏幕的 UIAutomator 层级转储为紧凑、AI 友好的 JSON 格式。

  • 参数:

    • deviceId (可选字符串):目标设备序列号。

  • 示例输出:

    {
      "package": "com.android.settings",
      "activity": "com.android.settings.Settings",
      "totalElements": 24,
      "interactiveElementsCount": 8,
      "elements": [
        {
          "index": 0,
          "text": "Network & internet",
          "resourceId": "android:id/title",
          "className": "TextView",
          "clickable": true,
          "bounds": [196, 340, 1016, 400],
          "center": [606, 370]
        }
      ]
    }

4. android_find_element

在当前屏幕上搜索符合特定条件的 UI 元素。

  • 参数:

    • text (可选字符串):可见文本(精确或部分匹配)。

    • contentDescription (可选字符串):无障碍标签。

    • resourceId (可选字符串):资源 ID。

    • className (可选字符串):控件类名。

    • clickable (可选布尔值):按可点击性过滤。

    • exactMatch (可选布尔值,默认 false):精确字符串匹配。


5. android_click_element

一步完成查找元素并点击其中心点。

  • 参数:

    • text (可选字符串):元素文本。

    • contentDescription (可选字符串):元素内容描述。

    • resourceId (可选字符串):元素资源 ID。

    • className (可选字符串):元素类名。


6. android_tap

在精确的 (x, y) 坐标处点击,并带有屏幕边界验证。

  • 参数:

    • x (数字):X 坐标。

    • y (数字):Y 坐标。


7. android_swipe

在两点之间执行拖拽/滑动手势。

  • 参数:

    • x1、y1 (数字):起始坐标。

    • x2、y2 (数字):结束坐标。

    • duration (可选数字,默认:300):持续时间(毫秒)。


8. android_type_text

在当前聚焦的输入框中输入文本。处理空格编码(%s)和 shell 字符转义。

  • 参数:

    • text (字符串):要输入的文本。


9. android_press_key

按下硬件键或导航键。

  • 支持的按键:HOME、BACK、ENTER、TAB、ESC、DELETE、SPACE、VOLUME_UP、VOLUME_DOWN、POWER、APP_SWITCH、CAMERA 等。

  • 参数:

    • key (字符串):按键名称或数字按键码。


10. android_scroll

根据实际屏幕尺寸计算的方向滚动。

  • 参数:

    • direction (字符串:up | down | left | right)

    • amount (可选数字):滚动距离(像素)。


11. android_launch_app

通过包名启动应用程序。

  • 参数:

    • packageName (字符串):例如 com.android.settings、com.google.android.youtube。

    • activity (可选字符串):特定的 Activity 名称。


12. android_current_app

检查当前聚焦的前台包和 Activity。


13. android_execute_action(统一计算机使用工具)

支持所有操作(tap、swipe、type、press_key、click_element、scroll、launch_app)的单一统一操作分发器。

{
  "action": "click_element",
  "text": "Wi-Fi"
}

🤖 推荐的 AI 工作流:观察 → 推理 → 行动 → 验证

1. OBSERVE:
   AI calls `android_screenshot` and `android_ui_dump`.

2. REASON:
   AI inspects visual and UI structure to identify target elements.

3. ACT:
   AI calls `android_click_element`, `android_type_text`, or `android_scroll`.

4. VERIFY:
   AI captures another screenshot/dump to confirm desired state change.

🧪 测试

运行自动化测试套件:

npm test

测试使用 Vitest 并模拟 ADB 执行层,允许在 CI/CD 期间无需连接物理 Android 设备即可进行完整的单元验证。


🔒 安全最佳实践

  • 无任意 Shell 执行:服务器不暴露原始的 adb shell 执行工具。

  • 安全进程调用:所有命令均使用 child_process.execFile 并带有显式参数数组,以防止 shell 注入。

  • 输入清理:包名、按键码和坐标参数均通过 Zod 模式和边界检查进行严格验证。

  • Stderr 隔离日志:所有日志仅定向到 stderr,以保持 stdout 上严格的 JSON-RPC 协议合规性。


📄 许可证

MIT

Available Tools

13 tools
android_click_elementB

Find and click a UI element on the current Android screen by its visible text, content description, or resource ID. Computes the center of the element and executes a precise tap.

ParametersJSON Schema
NameRequiredDescriptionDefault
textNoVisible text of the element to click
deviceIdNoOptional device ID
classNameNoClass name of the element to click
exactMatchNoWhether text matching must be exact
resourceIdNoResource ID of the element to click
contentDescriptionNoContent description of the element to click

TDQS

B3.2/5.0
Behavior3/5

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

The description discloses that it computes the center and executes a precise tap, which is useful. However, it does not mention failure behavior (e.g., element not found), whether it waits for the screen to stabilize, or that it is a mutating action. Since no annotations are provided, the description carries the full burden and could be more thorough.

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

Conciseness5/5

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

Two concise sentences with no fluff. The key action and locator types are front-loaded, and the behavioral detail about center computation follows logically. Very efficient.

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

Completeness2/5

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

The tool has six optional parameters with no required ones, yet the description does not clarify how to choose among them or what happens when multiple are provided. It also lacks details on error handling or return values, and there is no output schema. For a tool with ambiguous parameter usage, this is a significant gap.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema fully documents all six parameters. The description adds minimal value beyond that, only restating that it uses text, content description, or resource ID. It does not explain how parameters combine or take precedence, but the baseline of 3 applies since the schema covers semantics.

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

Purpose4/5

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

The description states a clear verb ('click') and resource ('UI element'), and lists three locator types. It implies it is element-based, distinguishing it from the coordinate-based android_tap sibling, though it doesn't explicitly name that alternative.

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 siblings like android_tap or android_find_element. It doesn't state that android_tap is for raw coordinates or that this is preferred for element-based interactions. The context is implied but not explicit.

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

android_current_appA

Get the package name and activity of the currently focused foreground Android application.

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceIdNoOptional device ID

TDQS

A3.8/5.0
Behavior2/5

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

No annotations are provided, so the description must carry the full burden of behavioral disclosure. It only states the action ('Get') without mentioning that this is a read-only operation, whether it requires special permissions, or how it behaves when no app is focused. For a tool that queries system state, this lack of behavioral context leaves an agent uncertain about side effects and prerequisites, earning a low score.

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 unnecessary words. It efficiently states the verb and resource without redundancy, making it highly concise and structurally sound.

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

Completeness4/5

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

For a simple getter with one optional parameter and no output schema, the description adequately explains what is returned (package name and activity). It does not elaborate on device selection or error handling, but given the tool's simplicity and the optional nature of the parameter, these omissions are minor. The description is complete enough for an agent to use the tool correctly in most scenarios.

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

Parameters3/5

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

The schema has 100% description coverage for the single optional parameter deviceId ('Optional device ID'), and the tool description adds no additional meaning about this parameter. The description does not discuss how deviceId is used or its impact on results. With high schema coverage, the baseline is 3, and this description does not elevate it.

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

Purpose5/5

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

The description uses a specific verb 'Get' and names the exact resource: 'package name and activity of the currently focused foreground Android application.' This clearly distinguishes it from siblings like android_screenshot or android_ui_dump, which have different purposes. An agent can immediately understand what this tool does and how it differs.

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

Usage Guidelines4/5

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

The description provides clear context: use when you need the identity of the current foreground app. It does not explicitly list alternatives or when not to use it, but the specificity of the purpose makes the usage scenario obvious. Without exclusions or references to sibling tools, it falls short of a 5, but is above a 3 because the context is unambiguous.

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

android_device_infoA

Get detailed information about the connected Android device, including device ID, model, manufacturer, Android OS version, SDK level, and screen resolution.

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceIdNoOptional target Android device ID/serial. If omitted, auto-selects the connected device.

TDQS

A3.6/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It states the operation is 'get' which clearly implies a read-only action, but it does not explicitly say it is non-destructive or describe behavior on errors (e.g., if no device is connected). While the intent is clear, it lacks explicit safety/error context.

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

Conciseness5/5

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

The description is a single, focused sentence with no redundant words. It front-loads the purpose and enumerates the returned fields, making it easy to scan.

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

Completeness4/5

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

For a simple read-only tool with one optional parameter and no output schema, the description covers the returned information and the connection prerequisite. It does not mention error handling or output format, but these are minor for a straightforward info-gathering tool, so slightly above average.

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

Parameters3/5

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

The schema has 100% parameter coverage, fully describing the optional `deviceId` parameter including its effect when omitted. The description adds no additional meaning beyond what the schema already provides, so the baseline of 3 is appropriate.

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

Purpose5/5

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

The description clearly states the action (get) and resource (detailed information about the Android device), and enumerates the specific fields returned (device ID, model, manufacturer, OS version, SDK level, screen resolution). This distinguishes it from sibling tools, which are all actions or app-specific queries.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. It does not mention any prerequisites, typical use cases, or situations where it would be inappropriate. Since siblings are all actions, the distinction is implied but not explicit, so below average.

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

android_execute_actionC

Execute a high-level Android action in a single tool call. Supports tap, swipe, type, press_key, click_element, scroll, and launch_app.

ParametersJSON Schema
NameRequiredDescriptionDefault
xNoX coordinate for tap
yNoY coordinate for tap
x1NoStart X for swipe
x2NoEnd X for swipe
y1NoStart Y for swipe
y2NoEnd Y for swipe
keyNoKey name for press_key (HOME, BACK, ENTER, etc.)
textNoText to type or element text to search for click_element
actionYesThe action to perform on the Android device
amountNoScroll distance in pixels
activityNoActivity name for launch_app
deviceIdNoOptional device ID
durationNoDuration in ms for swipe
directionNoScroll direction for scroll action
resourceIdNoElement resource ID for click_element
packageNameNoPackage name for launch_app
contentDescriptionNoElement content description for click_element

TDQS

C2.1/5.0
Behavior1/5

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

No annotations are provided, so the description must disclose behavioral traits, but it offers none. It does not mention that this is a convenience wrapper, any side effects, permission requirements, error behavior, or results of the action. The description simply lists action types without revealing how the underlying device interaction behaves or what happens on failure. This is a significant gap for a tool with no safety annotations.

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

Conciseness3/5

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

The description is a single sentence and is front-loaded with the core purpose, so it is concise in wording. However, it is under-specified; the list of actions is useful but lacks the essential usage context that would make the sentence earn its place. It is not overly verbose, but it is minimal to the point of being incomplete, so it is only moderately well-structured.

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

Completeness1/5

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

Given the tool's complexity (17 parameters, 7 possible actions, no output schema), the description is grossly incomplete. It does not explain how to invoke each action, which parameters are required, how coordinates are resolved, or what the response contains. The tool cannot be used correctly without external knowledge. The absence of any param-action mapping is a critical flaw, making this definition inadequate for reliable agent invocation.

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

Parameters2/5

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

Schema description coverage is 100%, so each parameter has a basic description (e.g., 'X coordinate for tap'). However, the tool description adds no extra semantic value, and the parameter descriptions themselves are insufficient to clarify which parameters apply to which action. For instance, it is not clear that 'x1','y1','x2','y2' are required for swipe, or that 'text' is needed for type and click_element. The description fails to link parameters to actions, leaving the agent to infer the mapping from the schema alone, which is ambiguous.

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 performs a high-level Android action and enumerates the supported actions (tap, swipe, type, press_key, click_element, scroll, launch_app). The verb 'execute' and resource 'Android action' are specific. However, it does not distinguish itself from its many sibling tools (e.g., android_tap, android_swipe) that accomplish the same individual actions, leaving the agent uncertain whether to use this unified tool or a specific counterpart.

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

Usage Guidelines1/5

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

There is no guidance on when to use this tool versus the dedicated sibling tools. The description does not mention any advantages (e.g., convenience, single-call aggregation), prerequisites, or scenarios where it is preferred. The agent is left with no context to decide between calling android_execute_action and a specific tool like android_tap, making this dimension essentially missing.

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

android_find_elementA

Search for UI elements on the current Android screen by visible text, content description, resource ID, or class name. Returns matching elements with their computed center tap coordinates.

ParametersJSON Schema
NameRequiredDescriptionDefault
textNoVisible text to search for
deviceIdNoOptional device ID
classNameNoWidget class name (e.g. "android.widget.Button", "TextView")
clickableNoFilter by clickable state
exactMatchNoWhether to require exact string match instead of substring match
resourceIdNoAndroid resource ID (e.g. "com.android.settings:id/switch_widget")
contentDescriptionNoAccessibility content description

TDQS

A3.5/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It discloses that it searches the current screen and returns elements with computed center tap coordinates, implying a non-destructive read operation. However, it does not describe failure behavior when no match is found, how multiple matches are handled, or any permissions/limitations.

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

Conciseness5/5

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

Two sentences with zero fluff. Purpose is front-loaded in the first sentence, and the return value (center tap coordinates) is stated in the second. No redundant or vague wording.

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 7-parameter optional tool with no output schema, the description explains the search scope and the return type (matching elements with center coordinates). However, it omits details on how multiple criteria combine (AND/OR), whether all matches or only the first are returned, and the exact return structure – a gap since there is no output schema to clarify this.

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

Parameters3/5

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

Schema description coverage is 100% – every parameter has an individual description. The tool description's list of search criteria (text, content description, resource ID, class name) maps directly to schema fields, adding no new semantics beyond the schema. Baseline of 3 applies.

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

Purpose5/5

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

States a specific verb 'Search' and resource 'UI elements on current Android screen', lists four search criteria (text, content description, resource ID, class name), and notes it returns elements with computed center tap coordinates. This clearly distinguishes it from siblings like android_ui_dump (hierarchy dump) and android_click_element (action).

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

Usage Guidelines2/5

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

No mention of when to use this tool versus alternatives. Sibling tools such as android_ui_dump or android_click_element are not referenced, leaving the agent to infer that targeted searching should precede clicking. No conditions, exclusions, or guidance on selecting between find and dump actions.

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

android_launch_appB

Launch an Android application by its package name (e.g. "com.android.settings", "com.google.android.youtube", "com.android.chrome").

ParametersJSON Schema
NameRequiredDescriptionDefault
activityNoOptional specific Activity name to launch
deviceIdNoOptional device ID
packageNameYesAndroid package name to launch (e.g. com.android.settings)

TDQS

B3.2/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It only states the action (launch) but does not explain side effects such as bringing the app to the foreground, what happens if the package is not installed, whether it waits for launch completion, or how non-optional parameters like activity and deviceId affect behavior. The description is minimal and relies on the name for implicit meaning.

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 that opens with the core verb and resource. It is direct, front-loaded, and contains no filler. It efficiently conveys the essential information without unnecessary elaboration.

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

Completeness2/5

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

For a tool with three parameters, no output schema, and no annotations, the description is under-specified. It does not clarify whether optional parameters are truly optional or how they affect behavior, nor does it mention any prerequisite (e.g., device must be connected) or post-launch state. The tool is relatively simple, but the description could be more complete about observable results and edge cases.

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

Parameters3/5

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

Schema description coverage is 100% – all parameters (packageName, activity, deviceId) have descriptions in the schema. The description adds examples of package names, which reinforces the format but does not add new meaning beyond what the schema already states. Since the schema already documents parameters, the description provides marginal added value, so a baseline of 3 is appropriate.

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

Purpose5/5

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

The description clearly states the tool's purpose: 'Launch an Android application by its package name.' It specifies the verb (launch), the resource (Android application), and the identifying parameter (package name). It is distinct from siblings like android_tap or android_swipe, which handle interaction rather than launching.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. It does not mention that launching an app is a prerequisite for other actions, nor does it advise against using it for already-running apps. Given the sibling list includes many interaction tools, some contextual advice would help, but none is present.

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

android_press_keyC

Press an Android hardware or navigation key. Supported keys include: HOME, BACK, CALL, ENDCALL, VOLUME_UP, VOLUME_DOWN, POWER, CAMERA, CLEAR, COMMA, PERIOD, TAB, SPACE, ENTER, DELETE, etc.

ParametersJSON Schema
NameRequiredDescriptionDefault
keyYesKey name (e.g. HOME, BACK, ENTER, TAB, ESC, DELETE, SPACE, VOLUME_UP, VOLUME_DOWN, POWER) or valid keycode
deviceIdNoOptional device ID

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It states it will 'press' a key but does not disclose potential side effects (e.g., navigating away from the current screen), whether the call blocks, error conditions, or the role of deviceId. The list of supported keys is helpful but does not address behavioral consequences. The description is too sparse for a tool that directly manipulates device state.

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

Conciseness4/5

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

The description is a single sentence with a list of examples, which is concise and to the point. It front-loads the core action and then lists specifics. No wasted words, but it could be slightly better structured by separating the enumeration from the action. Still, it is appropriately short and scannable.

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

Completeness3/5

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

For a tool with only two parameters and no output schema, the description covers the essential input expectations. However, it lacks usage context (when to choose this over tap/swipe), behavioral outcomes, and any edge-case handling. Given the absence of annotations, more explanatory depth (e.g., deviceId semantics, or that pressing navigation keys may alter the app state) would be warranted. It is minimally complete but leaves gaps.

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

Parameters3/5

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

The input schema already covers both parameters (key and deviceId) with clear descriptions, and the schema description coverage is 100%. The description adds examples of supported keys (HOME, BACK, etc.) which are partially redundant but confirm the 'valid keycode' allowance. This matches the baseline of 3 where the schema does the heavy lifting; the description does not introduce novel semantic meaning beyond the 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 ('Press an Android hardware or navigation key') and enumerates supported keys, making it distinct from sibling tools like android_tap (screen touches) and android_type_text (text entry). However, it does not explicitly contrast with siblings, so a slight deduction. It is specific and unambiguous.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives such as android_tap or android_swipe. It does not mention prerequisites, context, or exclusions. An agent would need to infer that this is for physical/navigation keys rather than on-screen interactions. Lacks any 'when to use' or 'when not to use' statements.

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

android_screenshotA

Capture the current screen of the Android device as a PNG image for visual inspection and AI computer-use reasoning.

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceIdNoOptional target Android device ID. If omitted, auto-selects.

TDQS

A3.8/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It states the action (capture screen) and output format (PNG) but does not explicitly mention that this is a read-only, non-destructive operation, nor does it disclose potential issues like device availability or permissions. However, the action is intuitively non-mutating, so the lack of detail is a minor gap.

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

Conciseness5/5

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

A single, direct sentence with no filler. The main action and purpose are front-loaded, and every word contributes value. Appropriate for a simple tool.

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 (no output schema, one optional parameter), the description is nearly complete. It explains the output format and purpose, and the parameter is documented in the schema. The only gap is the lack of usage guidance against sibling tools, which slightly reduces completeness but is not critical for such a simple operation.

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

Parameters3/5

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

Schema coverage is 100% for the single parameter (deviceId), which already describes it as optional with auto-selection. The description adds no extra meaning about the parameter, so it meets the baseline for high coverage without adding value.

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 'Capture', the resource 'screen of the Android device', and the output as a PNG image. It also adds purpose ('visual inspection and AI computer-use reasoning'), which distinguishes it from sibling tools like android_ui_dump (which likely returns a structural dump) or action tools like android_tap.

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 visual inspection but does not explicitly state when to prefer this over alternatives such as android_ui_dump or android_device_info. No exclusions or alternative routing are provided, so an agent must infer usage from the stated purpose.

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

android_scrollB

Scroll the screen in a specified direction (up, down, left, right).

ParametersJSON Schema
NameRequiredDescriptionDefault
amountNoScroll distance in pixels. If omitted, scrolls approx 40% of screen dimension.
deviceIdNoOptional device ID
directionYesScroll direction. "down" reveals content below; "up" reveals content above.

TDQS

B3.3/5.0
Behavior3/5

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

No annotations are present, so the description carries the full burden. It adds the direction semantics ('down' reveals content below; 'up' reveals content above), which is helpful and beyond the schema. However, it does not disclose any other behavioral traits such as animation, failure modes, or interactions with the amount parameter, though these may be less critical for a scroll action.

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

Conciseness5/5

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

The description is a single, clear sentence with no wasted words. It focuses on the direction parameter, which is the core input, and is appropriately front-loaded.

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

Completeness3/5

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

Considering the tool's simplicity, the description covers the basic action and direction semantics. However, it omits any differentiation from android_swipe and does not mention how the scroll relates to the current screen position (e.g., relative vs absolute). Given the tool has multiple siblings, this is a notable gap that affects completeness.

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

Parameters3/5

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

The schema already documents all three parameters with 100% coverage, so the description's role is minimal. It mentions 'direction' and repeats its meaning, but adds no extra detail about 'amount' or 'deviceId' beyond what the schema provides. This meets the baseline expectation, but does not elevate it.

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: 'Scroll the screen in a specified direction (up, down, left, right).' It identifies the resource (screen) and the direction parameter, making the purpose evident. However, it does not differentiate from the sibling tool 'android_swipe,' so an agent might not know when to pick one over the other.

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

Usage Guidelines2/5

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

No guidance is provided about when to use this tool versus alternatives like android_swipe or when scroll is appropriate. The description only states what it does, not the context or exclusions, leaving the agent to infer usage.

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

android_swipeA

Perform a swipe / drag gesture between two points (x1, y1) and (x2, y2) with a configurable duration.

ParametersJSON Schema
NameRequiredDescriptionDefault
x1YesStart X coordinate
x2YesEnd X coordinate
y1YesStart Y coordinate
y2YesEnd Y coordinate
deviceIdNoOptional device ID
durationNoSwipe duration in milliseconds (default: 300ms)

TDQS

A3.8/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden of explaining behavior. It states the gesture type and the configurable duration, but does not disclose any side effects, failure conditions, coordinate system assumptions, or whether the gesture is relative to the screen. The description is not misleading, but it adds little beyond what the name and schema already convey.

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

Conciseness5/5

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

The description is a single, compact sentence that leads with the action and key parameters. It avoids any unnecessary filler or repetition, making it efficient and easily parsed by an agent.

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

Completeness4/5

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

For a simple gesture tool with no output schema and fully documented parameters, the description explains the core action and duration. However, it omits any mention of coordinate system relative to the screen, potential prerequisites (e.g., device must be unlocked), or behavior when the gesture is out of bounds. These are minor gaps, but the tool is simple enough that this is mostly complete.

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

Parameters3/5

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

The input schema provides 100% coverage, with all six parameters having descriptive text. The description mentions 'configurable duration' but this repeats the schema's duration field. It does not add extra meaning about coordinate units, origins, or any interaction between parameters. Since schema coverage is complete, a baseline of 3 is appropriate.

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

Purpose5/5

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

The description clearly states the verb 'perform a swipe / drag gesture' and specifies the resource as 'between two points (x1, y1) and (x2, y2)'. This is distinct from sibling tools like android_tap (a tap) and android_scroll (a scroll), so an agent can immediately tell this is for arbitrary two-point gestures.

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

Usage Guidelines3/5

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

The description implies usage—it is obviously for swipes/drags—but does not explicitly state when to use this tool over alternatives (e.g., 'use android_tap for single taps', 'use android_scroll for scrollable areas'). No exclusions or alternative routing is provided, so the agent must infer applicability from the tool name and description.

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

android_tapB

Tap at specific (x, y) pixel coordinates on the Android device screen.

ParametersJSON Schema
NameRequiredDescriptionDefault
xYesX coordinate in pixels
yYesY coordinate in pixels
deviceIdNoOptional device ID

TDQS

B3.2/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It only states the core action and does not reveal any side effects, prerequisites (e.g., screen on, app foreground), or whether the tap is synchronous or asynchronous. The agent has no information about what happens after the tap or how success is indicated.

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 filler or redundant words. It is front-loaded with the action verb and delivers the purpose directly, which is ideal for a simple tool. Nothing needs to be cut.

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

Completeness2/5

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

The tool is simple, but the description omits important context for correct usage, such as the coordinate system origin (top-left corner is assumed), behavior on invalid coordinates, and the role of deviceId when multiple devices are connected. It also does not distinguish from android_click_element for element-based interactions. Given the rich sibling set, the description is incomplete for an agent that must choose the right interaction tool.

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

Parameters3/5

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

The input schema already describes all three parameters (x, y, deviceId) with clear definitions and 100% coverage. The description adds nothing beyond restating that the tap is at 'specific (x, y) pixel coordinates', which is essentially redundant with the schema. Baseline 3 is appropriate because the schema handles the semantic load.

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 action verb 'Tap' and the resource 'specific (x, y) pixel coordinates on the Android device screen', making the tool's purpose clear and unambiguous. It is distinct from sibling tools like android_click_element (element-based) and android_swipe (gesture-based), so an agent can tell it apart without further explanation.

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 its alternatives. The description does not mention that it is for coordinate-based taps rather than element-based clicks, nor does it clarify when deviceId is needed. An agent would have to infer usage context from the schema alone.

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

android_type_textA

Type text into the currently focused Android input field. Handles escaping for spaces and special characters.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYesText string to type into focused input
deviceIdNoOptional device ID

TDQS

A4/5.0
Behavior3/5

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

No annotations are provided, so the description carries the burden. It discloses a valuable behavioral trait – escaping spaces and special characters – which tells the agent it can safely pass arbitrary text. However, it does not mention failure modes (e.g., no focused field, invalid characters) or whether it waits for the field to be ready. This is partial but not silent, so a 3 is appropriate.

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

Conciseness5/5

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

Two sentences, zero filler. The core purpose is in the first sentence, with the behavioral nuance (escaping) in the second. Every word earns its place, and it front-loads the most important information.

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

Completeness4/5

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

For a simple action tool with one required parameter and no output schema, the description covers the essential aspects: what it does, where it acts (focused field), and its escaping behavior. It could mention error conditions or whether it clears existing text, but these are minor for the scope. Overall, it gives an agent enough to call it correctly in most scenarios.

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

Parameters4/5

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

Schema description coverage is 100% – both 'text' and 'deviceId' have clear descriptions. The description adds extra meaning for the 'text' parameter by explicitly stating that escaping is handled, which informs the agent that special characters are acceptable. This goes beyond the schema's simple 'Text string to type' and justifies a 4, slightly above the baseline 3.

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

Purpose5/5

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

The description states a specific verb ('Type text'), a specific resource ('currently focused Android input field'), and a key detail ('handles escaping for spaces and special characters'). This distinguishes it from sibling tools like android_tap or android_press_key, which serve different actions. The purpose is unambiguous and immediately clear.

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

Usage Guidelines3/5

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

The description implies usage (when you need to type into a focused field) but does not explicitly mention when not to use it or name alternatives. It lacks the directiveness of the top-tier example that names a sibling tool. However, the context of 'currently focused' and the sibling names (e.g., android_press_key) make the scenario understandable, so it earns a 3 rather than lower.

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

android_ui_dumpA

Dump the current Android screen UI hierarchy using UIAutomator. Returns a structured, compact list of visible and interactive UI elements with their text, resource IDs, and screen bounds.

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceIdNoOptional device ID

TDQS

A4/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It states that the tool returns a structured, compact list of visible and interactive elements, including text, resource IDs, and screen bounds. This tells the agent what to expect and implies it is read-only (no side effects mentioned). It doesn't mention prerequisites like accessibility service permission or failure modes, but for a 'dump' operation, the core behavior is transparent. Slight gap: does not say whether it blocks or returns immediately, but that is minor given the nature of the tool.

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

Conciseness5/5

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

The description is two clear sentences, starting with the verb 'Dump' and the resource. It front-loads the core action, then specifies output details in a single compact second sentence. No extraneous words or repetition—every phrase adds value.

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

Completeness4/5

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

The tool is simple (one optional param, no output schema), and the description covers the essential information an agent needs: what it returns and limits the results to visible and interactive elements. This is adequate for an agent to decide whether to call it and what to expect. It could be more explicit about whether the list is flat or hierarchical, and whether it includes scrollable/element hierarchy beyond visible ones, but the given detail is sufficient for typical 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 schema has only one optional parameter (deviceId) and its description coverage is 100%, so the schema already tells the agent what the parameter does. The tool description does not add any extra semantics about deviceId (e.g., default behavior, format, or when it's needed). Since coverage is complete, the description doesn't need to compensate, and a baseline of 3 is appropriate.

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

Purpose5/5

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

The description clearly states the verb 'dump' and the resource 'Android screen UI hierarchy', and specifies the output: a structured list of visible, interactive elements with text, resource IDs, and bounds. This distinguishes it from siblings like android_find_element (which searches for specific elements) and android_click_element (which interacts), so an agent can tell them apart.

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

Usage Guidelines3/5

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

The description implies a use case (inspecting the current UI hierarchy) but does not explicitly state when to prefer this over alternatives, nor does it mention exclusion criteria. For example, it doesn't say 'use android_find_element to locate a single element' or 'use when you need an overview of all visible elements vs. screenshot'. The context is clear but guidance is implicit rather than explicit.

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

Tool Schema Changelog

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

  1. 13 tool updatesv1.0.0
    • First observedandroid_click_element
    • First observedandroid_current_app
    • First observedandroid_device_info
    • First observedandroid_execute_action
    • First observedandroid_find_element
    • First observedandroid_launch_app
    • First observedandroid_press_key
    • First observedandroid_screenshot
    • First observedandroid_scroll
    • First observedandroid_swipe
    • First observedandroid_tap
    • First observedandroid_type_text
    • First observedandroid_ui_dump

TDQS

B3.2/5.0

Scored across 13 tools

Disambiguation4/5

Most tools have clearly distinct purposes, but android_tap, android_click_element, and android_execute_action overlap in interaction, differing only by abstraction level (raw coordinates, element-based, and high-level bundling). Descriptions help disambiguate these, so the overlap is minor.

Naming Consistency3/5

All tools share the 'android_' prefix, which is good, but the naming pattern is inconsistent: some are bare nouns (screenshot, scroll), some are verb phrases (type_text, launch_app), and some are noun phrases (current_app, device_info). This mix of conventions is still readable but not fully predictable.

Tool Count5/5

With 13 tools, the server is well-scoped for a mobile automation domain, offering both low-level gestures and high-level actions without redundancy. This count is appropriate and each tool earns its place.

Completeness4/5

The tool surface covers core UI automation: screen capture, interaction (tap, swipe, type, press, scroll), element discovery (ui_dump, find_element, click_element), and app control (launch_app, current_app). Missing advanced gestures like pinch or long-press, but these are not essential for typical agent tasks.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    A
    quality
    D
    maintenance
    Enables AI agents to interact with Android devices through UI manipulation, screen capture, touch gestures, text input, and app management via ADB. Provides comprehensive mobile automation capabilities including element detection, navigation, and application control for Android device testing and interaction.
    9
    4
    -
  • A
    license
    B
    quality
    B
    maintenance
    Enables AI assistants to interact with Android devices and emulators via ADB, providing tools for screenshots, UI inspection, touch and text input, app management, and device control.
    42
    82 npm
    19
    MIT