Skip to main content
Glama
swamiabhishek45

Android Control MCP Server

Android Control MCP Server

Node.js로 구축된 프로덕션 레디 Model Context Protocol (MCP) 서버로, AI 어시스턴트(Claude Desktop, Cursor, 커스텀 에이전트 워크플로우 등)가 연결된 Android 기기를 관찰하고, 추론하고, 제어할 수 있게 해줍니다.


🌟 주요 기능

  • 👀 컴퓨터 사용 관찰(Computer-Use Observation): 고해상도 PNG 화면 캡처를 기기 메타데이터와 함께 MCP 이미지 블록으로 직접 반환합니다.

  • 🔍 UIAutomator 계층 구조 파싱: 장황한 Android UI 트리를 간결하고 구조화된 JSON으로 변환하는 지능형 XML 덤프 파서입니다.

  • 🎯 의미 기반 요소 클릭: 수동 픽셀 계산 없이 표시된 텍스트, 접근성 설명 또는 리소스 ID로 버튼과 컨트롤을 클릭합니다.

  • ⚡ 빠른 제스처 및 입력: 픽셀 정확도의 탭, 다중 좌표 스와이프, 방향별 스크롤, 하드웨어 키 에뮬레이션, 셸 이스케이프 처리된 텍스트 입력을 지원합니다.

  • 📱 앱 수명주기 관리: 패키지 이름으로 애플리케이션을 실행하고 현재 포커스된 포그라운드 액티비티를 확인합니다.

  • 🛡️ 안전 및 샌드박싱: 실제 화면 경계에 대한 입력 좌표 검증, 엄격한 허용 목록 키코드, 인자 정화, 명령 타임아웃, 엄격한 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 설정에서:

  • 이름(Name): android-control

  • 유형(Type): command

  • 명령어(Command): node C:/Users/Abhishek/Code/mcp/src/index.js


🛠️ MCP 도구 참조

1. android_device_info

포괄적인 기기 하드웨어 및 OS 메타데이터를 가져옵니다.

  • 매개변수:

    • 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) 및 셸 문자 이스케이프를 처리합니다.

  • 매개변수:

    • 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 (선택적 문자열): 특정 액티비티 이름.


12. android_current_app

현재 포커스된 포그라운드 패키지와 액티비티를 확인합니다.


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 기기가 연결되어 있지 않아도 전체 단위 검증이 가능합니다.


🔒 보안 모범 사례

  • 임의 셸 실행 없음: 서버는 원시 adb shell 실행 도구를 노출하지 않습니다.

  • 안전한 프로세스 호출: 모든 명령은 셸 인젝션을 방지하기 위해 명시적 인자 배열과 함께 child_process.execFile을 사용합니다.

  • 입력 정화: 패키지 이름, 키코드, 좌표 매개변수는 Zod 스키마와 경계 검사를 통해 엄격하게 검증됩니다.

  • Stderr 격리 로깅: 모든 로그는 stdout에서 엄격한 JSON-RPC 프로토콜 준수를 유지하기 위해 stderr로만 전달됩니다.


📄 라이선스

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