Skip to main content
Glama
jduartedj
by jduartedj

Android MCP Server

A Model Context Protocol (MCP) server providing comprehensive Android device control with 22 powerful tools for UI automation, screen capture, and ultra-fast H.264 streaming via Scrcpy.

Features

  • 📸 Screenshots: Capture screenshots from Android devices

  • 👆 Touch & Gestures: Simulate touch, long press, swipe, and multi-point interactions

  • ⌨️ Text Input & Key Events: Direct text input and key event simulation (2 tools)

    • Send key events (HOME, BACK, ENTER, etc.)

    • Input text directly into focused fields

  • 🔧 Generic ADB Commands: Execute any ADB command with custom parameters (1 tool)

    • Full flexibility for agents to run custom ADB operations

    • Access to all ADB functionality (logcat, shell commands, package manager, etc.)

  • 🎯 UIAutomator: Full UI hierarchy inspection and element interaction (10 tools)

    • Dump complete XML UI hierarchy

    • Find elements by resource ID or text

    • Click, double-click, long-click on elements

    • Set/clear text in input fields

    • Toggle checkboxes

    • Wait for elements to appear

    • Scroll within specific elements

  • Scrcpy Streaming: Ultra-fast H.264 video streaming (4 tools)

    • Start/stop H.264 video streams (~2s setup, <50ms frame polling)

    • Capture single frames (100-300ms) or latest stream frames (<50ms)

    • Dramatically faster than screenshot capture

  • 🚀 App Management: Launch apps and list installed packages

  • 🔌 ADB Integration: Direct integration with Android Debug Bridge

  • Auto-Download: Automatically downloads ADB and Scrcpy from official sources

Related MCP server: Android MCP

Prerequisites

  • Node.js 18 or higher

  • Android device connected via USB with USB debugging enabled, or emulator running

Note: ADB (Android Debug Bridge) and Scrcpy are optional - the server automatically downloads them from official sources on first use if needed.

Quick Start

  1. Clone and Build

    git clone https://github.com/jduartedj/android-mcp-server.git
    cd android-mcp-server
    npm install
    npm run build
  2. Test the Server

    node dist/index.js

    The server will start and automatically download ADB/Scrcpy if needed.

  3. Add to VS Code (see VS Code Integration below)

Installation

npm install
npm run build

Usage

Running the Server Standalone

node dist/index.js

Configuration

The server supports the following environment variables:

  • ADB_PATH: Custom path to ADB executable (default: uses system PATH or auto-downloads)

  • DEVICE_SERIAL: Specific device serial number to target (default: first available device)

VS Code Integration

Adding to VS Code GitHub Copilot

To use this MCP server with GitHub Copilot in VS Code:

  1. Open VS Code Settings (Ctrl+, or Cmd+,)

  2. Search for MCP or navigate to: GitHub Copilot > Chat > MCP Servers

  3. Edit the MCP configuration by clicking "Edit in settings.json"

  4. Add the Android MCP Server to your configuration:

{
  "github.copilot.chat.mcp.servers": {
    "android-mcp-server": {
      "command": "node",
      "args": ["F:\\android-mcp-server\\dist\\index.js"],
      "env": {
        "ADB_PATH": "",
        "DEVICE_SERIAL": ""
      }
    }
  }
}

Note: Replace F:\\android-mcp-server\\dist\\index.js with the actual absolute path to your dist/index.js file. Use double backslashes on Windows.

  1. Alternative: Using npx (if published to npm):

{
  "github.copilot.chat.mcp.servers": {
    "android-mcp-server": {
      "command": "npx",
      "args": ["-y", "android-mcp-server"]
    }
  }
}
  1. Reload VS Code or restart the GitHub Copilot extension

Verifying the Integration

After adding the server:

  1. Open GitHub Copilot Chat in VS Code

  2. Type @workspace and you should see the Android MCP tools available

  3. Try asking: "Take a screenshot of my Android device"

  4. Copilot will use the appropriate tool to capture the screen

Example Prompts for Copilot

Once integrated, you can ask GitHub Copilot:

  • "Take a screenshot of my Android device"

  • "Start streaming my device screen for real-time monitoring"

  • "Get the latest frame from the stream"

  • "Tap at coordinates 500, 1000 on my phone"

  • "Swipe up on my Android screen"

  • "Press the back button on my device"

  • "Send the home key event"

  • "Type 'hello world' into the current field"

  • "Press enter to submit the form"

  • "Get the device battery status using ADB"

  • "Read the logcat output for debugging"

  • "Clear the app data for com.example.app"

  • "List all installed packages"

  • "Launch the Chrome app"

  • "Find the login button and click it"

  • "Fill in the email field with user@example.com"

  • "Dump the UI hierarchy of the current screen"

  • "Long press on the menu button"

  • "Scroll down in the settings list"

  • "Toggle the enable notifications checkbox"

  • "Wait for the loading indicator to disappear"

All 22 MCP Tools

Basic Tools (5)

1. android_screenshot

Capture a screenshot from the Android device.

Parameters:

  • outputPath (optional): Local path to save the screenshot. If not provided, returns base64 encoded image.

  • deviceSerial (optional): Target specific device by serial number

Performance: ~1-2 seconds per capture

Example:

{
  "name": "android_screenshot",
  "arguments": {
    "outputPath": "./screenshot.png"
  }
}

2. android_touch

Simulate a touch event at specific screen coordinates. Supports both quick taps and long presses.

Parameters:

  • x (required): X coordinate

  • y (required): Y coordinate

  • duration (optional): Touch duration in milliseconds (default: 100ms for tap, >100ms for long press)

  • deviceSerial (optional): Target specific device by serial number

Performance: Immediate

Example - Quick Tap:

{
  "name": "android_touch",
  "arguments": { "x": 500, "y": 1000, "duration": 100 }
}

Example - Long Press:

{
  "name": "android_touch",
  "arguments": { "x": 500, "y": 1000, "duration": 2000 }
}

3. android_swipe

Perform a swipe gesture between two coordinates.

Parameters:

  • startX (required): Starting X coordinate

  • startY (required): Starting Y coordinate

  • endX (required): Ending X coordinate

  • endY (required): Ending Y coordinate

  • duration (optional): Swipe duration in milliseconds (default: 300)

  • deviceSerial (optional): Target specific device by serial number

Performance: Immediate

Example:

{
  "name": "android_swipe",
  "arguments": {
    "startX": 500, "startY": 1500, "endX": 500, "endY": 500, "duration": 300
  }
}

4. android_launch_app

Launch an Android app by package name.

Parameters:

  • packageName (required): Package name of the app (e.g., com.example.app, com.google.android.apps.maps)

  • deviceSerial (optional): Target specific device by serial number

Performance: ~1-2 seconds

Example:

{
  "name": "android_launch_app",
  "arguments": { "packageName": "com.example.app" }
}

5. android_list_packages

List installed packages on the Android device with optional filtering.

Parameters:

  • filter (optional): Search filter for package names (case-insensitive)

  • deviceSerial (optional): Target specific device by serial number

Performance: Medium (retrieves full package list)

Example - List All Packages:

{
  "name": "android_list_packages",
  "arguments": {}
}

Example - Filter Packages:

{
  "name": "android_list_packages",
  "arguments": { "filter": "google" }
}

Text Input & Key Event Tools (2)

6. android_input_text

Input text into the currently focused field on the Android device via ADB.

Parameters:

  • text (required): Text to input. Spaces are automatically handled.

  • deviceSerial (optional): Target specific device by serial number

Performance: Immediate

Use Cases:

  • Quick text input without UIAutomator

  • Inputting text when element resource ID is unknown

  • Simple form filling

  • Command-line style text entry

Example:

{
  "name": "android_input_text",
  "arguments": {
    "text": "user@example.com"
  }
}

7. android_send_key_event

Send a key event to the Android device (e.g., HOME, BACK, ENTER).

Parameters:

  • keyCode (required): Key event code. Can be key name (e.g., KEYEVENT_HOME, KEYEVENT_BACK) or numeric code (e.g., 3 for HOME, 4 for BACK)

  • deviceSerial (optional): Target specific device by serial number

Performance: Immediate

Common Key Codes:

  • KEYEVENT_HOME or 3 - Home button

  • KEYEVENT_BACK or 4 - Back button

  • KEYEVENT_ENTER or 66 - Enter/Return key

  • KEYEVENT_DEL or 67 - Delete key

  • KEYEVENT_MENU or 82 - Menu button

  • KEYEVENT_VOLUME_UP or 24 - Volume up

  • KEYEVENT_VOLUME_DOWN or 25 - Volume down

  • KEYEVENT_POWER or 26 - Power button

Use Cases:

  • Navigation (HOME, BACK)

  • Submitting forms (ENTER)

  • Controlling device functions (VOLUME, POWER)

  • Keyboard shortcuts

Example:

{
  "name": "android_send_key_event",
  "arguments": {
    "keyCode": "KEYEVENT_BACK"
  }
}

Generic ADB Command Tool (1)

8. android_execute_command

Execute a generic ADB command with custom arguments. This powerful tool gives agents full flexibility to run any ADB command with their own parameters.

Parameters:

  • args (required): Array of ADB command arguments (e.g., ["shell", "pm", "list", "packages"])

  • deviceSerial (optional): Target specific device by serial number

Performance: Varies by command

Returns: Both stdout and stderr from the command execution

Use Cases:

  • Execute custom shell commands

  • Access logcat for debugging

  • Manage packages (install, uninstall, clear data)

  • Query device properties

  • File operations (push, pull)

  • Network operations (port forwarding)

  • Any ADB functionality not covered by specific tools

Common Examples:

List all packages:

{
  "name": "android_execute_command",
  "arguments": {
    "args": ["shell", "pm", "list", "packages"]
  }
}

Get device properties:

{
  "name": "android_execute_command",
  "arguments": {
    "args": ["shell", "getprop", "ro.build.version.release"]
  }
}

Read logcat:

{
  "name": "android_execute_command",
  "arguments": {
    "args": ["logcat", "-d", "-s", "MyTag:V"]
  }
}

Clear app data:

{
  "name": "android_execute_command",
  "arguments": {
    "args": ["shell", "pm", "clear", "com.example.app"]
  }
}

Get battery info:

{
  "name": "android_execute_command",
  "arguments": {
    "args": ["shell", "dumpsys", "battery"]
  }
}

Push file to device:

{
  "name": "android_execute_command",
  "arguments": {
    "args": ["push", "/local/path/file.txt", "/sdcard/file.txt"]
  }
}

Install APK:

{
  "name": "android_execute_command",
  "arguments": {
    "args": ["install", "-r", "/path/to/app.apk"]
  }
}

Port forwarding:

{
  "name": "android_execute_command",
  "arguments": {
    "args": ["forward", "tcp:8080", "tcp:8080"]
  }
}

UIAutomator Tools (10)

9. android_uiautomator_dump

Dump the complete UI hierarchy of the current screen as XML for inspection and element identification.

Parameters:

  • deviceSerial (optional): Target specific device by serial number

Returns: Complete XML UI hierarchy that can be parsed to find element resource IDs and attributes.

Performance: ~500-800ms

Use Cases:

  • Inspecting app UI structure

  • Finding element resource IDs for automation

  • Understanding view hierarchies

Example:

{
  "name": "android_uiautomator_dump",
  "arguments": {}
}

10. android_uiautomator_find

Find UI elements by resource ID or text content using UIAutomator.

Parameters:

  • resourceId (optional): Resource ID to search for (e.g., com.example.app:id/button_submit)

  • text (optional): Text content to search for

  • deviceSerial (optional): Target specific device by serial number

Performance: Fast

Example - Find by Resource ID:

{
  "name": "android_uiautomator_find",
  "arguments": { "resourceId": "com.example.app:id/email_input" }
}

Example - Find by Text:

{
  "name": "android_uiautomator_find",
  "arguments": { "text": "Submit" }
}

11. android_uiautomator_click

Click on a UI element by resource ID.

Parameters:

  • resourceId (required): Resource ID of the element to click

  • deviceSerial (optional): Target specific device by serial number

Performance: Immediate

Example:

{
  "name": "android_uiautomator_click",
  "arguments": { "resourceId": "com.example.app:id/button_submit" }
}

12. android_uiautomator_double_click

Perform a double-click on a UI element by resource ID.

Parameters:

  • resourceId (required): Resource ID of the element

  • deviceSerial (optional): Target specific device by serial number

Performance: Immediate

Example:

{
  "name": "android_uiautomator_double_click",
  "arguments": { "resourceId": "com.example.app:id/text_field" }
}

13. android_uiautomator_long_click

Perform a long-click on a UI element by resource ID.

Parameters:

  • resourceId (required): Resource ID of the element

  • deviceSerial (optional): Target specific device by serial number

Performance: Immediate

Example:

{
  "name": "android_uiautomator_long_click",
  "arguments": { "resourceId": "com.example.app:id/menu_item" }
}

14. android_uiautomator_set_text

Set text on a UI element by resource ID. Automatically clears existing text first.

Parameters:

  • resourceId (required): Resource ID of the element

  • text (required): Text to set

  • deviceSerial (optional): Target specific device by serial number

Performance: Immediate

Example:

{
  "name": "android_uiautomator_set_text",
  "arguments": {
    "resourceId": "com.example.app:id/email_input",
    "text": "user@example.com"
  }
}

15. android_uiautomator_clear_text

Clear text from a UI element by resource ID.

Parameters:

  • resourceId (required): Resource ID of the element

  • deviceSerial (optional): Target specific device by serial number

Performance: Immediate

Example:

{
  "name": "android_uiautomator_clear_text",
  "arguments": { "resourceId": "com.example.app:id/search_input" }
}

16. android_uiautomator_toggle_checkbox

Toggle a checkbox element by resource ID.

Parameters:

  • resourceId (required): Resource ID of the checkbox

  • deviceSerial (optional): Target specific device by serial number

Performance: Immediate

Example:

{
  "name": "android_uiautomator_toggle_checkbox",
  "arguments": { "resourceId": "com.example.app:id/agree_checkbox" }
}

17. android_uiautomator_wait

Wait for a UI element to appear by resource ID with timeout support.

Parameters:

  • resourceId (required): Resource ID to wait for

  • timeoutMs (optional): Maximum wait time in milliseconds (default: 5000)

  • deviceSerial (optional): Target specific device by serial number

Performance: Configurable (up to timeout)

Example:

{
  "name": "android_uiautomator_wait",
  "arguments": {
    "resourceId": "com.example.app:id/loading_indicator",
    "timeoutMs": 10000
  }
}

18. android_uiautomator_scroll_in_element

Scroll within a specific scrollable UI element.

Parameters:

  • resourceId (required): Resource ID of the scrollable element

  • direction (required): Direction to scroll (up, down, left, right)

  • distance (optional): Distance to scroll in pixels (default: 500)

  • deviceSerial (optional): Target specific device by serial number

Performance: Immediate

Example:

{
  "name": "android_uiautomator_scroll_in_element",
  "arguments": {
    "resourceId": "com.example.app:id/list_view",
    "direction": "down",
    "distance": 500
  }
}

Scrcpy Streaming Tools (4)

Scrcpy streaming provides ultra-fast frame capture using H.264 video encoding, perfect for real-time monitoring, rapid screenshot sequences, or continuous frame polling.

19. android_start_scrcpy_stream

Initialize an H.264 video stream from the Android device using Scrcpy.

Parameters:

  • deviceSerial (optional): Target specific device by serial number

  • bitrate (optional): Video bitrate in Mbps (default: 4)

  • fps (optional): Frames per second (default: 60)

Performance: ~2 seconds setup, <50ms per frame polling afterward

Advantages:

  • Ultra-fast frame capture (<50ms vs 1-2s for screenshot)

  • Continuous streaming with pre-buffered frames

  • Ideal for real-time monitoring

  • H.264 compression reduces bandwidth

Example:

{
  "name": "android_start_scrcpy_stream",
  "arguments": {
    "bitrate": 4,
    "fps": 30
  }
}

20. android_get_latest_frame

Poll the latest frame from an active Scrcpy stream.

Parameters:

  • deviceSerial (optional): Target specific device by serial number

  • outputPath (optional): Save frame to file, otherwise returns base64

Performance: <50ms per frame (due to pre-buffered streaming)

Use Cases:

  • Real-time monitoring

  • Rapid screenshot sequences

  • Continuous frame polling

  • Streaming visualization

Example:

{
  "name": "android_get_latest_frame",
  "arguments": {
    "outputPath": "./current_frame.png"
  }
}

21. android_stop_scrcpy_stream

Stop an active Scrcpy H.264 stream.

Parameters:

  • deviceSerial (optional): Target specific device by serial number

Example:

{
  "name": "android_stop_scrcpy_stream",
  "arguments": {}
}

22. android_capture_frame_scrcpy

Capture a single frame using Scrcpy without starting a persistent stream.

Parameters:

  • deviceSerial (optional): Target specific device by serial number

  • outputPath (optional): Save frame to file, otherwise returns base64

  • bitrate (optional): Video bitrate in Mbps (default: 4)

Performance: 100-300ms (faster than screenshot, slower than streaming)

Use Cases:

  • One-off frame captures

  • When streaming overhead isn't justified

  • Single frame comparison

  • Lightweight capture operations

Example:

{
  "name": "android_capture_frame_scrcpy",
  "arguments": {
    "outputPath": "./single_frame.png"
  }
}

Performance Comparison

Tool

Purpose

Speed

Best For

android_screenshot

Basic capture

1-2s

Simple screenshots, initial inspection

android_capture_frame_scrcpy

Single Scrcpy frame

100-300ms

Faster one-off captures than screenshot

android_start_scrcpy_stream

Initialize stream

~2s setup

Real-time monitoring workflows

android_get_latest_frame

Poll stream

<50ms

Rapid frame sequences, real-time apps

android_touch

Tap/long press

Immediate

UI interaction

android_swipe

Swipe gesture

Immediate

Navigation, scrolling

android_input_text

Direct text input

Immediate

Quick text entry via ADB

android_send_key_event

Key events

Immediate

Navigation (HOME, BACK, ENTER)

android_execute_command

Generic ADB

Varies

Custom ADB operations, full flexibility

android_uiautomator_dump

UI inspection

500-800ms

Element discovery

android_uiautomator_find

Element search

Fast

Located specific elements

android_uiautomator_*

Element interaction

Immediate

Form filling, UI automation

Common Use Cases

1. Automated Testing

1. Dump UI hierarchy to find element IDs
2. Click buttons and input text using resource IDs
3. Use streaming to verify visual changes in real-time
4. Scroll and navigate through the app

2. Real-Time Monitoring

1. Start Scrcpy stream (one-time ~2s setup)
2. Poll latest frames continuously (<50ms each)
3. Process frames for visual analysis
4. Stop stream when done

3. Rapid Frame Capture Sequence

1. Start Scrcpy stream
2. Get latest frame multiple times (much faster than screenshot)
3. Process frame sequence for animation/comparison
4. Stop stream

4. Form Filling (WebView or Native)

1. Find form fields by resource ID or text
2. Clear existing text
3. Set new text values
4. Toggle checkboxes and radio buttons
5. Click submit button

5. Multi-Device Automation

Use deviceSerial parameter to target specific devices:

1. List connected devices via ADB
2. Specify device serial for each tool call
3. Automate workflows on multiple devices in parallel
4. Useful for device farms and testing labs

6. App Discovery

1. List all packages (potentially 100+)
2. Filter packages by name (e.g., "google", "com.example")
3. Launch apps by package name
4. Perfect for discovering available apps on the device

ADB & Scrcpy Setup

Automatic Installation

The server automatically downloads and installs from official sources:

  • ADB: From Android Platform Tools

  • Scrcpy: From official releases

Downloaded tools stored in ~/.android-mcp-server/platform-tools/

Manual Installation (Optional)

Windows:

choco install adb
choco install scrcpy

macOS:

brew install android-platform-tools
brew install scrcpy

Linux (Ubuntu/Debian):

sudo apt-get install android-tools-adb scrcpy

Enabling USB Debugging on Android

  1. Go to SettingsAbout Phone

  2. Tap Build Number 7 times to enable Developer Options

  3. Go to SettingsDeveloper Options

  4. Enable USB Debugging

  5. Connect device via USB and accept the debugging prompt

Verify Connection

adb devices

You should see your device listed.

Troubleshooting

Issue

Solution

"No Android devices found"

Ensure device is connected via USB and USB debugging is enabled. Run adb devices to verify.

UIAutomator element not found

Use android_uiautomator_dump to inspect the XML and verify the resource ID exists.

Scrcpy stream won't start

Ensure Scrcpy is installed or allow auto-download to complete. Check device is connected.

"ADB not found" error

Run the server once to auto-download ADB, or manually install platform-tools.

Touch coordinates not working

Verify coordinates are within screen bounds. Use screenshots to determine correct coordinates.

App launch fails

Verify package name is correct using android_list_packages. Try filtering if unsure.

Streaming frames are slow

Reduce bitrate/fps or use single android_capture_frame_scrcpy for one-off captures.

Advanced Patterns

Real-Time Visual Monitoring

1. android_start_scrcpy_stream (2s setup)
2. Loop: android_get_latest_frame (<50ms each)
3. Process frames for ML/analysis
4. android_stop_scrcpy_stream when done

Stress Testing with Rapid Frames

1. Start stream
2. Perform action on device
3. Capture 10+ frames in rapid succession (<50ms each)
4. Compare frame changes for regression detection

Multi-Step Form Automation

1. android_uiautomator_dump (find all fields)
2. For each field:
   - android_uiautomator_find (locate)
   - android_uiautomator_set_text (fill)
3. android_uiautomator_click (submit)
4. android_uiautomator_wait (result screen)
5. android_screenshot (verify)

Device Farm Parallel Testing

1. Get device list
2. For each device:
   - Specify deviceSerial in all tool calls
   - Run automation sequence
   - Compare results across devices

Architecture

The server uses the Model Context Protocol to expose Android device control:

  • ADB Wrapper (src/adb-wrapper.ts): Device communication, auto-downloads ADB

  • Scrcpy Integration (src/adb-wrapper.ts): H.264 streaming, frame polling

  • UIAutomator Methods (src/adb-wrapper.ts): Full XML dumping, element interaction

  • Tool Handlers (src/handlers.ts): All 19 tool operations

  • MCP Server (src/index.ts): Exposes all tools via Model Context Protocol

Supported Android Versions

  • Android 5.0+ (API Level 21+)

  • Scrcpy streaming: Android 5.0+ via ADB, optimal on 7.0+

Development

# Install dependencies
npm install

# Build
npm run build

# Watch mode (if supported)
npm run watch

Adding New Tools

To add a new tool:

  1. Implement method in src/adb-wrapper.ts

  2. Implement handler in src/handlers.ts

  3. Register tool in src/index.ts with name, description, and schema

  4. Build and test with the server running

License

MIT

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

Available Tools

22 tools
android_capture_frame_scrcpyB

Capture a single frame via scrcpy (faster than ADB screencap)

ParametersJSON Schema
NameRequiredDescriptionDefault
outputPathNoLocal path to save the frame (optional). If not provided, returns base64 encoded image.
deviceSerialNoSpecific device serial number to target (optional)

TDQS

B3.3/5.0
Behavior2/5

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

No annotations are provided, so the description carries full burden. It mentions 'faster than ADB screencap', which adds useful context about performance, but it doesn't disclose other behavioral traits such as whether it requires scrcpy to be running, what happens if no device is connected, or if it has any rate limits. For a tool with no annotations, this leaves significant gaps in understanding its behavior.

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, efficient sentence that front-loads the core purpose ('Capture a single frame via scrcpy') and adds a key benefit ('faster than ADB screencap'). There is no wasted text, and it's appropriately sized for the tool's complexity.

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

Completeness3/5

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

Given no annotations, no output schema, and 2 parameters with full schema coverage, the description is minimal but adequate. It covers the basic purpose and a performance advantage, but for a tool that interacts with devices and saves files, it lacks details on error handling, prerequisites (e.g., scrcpy setup), or return values. It's complete enough for a simple tool but has clear gaps in context.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents both parameters (outputPath and deviceSerial) with descriptions. The description adds no additional parameter information beyond what's in the schema, such as format details or examples. With high schema coverage, the baseline is 3, as the description doesn't compensate but also doesn't detract.

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's purpose: 'Capture a single frame via scrcpy' specifies the action (capture) and resource (frame), and it distinguishes from siblings by mentioning 'faster than ADB screencap', which differentiates it from android_screenshot. However, it doesn't explicitly name the sibling android_screenshot as an alternative, so it's not a perfect 5.

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

Usage Guidelines3/5

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

The description implies usage by stating 'faster than ADB screencap', suggesting this tool is preferred for speed over alternatives like android_screenshot. However, it doesn't explicitly state when to use this vs. other frame-capturing tools (e.g., android_get_latest_frame) or provide clear exclusions, so guidance is implied but not comprehensive.

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

android_execute_commandB

Execute a generic ADB command with custom arguments. Allows agents to run any ADB command with their own parameters.

ParametersJSON Schema
NameRequiredDescriptionDefault
argsYesArray of ADB command arguments (e.g., ["shell", "pm", "list", "packages"] or ["logcat", "-d", "-s", "MyTag"])
deviceSerialNoSpecific device serial number to target (optional)

TDQS

B3.2/5.0
Behavior2/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 mentions executing commands but lacks details on behavioral traits like permissions required, error handling, safety risks (e.g., destructive commands), or output format. This is a significant gap for a tool that could perform arbitrary operations.

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 front-loaded and concise, with two sentences that directly state the purpose and flexibility. Every sentence earns its place by clarifying the tool's role without unnecessary elaboration, making it efficient for quick understanding.

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

Completeness2/5

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

Given the complexity of executing arbitrary ADB commands, no annotations, and no output schema, the description is incomplete. It doesn't address critical aspects like command safety, expected outputs, or integration with sibling tools, leaving gaps that could hinder effective agent 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?

Schema description coverage is 100%, so the schema already documents both parameters thoroughly. The description adds no additional meaning beyond stating it's for 'custom arguments,' which aligns with the schema but doesn't provide extra context like common use cases or constraints. Baseline 3 is appropriate here.

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's purpose: 'Execute a generic ADB command with custom arguments.' It specifies the verb ('Execute') and resource ('ADB command'), distinguishing it from sibling tools that perform specific actions like screenshot or input. However, it doesn't explicitly differentiate from all siblings, as some might also involve ADB commands indirectly.

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 by stating it 'Allows agents to run any ADB command with their own parameters,' suggesting it's for custom or unsupported commands. It doesn't provide explicit when-to-use vs. alternatives, such as preferring specific sibling tools for common tasks, leaving usage context somewhat implied.

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

android_get_latest_frameB

Get the latest frame from scrcpy stream (instant access, no latency)

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.3/5.0
Behavior2/5

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

With no annotations, the description carries full burden but only mentions 'instant access, no latency'. It omits critical behavioral details: whether this is read-only or modifies state, potential errors if the stream isn't running, return format (e.g., image data), or performance implications like memory usage.

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, efficient sentence that front-loads the core purpose ('Get the latest frame') and adds qualifying context ('instant access, no latency'). Every word earns its place with no redundancy or fluff.

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

Completeness2/5

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

Given the complexity of accessing a live stream and no annotations or output schema, the description is incomplete. It fails to explain prerequisites (e.g., stream must be active), error conditions, or return value format, leaving significant gaps for safe and effective tool invocation.

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

Parameters4/5

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

The input schema has 0 parameters with 100% coverage, so no parameter documentation is needed. The description appropriately adds no parameter details, focusing on tool behavior instead, which aligns with the baseline for zero parameters.

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 ('Get') and resource ('latest frame from scrcpy stream'), specifying it provides 'instant access, no latency'. It distinguishes from sibling 'android_capture_frame_scrcpy' by emphasizing immediacy versus potential capture delay, though not explicitly naming the alternative.

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 low-latency frame access is needed from an active scrcpy stream, as suggested by 'instant access, no latency'. However, it lacks explicit guidance on prerequisites (e.g., requiring 'android_start_scrcpy_stream' first) or clear alternatives like 'android_screenshot' for non-stream contexts.

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

android_input_textA

Input text into the currently focused field on the Android device via ADB

ParametersJSON Schema
NameRequiredDescriptionDefault
textYesText to input. Spaces will be automatically handled.
deviceSerialNoSpecific device serial number to target (optional)

TDQS

A3.6/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden for behavioral disclosure. While it mentions the action and method (ADB), it lacks critical behavioral details such as whether this requires device accessibility permissions, what happens if no field is focused, error conditions, or performance characteristics. The description is minimal and doesn't adequately cover behavioral traits.

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, efficient sentence with zero wasted words. It's front-loaded with the core purpose and includes essential context about the method (ADB). Every element of the description serves a clear purpose.

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 device interaction tool with no annotations and no output schema, the description is insufficient. It doesn't explain what happens on success/failure, return values, error conditions, or prerequisites (like needing ADB setup or device accessibility enabled). The description leaves too many operational questions unanswered.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already fully documents both parameters. The description doesn't add any parameter-specific information beyond what's in the schema (e.g., it doesn't explain text encoding, special character handling, or device selection logic). Baseline 3 is appropriate when schema does the heavy lifting.

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 specific action ('Input text'), target resource ('currently focused field on the Android device'), and method ('via ADB'). It distinguishes itself from sibling tools like android_uiautomator_set_text by specifying it works on the currently focused field rather than requiring UI element targeting.

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 implies usage context ('currently focused field') which suggests when to use this tool versus alternatives like android_uiautomator_set_text that require element identification. However, it doesn't explicitly state when NOT to use it or name specific alternative tools, leaving some ambiguity about tool selection.

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

android_launch_appC

Launch an Android app by package name

ParametersJSON Schema
NameRequiredDescriptionDefault
packageNameYesPackage name of the app to launch (e.g., com.example.app)
deviceSerialNoSpecific device serial number to target (optional)

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries full burden for behavioral disclosure. It states the action ('Launch') but doesn't describe what happens (e.g., app opens on device, may fail if not installed, requires device to be connected/on), permissions needed, or error conditions. This is a significant gap for a tool with potential side effects.

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

Conciseness5/5

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

The description is a single, efficient sentence with zero waste—it directly states the tool's purpose without unnecessary words. It's appropriately sized and front-loaded, making it easy for an agent to parse quickly.

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

Completeness2/5

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

Given no annotations and no output schema, the description is incomplete for a tool that performs an action with potential side effects. It lacks details on behavior (e.g., success/failure states, device requirements), return values, or error handling, which are crucial for an agent to use it correctly in context with sibling tools.

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

Parameters3/5

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

Schema description coverage is 100%, with clear descriptions for both parameters (package name and optional device serial). The description adds no additional parameter semantics beyond what the schema provides, such as format examples or constraints. Baseline 3 is appropriate since the schema does the heavy lifting.

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

Purpose4/5

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

The description clearly states the action ('Launch') and target resource ('Android app by package name'), providing a specific verb+resource combination. However, it doesn't explicitly differentiate from sibling tools like 'android_list_packages' or 'android_execute_command' that might also interact with apps, leaving some ambiguity about its unique role.

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 doesn't mention prerequisites (e.g., device connectivity), exclusions (e.g., apps not installed), or compare it to siblings like 'android_execute_command' for broader commands or 'android_list_packages' for discovery, leaving the agent to infer usage context.

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

android_list_packagesC

List installed packages on the Android device

ParametersJSON Schema
NameRequiredDescriptionDefault
filterNoOptional filter to search for specific packages (case-insensitive)
deviceSerialNoSpecific device serial number to target (optional)

TDQS

C2.9/5.0
Behavior2/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 of behavioral disclosure. It states it 'lists' packages, which implies a read-only operation, but doesn't specify what the output includes (e.g., package names, versions, permissions), whether it requires ADB access or specific permissions, or if there are rate limits. The description is minimal and lacks crucial behavioral details for a tool interacting with a device.

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 that front-loads the core purpose without any fluff or redundancy. Every word earns its place, making it highly efficient and easy to parse. It's appropriately sized for a simple listing tool.

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

Completeness2/5

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

Given the complexity (device interaction tool with no annotations and no output schema), the description is incomplete. It doesn't explain the return format (e.g., list of strings, JSON structure), error conditions, or dependencies like ADB setup. For a tool that likely outputs data, the lack of output details is a significant gap, making it inadequate for full contextual understanding.

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

Parameters3/5

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

Schema description coverage is 100%, with both parameters (filter and deviceSerial) well-documented in the schema. The description adds no additional parameter information beyond implying a listing action. According to the rules, with high schema coverage (>80%), the baseline is 3 even with no param info in the description, which fits here.

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

Purpose4/5

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

The description clearly states the verb ('List') and resource ('installed packages on the Android device'), making the purpose immediately understandable. It distinguishes from siblings like android_execute_command or android_launch_app by focusing on package enumeration rather than execution or interaction. However, it doesn't explicitly differentiate from potential similar tools (e.g., if there were a 'list_system_packages' sibling), so it's not a perfect 5.

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 doesn't mention prerequisites (e.g., device connectivity), exclusions (e.g., not for uninstalled packages), or related tools (e.g., whether android_uiautomator_dump might overlap). Usage is implied from the name and purpose alone, but no explicit context is given.

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

android_screenshotC

Capture a screenshot from the Android device

ParametersJSON Schema
NameRequiredDescriptionDefault
outputPathNoLocal path to save the screenshot (optional). If not provided, returns base64 encoded image.
deviceSerialNoSpecific device serial number to target (optional)

TDQS

C2.9/5.0
Behavior2/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 of behavioral disclosure. It states 'capture a screenshot' but doesn't mention any behavioral traits such as permissions needed, whether it requires an unlocked device, potential delays, or what happens if the device is off. This leaves significant gaps for a tool that interacts with hardware.

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, direct sentence that efficiently conveys the core action without any wasted words. It's appropriately sized and front-loaded, making it easy for an agent to parse quickly.

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

Completeness2/5

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

Given the complexity of interacting with an Android device and the lack of annotations and output schema, the description is insufficient. It doesn't explain what the tool returns (e.g., base64 image or file path), error conditions, or dependencies, making it incomplete for safe and effective use by an agent.

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 has 100% description coverage, clearly documenting both optional parameters. The description adds no additional parameter semantics beyond what the schema provides, so it meets the baseline score of 3 for high schema coverage without extra value.

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

Purpose4/5

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

The description clearly states the verb ('capture') and resource ('screenshot from the Android device'), making the purpose immediately understandable. However, it doesn't differentiate from sibling tools like 'android_capture_frame_scrcpy' or 'android_get_latest_frame', which appear to be related screenshot/capture tools, so it doesn't reach the highest score.

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. With multiple sibling tools that might involve capturing or getting frames (e.g., android_capture_frame_scrcpy, android_get_latest_frame), there's no indication of when this specific screenshot tool is preferred or what distinguishes it, leaving the agent without usage context.

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

android_send_key_eventB

Send a key event to the Android device (e.g., KEYEVENT_HOME, KEYEVENT_BACK, KEYEVENT_ENTER)

ParametersJSON Schema
NameRequiredDescriptionDefault
keyCodeYesKey event code (e.g., KEYEVENT_HOME, KEYEVENT_BACK, KEYEVENT_ENTER, 3 for HOME, 4 for BACK). Can be key name or numeric code.
deviceSerialNoSpecific device serial number to target (optional)

TDQS

B3.1/5.0
Behavior2/5

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

With no annotations, the description carries full burden but lacks behavioral details. It doesn't disclose effects (e.g., whether it simulates physical key presses, requires device connectivity, or has rate limits), leaving the agent to infer behavior from the action 'Send'.

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, efficient sentence that front-loads the core purpose and provides relevant examples without unnecessary elaboration. Every word contributes to understanding the tool's function.

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 2 parameters, 100% schema coverage, and no output schema, the description is adequate but incomplete. It covers the basic purpose but lacks details on behavioral traits (e.g., device state requirements or error handling), which are important given the absence of annotations.

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 keyCode and deviceSerial parameters. The description adds minimal value by listing example key codes (KEYEVENT_HOME, KEYEVENT_BACK, KEYEVENT_ENTER), which aligns with but doesn't significantly expand on schema details.

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 ('Send a key event') and target ('Android device'), with examples like KEYEVENT_HOME and KEYEVENT_BACK. It distinguishes from siblings like android_input_text (for text) and android_touch (for touch gestures), but doesn't explicitly contrast them.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives is provided. For example, it doesn't specify when to use android_send_key_event over android_input_text for Enter key events or android_touch for navigation, leaving usage context implied rather than explicit.

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

android_start_scrcpy_streamB

Start scrcpy streaming for continuous fast frame capture (requires scrcpy installed)

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceSerialNoSpecific device serial number to target (optional)

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 full burden but only mentions the scrcpy installation prerequisite. It doesn't disclose whether this starts a background process, consumes resources, requires specific permissions, has rate limits, or how to access the streamed frames. For a streaming tool with zero annotation coverage, this leaves significant behavioral gaps.

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, efficient sentence that front-loads the core purpose and includes a crucial prerequisite. Every word earns its place with no wasted text.

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 streaming tool with no annotations and no output schema, the description is insufficient. It doesn't explain what 'continuous fast frame capture' means operationally, how frames are accessed, whether the stream persists across tool calls, or what happens if scrcpy isn't installed. Given the complexity and lack of structured data, more context is needed.

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

Parameters3/5

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

Schema description coverage is 100% with one optional parameter clearly documented in the schema. The description adds no parameter information beyond what the schema provides, so it meets the baseline for high schema coverage but doesn't add extra value.

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 ('Start scrcpy streaming') and purpose ('for continuous fast frame capture'), which distinguishes it from single-frame capture tools like android_capture_frame_scrcpy or android_screenshot. However, it doesn't explicitly differentiate from android_stop_scrcpy_stream beyond the obvious start/stop distinction.

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 continuous frame capture is needed versus single-frame alternatives, but doesn't explicitly state when to use this tool versus android_capture_frame_scrcpy or android_get_latest_frame. The prerequisite 'requires scrcpy installed' provides some context but no explicit when-not-to-use guidance.

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

android_stop_scrcpy_streamB

Stop scrcpy streaming

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

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 states the action ('Stop') but doesn't explain what happens when invoked (e.g., whether it terminates an active stream gracefully, frees resources, or has side effects). This is a significant gap for a tool that likely involves resource management.

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

Conciseness5/5

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

The description is extremely concise with just three words, front-loading the essential action. There's no wasted text, making it efficient and easy to parse, which is ideal for a simple tool with no parameters.

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

Completeness3/5

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

Given the tool's simplicity (0 parameters, no output schema, no annotations), the description is minimally adequate but lacks completeness. It doesn't address behavioral aspects like what 'Stop' entails or dependencies on other tools, leaving gaps that could confuse an agent about proper usage.

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

Parameters4/5

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

The input schema has 0 parameters with 100% coverage, so no parameter documentation is needed. The description doesn't add parameter information, which is appropriate here, earning a baseline score of 4 for not introducing unnecessary details.

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

Purpose4/5

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

The description clearly states the verb ('Stop') and resource ('scrcpy streaming'), making the purpose immediately understandable. It doesn't explicitly differentiate from sibling tools like 'android_start_scrcpy_stream', but the action is specific enough to infer it's the counterpart to starting the stream.

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 or any prerequisites. It doesn't mention that it should be used after starting a stream with 'android_start_scrcpy_stream' or warn against using it if no stream is active, leaving usage context unclear.

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

android_swipeC

Perform a swipe gesture between two coordinates

ParametersJSON Schema
NameRequiredDescriptionDefault
startXYesStarting X coordinate
startYYesStarting Y coordinate
endXYesEnding X coordinate
endYYesEnding Y coordinate
durationNoSwipe duration in milliseconds (default: 300)
deviceSerialNoSpecific device serial number to target (optional)

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 mentions the gesture but doesn't cover important aspects like whether this requires device interaction permissions, if it's synchronous/asynchronous, error conditions, or what happens on multi-touch screens. The default duration is mentioned in the schema but not in the description.

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, efficient sentence that states exactly what the tool does with zero wasted words. It's appropriately sized for a straightforward input/output tool and is perfectly front-loaded.

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 that performs device interaction with no annotations and no output schema, the description is insufficient. It doesn't explain what constitutes valid coordinate ranges, how coordinates map to screen dimensions, what happens if coordinates are out of bounds, or what the expected outcome of a successful swipe is.

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 parameters. The description adds no additional parameter semantics beyond what's already in the schema. The baseline of 3 is appropriate when the schema does all the parameter documentation work.

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 ('perform a swipe gesture') and specifies it's between two coordinates, which distinguishes it from other touch-based interactions like android_touch or android_uiautomator_click. However, it doesn't explicitly differentiate from all sibling tools beyond the basic gesture type.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives like android_touch or android_uiautomator_scroll_in_element. The description only states what it does, not when it's appropriate or what scenarios it's designed for.

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

android_touchC

Simulate a touch event at specific screen coordinates

ParametersJSON Schema
NameRequiredDescriptionDefault
xYesX coordinate
yYesY coordinate
durationNoTouch duration in milliseconds (default: 100)
deviceSerialNoSpecific device serial number to target (optional)

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 mentions 'simulate a touch event' which implies a write/mutation operation, but fails to specify critical details like required permissions (e.g., device accessibility), side effects (e.g., potential app state changes), error handling, or response format. This is a significant gap for a tool that interacts with device input.

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, efficient sentence that directly states the tool's function without unnecessary words. It is front-loaded with the core action ('simulate a touch event') and avoids redundancy, making it easy for an agent to parse quickly.

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 no annotations, no output schema, and parameters that control device interaction, the description is incomplete. It lacks information about behavioral traits (e.g., mutation effects, error conditions), output expectations, or integration context (e.g., how it relates to other Android tools like android_start_scrcpy_stream). This leaves the agent under-informed for safe and effective 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?

Schema description coverage is 100%, so the schema fully documents all parameters (x, y, duration, deviceSerial). The description adds no additional meaning beyond the schema's parameter descriptions, such as coordinate system details (e.g., screen resolution) or practical usage tips. Baseline 3 is appropriate when the schema does the heavy lifting.

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

Purpose4/5

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

The description clearly states the action ('simulate a touch event') and target ('at specific screen coordinates'), which distinguishes it from siblings like android_swipe or android_uiautomator_click that involve different interaction types. However, it doesn't explicitly differentiate from all siblings (e.g., android_uiautomator_click also involves touch-like actions but with element-based targeting).

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 like android_swipe (for drag gestures) or android_uiautomator_click (for element-based interactions). It lacks context about prerequisites (e.g., device state) or exclusions, leaving the agent to infer usage from the tool name and parameters alone.

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

android_uiautomator_clear_textC

Clear text from a UI element by resource ID

ParametersJSON Schema
NameRequiredDescriptionDefault
resourceIdYesResource ID of the element to clear
deviceSerialNoSpecific device serial number to target (optional)

TDQS

C2.9/5.0
Behavior2/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 of behavioral disclosure. It states the action (clear text) but lacks details on what 'clear' entails (e.g., does it simulate backspace, delete all text at once, require focus?), potential side effects (e.g., might trigger UI events), error conditions (e.g., if element not found or not clearable), or performance aspects. This is a significant gap for a mutation tool with zero annotation coverage.

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, direct sentence that efficiently conveys the core functionality without unnecessary words. It's front-loaded with the key action and target, making it easy to parse quickly. Every part of the sentence earns its place by specifying the operation and how to identify the element.

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

Completeness2/5

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

Given the complexity (a mutation tool for Android UI automation), lack of annotations, and no output schema, the description is incomplete. It doesn't explain behavioral traits, error handling, or return values (e.g., success/failure status), which are crucial for safe and effective use. While the schema covers parameters well, the overall context for tool invocation is insufficient.

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

Parameters3/5

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

Schema description coverage is 100%, with clear descriptions for both parameters (resourceId and deviceSerial). The description adds minimal value beyond the schema, as it only reiterates the resource ID aspect without providing additional context (e.g., format examples, common patterns, or when deviceSerial is needed). With high schema coverage, the baseline score of 3 is appropriate, as the description doesn't compensate but also doesn't detract.

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 ('clear text') and target ('from a UI element by resource ID'), making the purpose immediately understandable. It distinguishes itself from sibling tools like android_uiautomator_set_text (which sets text) and android_input_text (which inputs text generally). However, it doesn't specify what type of UI element (e.g., text field, edit box) or clarify that it's specifically for Android UI automation, though context from sibling names helps.

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

Usage Guidelines2/5

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

No explicit guidance is provided on when to use this tool versus alternatives. While the description implies it's for clearing text from UI elements identified by resource ID, it doesn't mention prerequisites (e.g., the element must be interactable), exclusions (e.g., not for non-text elements), or compare it to similar tools like android_uiautomator_set_text (which could clear by setting empty text). Usage is implied but not clearly defined.

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

android_uiautomator_clickC

Click on a UI element by resource ID using UIAutomator

ParametersJSON Schema
NameRequiredDescriptionDefault
resourceIdYesResource ID of the element to click (e.g., com.example.app:id/button_submit)
deviceSerialNoSpecific device serial number to target (optional)

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries full burden. It mentions 'using UIAutomator' but doesn't disclose behavioral traits such as error handling (e.g., if element not found), performance implications (e.g., waiting times), or side effects (e.g., potential app state changes). For a UI interaction tool with zero annotation coverage, this is a significant gap in transparency.

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

Conciseness5/5

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

The description is a single, efficient sentence that front-loads the core action ('Click on a UI element') and method ('using UIAutomator'), with zero wasted words. It's appropriately sized for a straightforward tool.

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

Completeness2/5

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

Given the complexity of UI automation (interactive, state-dependent) with no annotations and no output schema, the description is incomplete. It lacks details on success/failure outcomes, error conditions, dependencies (e.g., UIAutomator setup), or behavioral nuances, leaving significant gaps for an AI agent to use it correctly.

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

Parameters3/5

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

Schema description coverage is 100%, with clear descriptions for both parameters in the schema itself. The description adds no additional meaning beyond what's in the schema (e.g., it doesn't explain format constraints or provide examples beyond the schema's example). Baseline 3 is appropriate as the schema does the heavy lifting.

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

Purpose4/5

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

The description clearly states the action ('Click on a UI element') and the method ('using UIAutomator'), with the resource ID as the targeting mechanism. It distinguishes from generic 'android_touch' by specifying UIAutomator-based clicking, but doesn't explicitly differentiate from 'android_uiautomator_double_click' or 'android_uiautomator_long_click' beyond the basic click 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 guidance is provided on when to use this tool versus alternatives like 'android_touch' (general touch), 'android_uiautomator_double_click', or 'android_uiautomator_long_click'. The description implies usage for clicking by resource ID with UIAutomator, but lacks explicit context about prerequisites (e.g., device accessibility enabled) or comparative scenarios.

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

android_uiautomator_double_clickC

Perform a double click on a UI element by resource ID

ParametersJSON Schema
NameRequiredDescriptionDefault
resourceIdYesResource ID of the element to double click
deviceSerialNoSpecific device serial number to target (optional)

TDQS

C2.9/5.0
Behavior2/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 mentions the action (double click) but lacks critical behavioral details: whether this requires prior UI element interaction, what happens on failure (e.g., if element not found), if it blocks until completion, or error conditions. For a UI automation tool with zero annotation coverage, this is insufficient.

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, efficient sentence with zero wasted words. It is front-loaded with the core action and target, making it easy to parse quickly.

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

Completeness2/5

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

Given the complexity of UI automation, no annotations, and no output schema, the description is incomplete. It misses behavioral context (e.g., success/failure states, dependencies), usage prerequisites, and error handling, which are crucial for effective tool invocation in this domain.

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 both parameters (resourceId and deviceSerial). The description adds no additional meaning beyond implying resourceId targets a UI element, which is already clear from the schema. Baseline 3 is appropriate as the schema does the heavy lifting.

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

Purpose4/5

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

The description clearly states the action ('Perform a double click') and target ('on a UI element by resource ID'), which is specific and unambiguous. It distinguishes from sibling tools like android_uiautomator_click (single click) and android_uiautomator_long_click, but does not explicitly mention these alternatives in the description itself.

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 like android_uiautomator_click or android_touch, nor does it mention prerequisites (e.g., needing an active Android session or UI element visibility). It only states what the tool does, not when to apply it.

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

android_uiautomator_dumpB

Dump the UI hierarchy using UIAutomator and return as XML

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceSerialNoSpecific device serial number to target (optional)

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 full burden but only states the basic action and output format. It doesn't disclose behavioral traits such as whether this requires device connectivity, potential performance impacts, error conditions, or if it's read-only (implied by 'Dump' but not explicit). More context on operational constraints is needed.

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, efficient sentence that front-loads the key information: action, method, and output. There is no wasted text, making it easy to parse quickly for an AI agent.

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

Completeness3/5

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

Given the tool's moderate complexity (UI hierarchy dumping) and lack of annotations and output schema, the description is minimally adequate. It specifies the output as XML but doesn't explain the structure or content of the XML, which could be crucial for an agent to interpret results. More details on behavior or output would improve completeness.

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%, so the parameter 'deviceSerial' is well-documented in the schema. The description doesn't add extra param details, which is acceptable given high schema coverage. With only one optional parameter, the baseline is high, and the description doesn't detract from schema clarity.

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 ('Dump') and resource ('UI hierarchy using UIAutomator'), specifying the output format ('return as XML'). It distinguishes from siblings like android_screenshot or android_capture_frame_scrcpy by focusing on UI hierarchy extraction rather than visual capture, though it doesn't explicitly contrast with android_uiautomator_find which might also interact with UI hierarchy.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives. For example, it doesn't mention if this is for debugging, automation setup, or when android_uiautomator_find might be preferred for specific element interactions. The description lacks context about prerequisites or typical use cases.

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

android_uiautomator_findC

Find UI elements by resource ID or text using UIAutomator

ParametersJSON Schema
NameRequiredDescriptionDefault
resourceIdNoResource ID to search for (e.g., com.example.app:id/button_submit)
textNoText content to search for
deviceSerialNoSpecific device serial number to target (optional)

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 mentions the search mechanism (UIAutomator) but lacks critical details: whether this is a read-only operation, if it requires device permissions, how it handles multiple matching elements, error conditions (e.g., no matches), or performance implications. For a tool with potential side effects or constraints, this is a significant 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?

The description is a single, efficient sentence that front-loads the core purpose ('Find UI elements') and includes key details (search criteria and mechanism). There is no redundant information or unnecessary elaboration, making it highly concise and well-structured for quick understanding.

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

Completeness2/5

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

Given the complexity of UI automation, no annotations, and no output schema, the description is incomplete. It doesn't explain return values (e.g., element identifiers or error messages), behavioral traits like idempotency or side effects, or integration with sibling tools (e.g., how found elements might be used with android_uiautomator_click). For a tool in a rich sibling set, more context is needed.

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

Parameters3/5

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

Schema description coverage is 100%, with clear parameter descriptions in the input schema. The description adds minimal value by naming the search criteria ('resource ID or text') but doesn't elaborate on syntax, precedence (if both parameters are provided), or practical examples beyond what the schema provides. With high schema coverage, the baseline score of 3 is appropriate.

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

Purpose4/5

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

The description clearly states the action ('Find UI elements') and the mechanism ('using UIAutomator'), with specific search criteria ('by resource ID or text'). It distinguishes itself from sibling tools like android_uiautomator_click or android_uiautomator_set_text by focusing on element discovery rather than interaction. However, it doesn't explicitly differentiate from android_uiautomator_dump, which might also involve element discovery, making it slightly less specific.

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 doesn't mention prerequisites (e.g., needing an active device connection), compare it to sibling tools like android_uiautomator_dump for broader element discovery, or specify scenarios where resource ID vs. text searching is preferred. Usage is implied but not explicitly stated.

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

android_uiautomator_long_clickA

Perform a long click on a UI element by resource ID

ParametersJSON Schema
NameRequiredDescriptionDefault
resourceIdYesResource ID of the element to long click
deviceSerialNoSpecific device serial number to target (optional)

TDQS

A3.6/5.0
Behavior2/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 mentions the action ('long click') but lacks details on behavioral traits such as duration of the long click, error handling if the element isn't found, whether it requires the app to be in the foreground, or any side effects like UI changes. This is a significant gap for a mutation tool with zero annotation coverage.

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, efficient sentence that front-loads the core action ('Perform a long click') and specifies the target ('UI element by resource ID'). There is no wasted verbiage, making it highly concise and well-structured for quick understanding.

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

Completeness2/5

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

Given this is a mutation tool with no annotations, no output schema, and incomplete behavioral disclosure, the description is inadequate. It doesn't cover key aspects like what constitutes a 'long click' (e.g., duration), error scenarios, or expected outcomes, leaving gaps that could hinder correct agent usage.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents both parameters (resourceId and deviceSerial). The description adds minimal value beyond the schema by implying resourceId is used for targeting the element, but it doesn't provide additional context like format examples or usage tips. Baseline 3 is appropriate when the schema does the heavy lifting.

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 specific action ('Perform a long click') on a specific resource ('UI element by resource ID'), distinguishing it from siblings like android_uiautomator_click (regular click) and android_uiautomator_double_click. It uses precise verb+resource language without being tautological.

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 implies usage context by specifying 'UI element by resource ID,' suggesting it's for interacting with Android UI elements identified by IDs. However, it doesn't explicitly state when to use this versus alternatives like android_touch or android_uiautomator_click, nor does it mention prerequisites like needing UI visibility or device connection.

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

android_uiautomator_scroll_in_elementC

Scroll within a specific UI element

ParametersJSON Schema
NameRequiredDescriptionDefault
resourceIdYesResource ID of the scrollable element
directionYesDirection to scroll
distanceNoDistance to scroll in pixels (default: 500)
deviceSerialNoSpecific device serial number to target (optional)

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 the action but lacks details on permissions needed, whether it's destructive (e.g., could cause unintended UI changes), error handling, or performance implications. This is inadequate for a tool with potential side effects.

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

Conciseness5/5

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

The description is a single, efficient sentence that front-loads the core functionality ('Scroll within a specific UI element') with zero wasted words. It's appropriately sized for the tool's complexity.

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

Completeness2/5

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

Given no annotations and no output schema, the description is incomplete. It lacks behavioral context (e.g., safety, side effects) and doesn't explain return values or errors. For a UI automation tool with potential mutations, this leaves significant gaps for an AI agent.

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 parameters. The description adds no additional meaning beyond what's in the schema, such as explaining 'resourceId' as a UI element identifier or 'distance' in practical terms. Baseline 3 is appropriate as the schema handles parameter documentation.

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') and target ('within a specific UI element'), providing a specific verb+resource combination. It distinguishes from sibling tools like 'android_swipe' (general swipe) by specifying scrolling within an element, though it doesn't explicitly contrast with all siblings.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives like 'android_swipe' for general scrolling or other UI automation tools. The description implies usage for scrolling within elements but offers no explicit context, prerequisites, or exclusions.

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

android_uiautomator_set_textB

Set text on a UI element by resource ID using UIAutomator

ParametersJSON Schema
NameRequiredDescriptionDefault
resourceIdYesResource ID of the element (e.g., com.example.app:id/text_input)
textYesText to set in the element
deviceSerialNoSpecific device serial number to target (optional)

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 mentions the method ('using UIAutomator') but doesn't cover critical aspects like whether this requires device interaction permissions, potential side effects (e.g., overwriting existing text), error handling, or performance implications. This leaves significant gaps for a mutation tool.

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

Conciseness5/5

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

The description is a single, direct sentence that efficiently conveys the core functionality without unnecessary words. It's front-loaded with the key action ('Set text') and includes essential context ('by resource ID using UIAutomator'), making it highly concise and well-structured.

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 mutation tool with no annotations and no output schema, the description is insufficient. It lacks details on behavioral traits (e.g., permissions, side effects), error conditions, or return values, which are critical for safe and effective tool invocation in an Android automation context.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema fully documents all three parameters (resourceId, text, deviceSerial). The description adds no additional parameter semantics beyond what's in the schema, such as examples or constraints. Baseline 3 is appropriate when the schema handles parameter documentation effectively.

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 ('Set text') and target ('on a UI element by resource ID using UIAutomator'), distinguishing it from generic text input tools like 'android_input_text'. However, it doesn't explicitly differentiate from sibling UIAutomator tools like 'android_uiautomator_clear_text' in terms of specific use cases.

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 setting text on UI elements identified by resource ID, which suggests it's for targeted text input in Android apps. However, it lacks explicit guidance on when to use this vs. alternatives like 'android_input_text' (for general text) or 'android_uiautomator_clear_text' (for clearing text), leaving the agent to infer based on context.

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

android_uiautomator_toggle_checkboxC

Toggle a checkbox element by resource ID

ParametersJSON Schema
NameRequiredDescriptionDefault
resourceIdYesResource ID of the checkbox element
deviceSerialNoSpecific device serial number to target (optional)

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries full burden. While 'toggle' implies a state change (mutating the checkbox), the description doesn't disclose behavioral traits like whether this requires specific permissions, what happens if the element isn't found, if it waits for UI stability, or what the expected outcome is. It's minimally descriptive for a mutation operation.

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, efficient sentence with zero wasted words. It's appropriately sized for a simple tool and front-loads the core functionality immediately.

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 mutation tool with no annotations and no output schema, the description is insufficient. It doesn't explain what 'toggle' means in practice (e.g., checks if unchecked, unchecks if checked), error conditions, or return values. Given the complexity of UI automation and lack of structured data, more context is needed.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents both parameters (resourceId and deviceSerial) adequately. The description doesn't add any meaningful parameter semantics beyond what's in the schema, such as format examples or constraints, meeting the baseline for high schema coverage.

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

Purpose4/5

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

The description clearly states the action ('toggle') and target ('checkbox element by resource ID'), providing a specific verb+resource combination. However, it doesn't distinguish this tool from similar sibling tools like android_uiautomator_click or android_uiautomator_double_click that might also interact with UI elements.

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. There's no mention of prerequisites (e.g., needing an active Android session), when not to use it, or how it differs from other UI interaction tools in the sibling list.

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

android_uiautomator_waitC

Wait for a UI element to appear by resource ID

ParametersJSON Schema
NameRequiredDescriptionDefault
resourceIdYesResource ID of the element to wait for
timeoutMsNoMaximum time to wait in milliseconds (default: 5000)
deviceSerialNoSpecific device serial number to target (optional)

TDQS

C2.9/5.0
Behavior2/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 tool waits for an element to appear, implying a blocking operation with a timeout, but doesn't disclose behavioral details like what happens on timeout (e.g., returns error or null), whether it polls continuously, or if it requires specific device states. For a tool with no annotations, this is a significant 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?

The description is a single, efficient sentence: 'Wait for a UI element to appear by resource ID.' It's front-loaded with the core action and resource, with zero wasted words. Every part of the sentence contributes directly to understanding the tool's purpose.

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

Completeness2/5

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

Given no annotations, no output schema, and a tool that performs a potentially complex waiting operation, the description is incomplete. It doesn't explain return values (e.g., success/failure, element details), error conditions, or dependencies like device connectivity. For a 3-parameter tool with behavioral implications, more context is needed.

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 the three parameters (resourceId, timeoutMs, deviceSerial). The description adds no additional meaning beyond implying resourceId is the key input. With high schema coverage, the baseline score of 3 is appropriate as the description doesn't enhance parameter understanding.

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's purpose: 'Wait for a UI element to appear by resource ID.' It specifies the verb ('wait') and resource ('UI element'), but doesn't explicitly differentiate from siblings like android_uiautomator_find, which might also locate elements. The description is specific but lacks sibling comparison.

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 doesn't mention prerequisites, such as needing an active Android device connection, or compare it to siblings like android_uiautomator_find for immediate element retrieval. Usage 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.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 17 tool updatesv1.0.0
    • Addedandroid_capture_frame_scrcpy
    • Addedandroid_execute_command
    • Addedandroid_get_latest_frame
    • Addedandroid_input_text
    • Addedandroid_send_key_event
    • Addedandroid_start_scrcpy_stream
    • Addedandroid_stop_scrcpy_stream
    • Addedandroid_uiautomator_clear_text
    • Addedandroid_uiautomator_click
    • Addedandroid_uiautomator_double_click
    • Addedandroid_uiautomator_dump
    • Addedandroid_uiautomator_find
    • Addedandroid_uiautomator_long_click
    • Addedandroid_uiautomator_scroll_in_element
    • Addedandroid_uiautomator_set_text
    • Addedandroid_uiautomator_toggle_checkbox
    • Addedandroid_uiautomator_wait
  2. 5 tool updates
    • First observedandroid_launch_app
    • First observedandroid_list_packages
    • First observedandroid_screenshot
    • First observedandroid_swipe
    • First observedandroid_touch

TDQS

B3.4/5.0
Disambiguation4/5

Most tools have distinct purposes, but there is some overlap between android_capture_frame_scrcpy, android_get_latest_frame, and android_screenshot, which all capture screen content with different methods and latencies. The UIAutomator tools are well-differentiated for specific UI interactions like clicking, setting text, or toggling checkboxes.

Naming Consistency5/5

All tool names follow a consistent snake_case pattern with a clear 'android_' prefix and descriptive verb_noun combinations (e.g., android_execute_command, android_uiautomator_click). This predictability makes it easy for agents to understand and select tools based on their names.

Tool Count3/5

With 22 tools, the count is on the higher side for an Android automation server, which might feel heavy but is reasonable given the broad scope covering ADB commands, screen capture, input simulation, and UIAutomator interactions. It borders on being slightly excessive but still manageable.

Completeness5/5

The toolset provides comprehensive coverage for Android device automation, including ADB command execution, screen capture (via multiple methods), input gestures, app launching, and detailed UIAutomator-based UI interactions. There are no obvious gaps; agents can perform full testing and control workflows without dead ends.

Maintenance

ActivityInactive
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

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

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables interaction with Android devices and emulators through ADB, allowing control actions like tapping, text input, screenshots, UI inspection, and app launching through natural language.
    17
    8
    ISC
  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables control of Android devices through ADB using natural language commands. Supports browser automation, SMS sending, device information retrieval, settings control, and common device actions like screenshots and button presses.
    3
    -
  • 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
    79
    16
    MIT

Latest Blog Posts

MCP directory API

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

curl -X GET 'https://glama.ai/api/mcp/v1/servers/jduartedj/android-mcp-server'

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