Skip to main content
Glama

Mobile Next - MCP server for Mobile Development and Automation | iOS, Android, Simulator, Emulator, and Real Devices

English | 日本語 | 简体中文

This is an MCP Server that enables scalable mobile automation, development through a platform-agnostic interface, eliminating the need for distinct iOS or Android knowledge. You can run it on emulators, simulators, and real devices (iOS and Android).

This server allows Agents and LLMs to interact with native iOS/Android applications and devices through structured accessibility snapshots or coordinate-based taps based on screenshots.

Works with Claude Code, Codex, Gemini, GitHub Copilot, Antigravity — or any MCP-compatible client.

Run it against devices on your own machine, or against real iOS and Android devices in the cloud with Mobile Next Cloud — same tools, no local setup.

https://github.com/user-attachments/assets/bb084777-beb3-4930-ae6f-8d3fe694ddde

Main use cases

How we help to scale mobile automation:

  • 📲 Native app automation (iOS and Android) for testing or data-entry scenarios.

  • 📝 Scripted flows and form interactions without manually controlling simulators/emulators or real devices (iPhone, Samsung, Google Pixel etc)

  • 🧭 Automating multi-step user journeys driven by an LLM

  • 👆 General-purpose mobile application interaction for agent-based frameworks

  • 🤖 Enables agent-to-agent communication for mobile automation usecases, data extraction

Main Features

  • 🚀 Accessibility-first — fast and cheap: drives apps from the native accessibility tree (no vision model, no image tokens), falling back to screenshots + coordinates only when needed.

  • 📱 One API, every target: the same tools work across iOS and Android — simulators, emulators, and real devices.

  • 🧠 No platform expertise required: no XCUITest, no Espresso, no per-platform glue — describe the goal and the agent does it.

  • 🧰 Full device control: taps, swipes, and gestures; app install/launch/terminate; screen recording; hardware buttons; deep links; orientation.

  • 📊 Structured, deterministic output: reads real UI elements and extracts structured data, cutting the ambiguity of screenshot-only approaches.

🎯 Platform Support

Target

Supported

Setup

iOS Simulator

Xcode + a booted simulator (xcrun simctl)

iOS Real Device

Device connected over USB and trusted

Android Emulator

Android SDK + running emulator (adb)

Android Real Device

adb + USB debugging enabled & authorized

Related MCP server: Android-MCP

🔧 Available MCP Tools

Device Management

  • mobile_list_available_devices - List all available devices (simulators, emulators, and real devices)

  • mobile_get_screen_size - Get the screen size of the mobile device in pixels

  • mobile_get_orientation - Get the current screen orientation of the device

  • mobile_set_orientation - Change the screen orientation (portrait/landscape)

  • mobile_set_location - Override the GPS location reported by the device, or clear the override

  • mobile_clipboard - Read or replace the device clipboard

Remote Devices (Mobile Next Cloud)

  • mobile_login_to_cloud_provider - Authenticate this machine with the cloud device provider (browser-based device-code login)

  • mobile_list_remote_devices - List device models available to reserve from the cloud fleet

  • mobile_allocate_remote_device - Reserve a physical cloud device for exclusive use

  • mobile_release_remote_device - Release a reserved cloud device back to the fleet

App Management

  • mobile_list_apps - List apps known by the device backend, including the current device-locale label when available

  • mobile_resolve_app - Resolve an app uniquely by package name or its current device-locale label; ambiguous labels are rejected

  • mobile_get_foreground_app - Get the app currently in the foreground

  • mobile_get_app_capabilities - Inspect installed/enabled/launchable metadata and whether foreground verification is supported

  • mobile_launch_app - Launch an app directly by package name or current device-locale label, confirming foreground by default

  • mobile_wait_for_app - Wait for an app to reach the foreground and/or expose an exact visible UI target

  • mobile_launch_and_ready - Launch, wait for readiness, and return a fresh frame-validated screenshot snapshot in one call

  • mobile_restore_previous_app - Return to the app that was foreground before the last verified launch/link session; screen data is re-observed

  • mobile_ensure_app - Verify installation, optionally install a local package, and then launch with readiness verification

  • mobile_terminate_app - Stop and terminate a running app

  • mobile_install_app - Install an app from file (.apk, .ipa, .app, .zip)

  • mobile_uninstall_app - Uninstall an app using bundle ID or package name

Screen Interaction

  • mobile_take_screenshot - Take a screenshot to understand what's on screen

  • mobile_save_screenshot - Save a screenshot to a file

  • mobile_list_elements_on_screen - List UI elements with their coordinates and properties

  • mobile_click_on_screen_at_coordinates - Click at coordinates, a ref, or a unique exact UI target

  • mobile_double_tap_on_screen - Double-tap at specific coordinates

  • mobile_long_press_on_screen_at_coordinates - Long press at specific coordinates

  • mobile_swipe_on_screen - Swipe in any direction (up, down, left, right)

  • mobile_start_screen_recording - Start recording the device screen to a video file

  • mobile_stop_screen_recording - Stop the active screen recording and save the video

Input & Navigation

  • mobile_type_keys - Type text into focused elements with optional submit

  • mobile_press_button - Press device buttons (HOME, BACK, VOLUME_UP/DOWN, ENTER, etc.)

  • mobile_open_url - Open URLs in the device browser

  • mobile_open_app_link - Bind a URL/deep link to an expected app, open it, and verify that the target app reaches the foreground

Logs & Crash Reports

  • mobile_get_device_logs - Collect live device logs (logcat on Android, unified log on iOS), optionally saved to a file

  • mobile_list_crashes - List crash reports available on the device

  • mobile_get_crash - Get the full content of a crash report by its ID

  • mobile_batch_commands - Run multiple tools in sequence in a single call (e.g. click, type, click), optionally listing screen elements at the end

Agent loop acceleration

  • mobile_observe_scene - Return a compact UI Scene plus a local open/mixed/closed lookahead estimate, instead of sending a full UI dump to the model on every step.

  • mobile_estimate_lookahead - Estimate a conservative batch size and verification cadence from local Scene evidence. This is a scheduling hint, never mutation authority.

  • mobile_get_transition_hint - Read a short-lived, hashed hint learned from verified action-plan segments without contacting the device.

  • mobile_agent_task_start / mobile_agent_task_update / mobile_agent_task_get - Keep bounded Planner/Orchestrator-style subgoal progress, failure codes, and replan events in the MCP runtime.

🏗️ Mobile MCP Architecture

The MCP client agent and the device runtime are intentionally separate. A client may use a Planner/Cortex/Executor loop for open-ended tasks, while the runtime uses compact Scenes, local verification, a resident native driver, and per-device safety lanes. Closed subproblems can run as bounded action-plan segments; submission, payment, permission, and interruption boundaries force a fresh observation.

The lookahead, transition-memory, and task-state components were independently implemented in TypeScript after studying the public Planner/Contextor/Cortex/Executor/Summarizer architecture in Minitap's Apache-2.0 project. See NOTICE and THIRD_PARTY_NOTICES.md for attribution and redistribution requirements.

📚 Wiki page

More details in our wiki page for setup, configuration and debugging related questions.

Prerequisites

What you will need to connect MCP with your agent and mobile devices:

Installation and configuration

Standard config works in most of the tools:

{
  "mcpServers": {
    "mobile-mcp": {
      "command": "npx",
      "args": ["-y", "@mobilenext/mobile-mcp@latest"]
    }
  }
}

Add via the Amp VS Code extension settings screen or by updating your settings.json file:

"amp.mcpServers": {
  "mobile-mcp": {
    "command": "npx",
    "args": [
      "@mobilenext/mobile-mcp@latest"
    ]
  }
}

Amp CLI:

Run the following command in your terminal:

amp mcp add mobile-mcp -- npx @mobilenext/mobile-mcp@latest

Antigravity doesn't have a CLI command to add MCP servers, so add it manually. Edit ~/.gemini/config/mcp_config.json and add:

{
  "mcpServers": {
    "mobile-mcp": {
      "command": "npx",
      "args": ["-y", "@mobilenext/mobile-mcp@latest"]
    }
  }
}

To setup Cline, just add the json above to your MCP settings file.

More in our wiki

Use the Claude Code CLI to add the Mobile MCP server:

claude mcp add mobile-mcp -- npx -y @mobilenext/mobile-mcp@latest

Follow the MCP install guide, use json configuration above.

Use the Codex CLI to add the Mobile MCP server:

codex mcp add mobile-mcp npx "@mobilenext/mobile-mcp@latest"

Alternatively, create or edit the configuration file ~/.codex/config.toml and add:

[mcp_servers.mobile-mcp]
command = "npx"
args = ["@mobilenext/mobile-mcp@latest"]

For more information, see the Codex MCP documentation.

Use the Copilot CLI to interactively add the Mobile MCP server:

/mcp add

You can edit the configuration file ~/.copilot/mcp-config.json and add:

{
  "mcpServers": {
    "mobile-mcp": {
      "type": "local",
      "command": "npx",
      "tools": [
        "*"
      ],
      "args": [
        "@mobilenext/mobile-mcp@latest"
      ]
    }
  }
}

For more information, see the Copilot CLI documentation.

Click the button to install:

Or install manually:

Go to Cursor Settings -> MCP -> Add new MCP Server. Name to your liking, use command type with the command npx -y @mobilenext/mobile-mcp@latest. You can also verify config or add command like arguments via clicking Edit.

Use the Gemini CLI to add the Mobile MCP server:

gemini mcp add mobile-mcp npx -y @mobilenext/mobile-mcp@latest

Click the button to install:

Install in Goose

Or install manually:

Go to Advanced settings -> Extensions -> Add custom extension. Name to your liking, use type STDIO, and set the command to npx -y @mobilenext/mobile-mcp@latest. Click "Add Extension".

Follow the MCP Servers documentation. For example in .kiro/settings/mcp.json:

{
  "mcpServers": {
    "mobile-mcp": {
      "command": "npx",
      "args": [
        "@mobilenext/mobile-mcp@latest"
      ]
    }
  }
}

Follow the MCP Servers documentation. For example in ~/.config/opencode/opencode.json:

{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "mobile-mcp": {
      "type": "local",
      "command": [
        "npx",
        "@mobilenext/mobile-mcp@latest"
      ],
      "enabled": true
    }
  }
}

Open Windsurf settings, navigate to MCP servers, and add a new server using the command type with:

npx @mobilenext/mobile-mcp@latest

Or add the standard config under mcpServers in your settings as shown above.

Read more in our wiki! 🚀

✅ Verify it works

Once the server is configured, ask your agent to list devices:

list available devices

You should get back your running simulators, emulators, and connected devices. If you do, Mobile MCP is wired up correctly. If the list is empty, make sure a simulator or emulator is running (see Prerequisites) — for more help, check the wiki.

☁️ Scale up, use a cloud device

Want to scale to hundreds of devices? Use Mobile MCP in your CI/CD pipeline?

In your Agent, prompt:

log in to mobile next cloud and then show me which remote devices are available to me

Streamable HTTP Server Mode

By default, Mobile MCP runs over stdio. To start a Streamable HTTP server instead, use the --listen flag:

npx @mobilenext/mobile-mcp@latest --listen 3000

This binds to localhost:3000. To bind to a specific interface:

npx @mobilenext/mobile-mcp@latest --listen 0.0.0.0:3000

Then configure your MCP client to connect to http://<host>:3000/mcp (or https://…/mcp behind TLS). The endpoint accepts Streamable HTTP (POST on /mcp) without an MCP session, so the transport request itself is stateless. Device lanes, screenshot snapshots, recordings, and login processes are intentionally kept in the server process; if a load balancer is used, route a device workflow to the same process (or add a shared state store before horizontal scaling). Binding to a non-loopback interface requires MOBILEMCP_AUTH.

Migration note: --listen previously served the deprecated HTTP+SSE transport on /mcp. Clients must use Streamable HTTP against http(s)://host:port/mcp. The old pure-SSE flow on /mcp is no longer available.

When binding to localhost, Host-header DNS rebinding protection is enabled automatically.

Authorization

To require Bearer token authorization on the HTTP server, set the MOBILEMCP_AUTH environment variable:

MOBILEMCP_AUTH=my-secret-token npx @mobilenext/mobile-mcp@latest --listen 3000

When set, all requests must include the header Authorization: Bearer my-secret-token. An unauthenticated server is allowed only on loopback; --listen 0.0.0.0:3000 (or another non-loopback address) fails closed unless MOBILEMCP_AUTH is set. Browser requests with an Origin header must also be listed in MOBILEMCP_ALLOWED_ORIGINS (comma-separated) unless they use the local loopback origin.

Coordinate-safe screenshot workflow

mobile_take_screenshot returns a short-lived snapshotId together with the image dimensions, input-frame metadata, and the exact server-side transform. When tapping a point read from that image, pass the same snapshotId and coordinateSpace: "screenshot" to mobile_click_on_screen_at_coordinates. The server rejects stale snapshots, changed display geometry, points outside the image, and coordinates that round outside the half-open device viewport. This avoids relying on a rounded ratio copied from prose.

When standard mobilecli does not report coordinate units or conventions on Android, the MCP reads dumpsys display, dumpsys window displays, and adb devices -l from the authorized ADB connection and cross-checks the display size, display ID, rotation, focused window, and transport. It promotes the input frame to px / edge only when the mobilecli dimensions match the current ADB display and a live transport_id is present. If ADB is unavailable, unauthorized, inconsistent, or unparseable, the frame remains unknown and coordinate taps/swipes are refused. Set MOBILEMCP_ADB_PATH to point to a specific adb executable when it is not on PATH or in the standard Android SDK location.

For structured UI output, use format: "json" with mobile_list_elements_on_screen; it returns a pure JSON array and preserves explicit false/unknown state values.

When a stable ref is not available, the click tool also accepts an exact target object such as { "label": "Continue", "type": "Button" }. The server re-reads the UI immediately before acting and refuses zero or multiple matches; it never guesses between duplicate controls.

mobile_type_keys can take the same ref or exact target to focus an input immediately before typing. This focus step is performed inside the same per-device operation lane, so a UI refresh between listing and typing is rejected instead of sending text to an unintended field.

Direct app launch and readiness

Apps can be opened without navigating the home screen. Pass a package/bundle identifier, or pass the label returned by the device backend in its current locale (設定 on a Japanese device and Settings on an English device). Ambiguous labels are rejected rather than guessed.

Prefer mobile_launch_and_ready when the next step will interact with the app. It resolves the app, launches it, verifies the foreground app, waits for optional readiness conditions, and returns a fresh frame-validated screenshot snapshot in one call.

The default launch mode is resume, which reuses the existing app task. Use the opt-in cold mode when reproducibility requires force-stopping the package first; it may discard unsaved transient state.

{
  "device": "d3befff5",
  "appName": "設定",
  "waitFor": {
    "foreground": true,
    "target": { "text": "設定" },
    "timeoutMs": 15000
  }
}

Use MOBILEMCP_APP_ALIASES for stable team vocabulary or private apps whose localized label is not exposed by a backend. The current device-locale label is resolved dynamically and is not replaced by the static aliases.

$env:MOBILEMCP_APP_ALIASES = '{"Browser":"com.android.chrome","Internal App":"com.example.internal"}'

For a shared configuration, set MOBILEMCP_APP_ALIASES_FILE to a JSON file path. Use mobile_open_app_link to bind a URL/deep link to an expected package/bundle identifier and verify that the target app becomes foreground. Custom URL schemes are rejected by default; set MOBILEMCP_ALLOW_UNSAFE_URLS=1 only when that explicit opt-in is intended.

Unknown state and cancellation behavior

If a device operation times out, is cancelled, exits abnormally, returns an invalid response, or explicitly reports an unknown result, the server never treats it as success: it quarantines that device lane. Normal follow-up operations are rejected while quarantined, preventing a later command from racing an uncertain operation. Stopping an active recording and releasing a remote device are explicit cleanup paths; they wait for in-flight work to quiesce. Only a confirmed remote release clears the old cache and quarantine state.

WebDriverAgent does not treat cancellation of the local HTTP request as proof that the device stopped. After cancellation it attempts DELETE /actions and records confirmation only when that request succeeds. Even then, the effect of the original action remains unknown, so the device stays quarantined. mobilecli 1.0.9 exposes no targeted remote-operation cancellation API, so ending the local process is reported as unconfirmed and the device is quarantined.

Clipboard values, device logs, crash bodies, stdout/stderr, response bodies, and stack traces are not copied into diagnostic logs. Tools that explicitly retrieve those values still return them to their caller; diagnostics retain only bounded error type and machine-readable failure code.

🛠️ How to Use

After adding the MCP server to your IDE/Client, you can instruct your AI assistant to use the available tools. For example, in Cursor's agent mode, you could use the prompts below to quickly validate, test and iterate on UI interactions, read information from screen, go through complex workflows. Be descriptive, straight to the point.

✨ Example Prompts

Workflows

You can specify detailed workflows in a single prompt, verify business logic, setup automations. You can go crazy:

Search for a video, comment, like and share it.

Find the video called " Beginner Recipe for Tonkotsu Ramen" by Way of
Ramen, click on like video, after liking write a comment " this was
delicious, will make it next Friday", share the video with the first
contact in your whatsapp list.

Download a successful step counter app, register, setup workout and 5-star the app

Find and Download a free "Pomodoro" app that has more than 1k stars.
Launch the app, register with my email, after registration find how to
start a pomodoro timer. When the pomodoro timer started, go back to the
app store and rate the app 5 stars, and leave a comment how useful the
app is.

Search in Substack, read, highlight, comment and save an article

Open Substack website, search for "Latest trends in AI automation 2025",
open the first article, highlight the section titled "Emerging AI trends",
and save article to reading list for later review, comment a random
paragraph summary.

Reserve a workout class, set timer

Open ClassPass, search for yoga classes tomorrow morning within 2 miles,
book the highest-rated class at 7 AM, confirm reservation,
setup a timer for the booked slot in the phone

Find a local event, setup calendar event

Open Eventbrite, search for AI startup meetup events happening this
weekend in "Austin, TX", select the most popular one, register and RSVP
yes to the event, setup a calendar event as a reminder.

Check weather forecast and send a Whatsapp/Telegram/Slack message

Open Weather app, check tomorrow's weather forecast for "Berlin", and
send the summary via Whatsapp/Telegram/Slack to contact "Lauren Trown",
thumbs up their response.
  • Schedule a meeting in Zoom and share invite via email

Open Zoom app, schedule a meeting titled "AI Hackathon" for tomorrow at
10AM with a duration of 1 hour, copy the invitation link, and send it via
Gmail to contacts "team@example.com".

Running & configuration

Environment variables

Variable

Description

Example

MOBILEMCP_AUTH

Require a Bearer token on the Streamable HTTP server (--listen) — every request must then send Authorization: Bearer <token>.

MOBILEMCP_AUTH=my-secret-token

MOBILEMCP_ALLOWED_ORIGINS

Comma-separated browser origins allowed to call the HTTP endpoint when an Origin header is present.

MOBILEMCP_ALLOWED_ORIGINS=https://agent.example.com

MOBILEMCP_OUTPUT_ROOT

Restrict screenshot, log, and recording artifacts to a dedicated root directory. Existing files and symbolic-link paths are never overwritten.

MOBILEMCP_OUTPUT_ROOT=/var/lib/mobile-mcp/artifacts

MOBILEMCP_ADB_PATH

Path to the adb executable used to enrich Android coordinate metadata. If unset, the standard Android SDK locations and PATH are searched.

MOBILEMCP_ADB_PATH=C:\\Android\\Sdk\\platform-tools\\adb.exe

MOBILEMCP_APP_ALIASES

JSON object mapping human-facing app aliases to a package/bundle identifier or an array of identifiers.

MOBILEMCP_APP_ALIASES={"Browser":"com.android.chrome"}

MOBILEMCP_APP_ALIASES_FILE

Path to a static JSON app-alias file. It supplements, rather than replaces, current device-locale labels.

MOBILEMCP_APP_ALIASES_FILE=C:\\mobile-mcp\\app-aliases.json

MOBILEMCP_DISABLE_TELEMETRY

Disable anonymous usage telemetry.

MOBILEMCP_DISABLE_TELEMETRY=1

MOBILEMCP_ALLOW_UNSAFE_URLS

Allow mobile_open_url to open non-standard URL schemes (blocked by default).

MOBILEMCP_ALLOW_UNSAFE_URLS=1

MOBILEMCP_LEGACY_ROBOT

Use the legacy platform-specific robots for Android devices and physical iOS devices. iOS simulators continue to use mobilecli.

MOBILEMCP_LEGACY_ROBOT=1

Simulators, Emulators, and Real Devices

When launched, Mobile MCP can connect to:

  • iOS Simulators on macOS/Linux

  • Android Emulators on Linux/Windows/macOS

  • iOS or Android real devices (requires proper platform tools and drivers)

Make sure you have your mobile platform SDKs (Xcode, Android SDK) installed and configured properly before running Mobile Next Mobile MCP.

Telemetry

Mobile MCP collects anonymous usage telemetry via PostHog and Scarf. To disable it, set the MOBILEMCP_DISABLE_TELEMETRY environment variable:

MOBILEMCP_DISABLE_TELEMETRY=1 npx @mobilenext/mobile-mcp@latest

For json configurations:

{
  "mcpServers": {
    "mobile-mcp": {
      "command": "npx",
      "args": ["-y", "@mobilenext/mobile-mcp@latest"],
      "env": {
        "MOBILEMCP_DISABLE_TELEMETRY": "1"
      }
    }
  }
}

Running in "headless" mode on Simulators/Emulators

When you do not have a real device connected to your machine, you can run Mobile MCP with an emulator or simulator in the background.

For example, on Android:

  1. Start an emulator (avdmanager / emulator command).

  2. Run Mobile MCP with the desired flags

On iOS, you'll need Xcode and to run the Simulator before using Mobile MCP with that simulator instance.

  • xcrun simctl list

  • xcrun simctl boot "iPhone 16"

🧩 Part of Mobile Next

Mobile MCP is one piece of a toolkit for driving real mobile devices:

  • mobilewright — "Playwright for mobile." When you're ready to turn agent-driven exploration into repeatable, deterministic tests for iOS and Android, graduate to mobilewright.

  • mobilecli — the universal device CLI that Mobile MCP is built on: control devices, simulators, and emulators from the command line or a JSON-RPC API.

  • Mobile Next Cloud — the same stack, rented: real iOS and Android devices on demand. Just prompt your agent: log in to mobile next cloud and then show me which remote devices are available to me to get started.

🚀 Roadmap

We're continuously improving Mobile MCP. See what we're building next in ROADMAP.md — priorities are shaped heavily by community feedback, so tell us what you'd like to see.

🤝 Contributing

Contributions are welcome — code, docs, bug reports, and ideas.

Please also review our Code of Conduct.

Thanks to all contributors ❤️

We appreciate everyone who has helped improve this project.

Privacy Policy

Mobile MCP runs locally and communicates only with the devices you connect. See the Mobile Next privacy policy at https://mobilenext.ai/privacy for data collection, usage, retention, and contact information.

Available Tools

39 tools
mobile_allocate_remote_deviceAllocate Remote DeviceA

Reserve a physical device from the remote cloud fleet for exclusive use, returning a device identifier usable with the other mobile_* tools. Unlike local devices, a remote device is a shared and billed resource borrowed for the session - only call this after the user has explicitly asked to use a remote/cloud device, never speculatively or as a fallback when a local device isn't found. Requires mobile_login_to_cloud_provider to have been called first; if this fails with an authentication error, call that tool then retry. Use mobile_list_remote_devices first to see which names and versions actually exist in the fleet before filtering by them. Release the device with mobile_release_remote_device once the whole task is finished - releasing wipes the device's state, so do not release and reallocate between steps of the same task just to be tidy.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoFilter by device name/model. Supports a trailing * for prefix match (e.g. "iPhone*"), or an exact name (e.g. "iPhone 16").
typeNoDevice type filter. Currently only "real" (physical devices) is supported by the fleet.
waitNoIf true, block until the device has finished allocating and is ready to use, up to timeoutSeconds. If false/omitted, this returns as soon as the reservation is made, but the device may not be immediately ready.
versionNoFilter by OS version. Supports comparison prefixes >=, >, <=, < (e.g. ">=18"), or an exact version (e.g. "18.6.2"). Multiple values are ANDed together.
platformYesThe platform to allocate a device for
timeoutSecondsNoSeconds to wait for allocation when wait is true. Defaults to 900 (15 minutes). Only relevant when wait is true.

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already indicate non-readonly and non-destructive, but the description adds substantial context: the device is a shared and billed resource, releasing wipes state, and allocation may block. It also warns against releasing between steps. This goes well beyond the structured annotations and is consistent with them.

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 dense but every sentence earns its place: core purpose, usage constraints, prerequisites, filtering advice, and release instructions. It is front-loaded with the essential action and maintains a logical flow without redundancy.

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

Completeness4/5

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

Given the tool's complexity (6 parameters, lifecycle requirements, no output schema), the description covers the critical context: reservation semantics, billing, authentication, filtering, and release. It doesn't specify the exact format of the returned device identifier, but that is implied and not essential for correct invocation. Overall it is nearly complete.

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

Parameters3/5

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

Schema coverage is 100%, so the baseline is 3. The description mentions that users should list available names/versions before filtering, which reinforces the name and version parameters, but it doesn't add new semantic detail beyond what the schema already documents (prefixes, comparison operators, wait semantics). No significant compensation needed.

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 opens with a specific verb ('Reserve'), a specific resource ('physical device from the remote cloud fleet'), and a clear outcome ('returning a device identifier'). It also explicitly contrasts with local devices and names the sibling tools that list and release remote devices, making differentiation immediate.

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

Usage Guidelines5/5

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

The description gives explicit when-to-use ('only call this after the user has explicitly asked to use a remote/cloud device'), when-not-to-use ('never speculatively or as a fallback'), and names alternatives like mobile_list_remote_devices and mobile_release_remote_device. It also states a prerequisite (mobile_login_to_cloud_provider) and error-recovery behavior.

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

mobile_batch_commandsBatch CommandsA
Destructive

Run multiple tools in sequence in a single call, e.g. click, type, click, type. Use this to fill forms or perform multi-step flows without round-trips. The device argument is applied to every step; all steps must target that same device.

ParametersJSON Schema
NameRequiredDescriptionDefault
stepsYesTools to run, in order. All steps are validated before the first device side effect.
deviceYesThe device identifier to use. Use mobile_list_available_devices to find which devices are available to you.
stopOnErrorNoStop at the first failing step. Defaults to true
listElementsAtEndNoRun mobile_list_elements_on_screen after the last step and include its result. Defaults to false

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already flag destructiveHint=true and readOnlyHint=false, so the mutation risk is covered. The description adds meaningful behavioral context beyond that: the device argument is applied to every step and all steps must target the same device. The schema further discloses that all steps are validated before the first device side effect, contributing useful execution semantics.

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 exactly two sentences with no filler. It front-loads the core action, then provides usage guidance, then the device constraint. Every sentence earns its place.

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

Completeness4/5

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

For a batch tool with 4 parameters and no output schema, the description combined with the schema covers the key operational details: execution order, device scoping, validation-before-effects, and stop/list options. The only minor gap is no explicit note about what the response looks like, but without an output schema this is acceptable.

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%, setting the baseline at 3. The description adds genuine param semantics not present in the schema by explaining that the device parameter is propagated to every step and that all steps must target that same device, which is a non-obvious constraint an agent needs to know.

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 opens with a specific verb+resource: 'Run multiple tools in sequence in a single call', followed by concrete examples (click, type, click, type). It clearly distinguishes this orchestration tool from the individual mobile_* action siblings by framing it as a batch/composition mechanism rather than a single action.

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

Usage Guidelines4/5

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

The description explicitly states when to use it: 'Use this to fill forms or perform multi-step flows without round-trips.' It gives clear positive use cases and implies the alternative (calling each tool individually via separate calls), but it does not explicitly state when not to use it, such as for a single isolated action.

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

mobile_click_on_screen_at_coordinatesClick ScreenA

Click on the screen at x,y coordinates, on an element by its ref (e.g. "@e5"), or on one exact unique target object with text/label/name/identifier/type. Prefer ref or a unique target when the element is listed. Ambiguous targets are rejected. Screenshot coordinates require the snapshotId returned by mobile_take_screenshot; the server validates that the display and geometry have not changed before tapping.

ParametersJSON Schema
NameRequiredDescriptionDefault
xNoThe x coordinate. Required unless ref is given. With coordinateSpace=screenshot this is a pixel position in the referenced screenshot.
yNoThe y coordinate. Required unless ref is given. With coordinateSpace=screenshot this is a pixel position in the referenced screenshot.
refNoElement ref from mobile_list_elements_on_screen, e.g. "@e5". Takes precedence over x,y
deviceYesThe device identifier to use. Use mobile_list_available_devices to find which devices are available to you.
targetNoExact element attributes to match. The match must be unique and actionable; fuzzy or ambiguous matches are rejected.
snapshotIdNoSnapshot ID from mobile_take_screenshot, required when coordinateSpace=screenshot.
coordinateSpaceNoCoordinate frame for x,y. Use screenshot only with the snapshotId returned by mobile_take_screenshot.device

TDQS

A4.2/5.0
Behavior4/5

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

With annotations present (readOnlyHint=false, destructiveHint=false, openWorldHint=true), the description adds value beyond them: the server-side validation that display/geometry haven't changed before tapping, and the rejection of ambiguous targets. It does not contradict the annotations — 'click' is consistent with a non-read-only, non-destructive action in an open world.

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?

Three sentences with zero filler: the first front-loads the core action and all targeting modes, the second gives the preference rule, and the third handles the screenshot edge case. For a 7-parameter tool with nested objects and coordinate spaces, this is tightly packed and well ordered — every sentence earns its place.

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

Completeness4/5

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

Given the tool's complexity (7 params, nested target object, three targeting modes, coordinate-space handling) and no output schema, the description covers the essential calling concerns: how targets are specified, precedence, ambiguity rejection, and the screenshot/snapshot coupling. The only gap is the unspecified return value, but for a tap action that is typically just success/failure and is a minor omission.

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 all 7 parameters including ref precedence and coordinateSpace semantics. The description adds marginal clarification (rejection of ambiguous target matches, screenshot geometry validation) that largely overlaps with schema text. Baseline 3 is appropriate since the schema carries the load and the description adds only minor complementary nuance.

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

Purpose5/5

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

States a specific verb ('Click') and enumerates three distinct targets: raw x,y coordinates, an element ref ('@e5'), or a unique target object. This clearly differentiates it from siblings like mobile_double_tap_on_screen, mobile_long_press_on_screen_at_coordinates, and mobile_press_button, whose verbs/scopes differ. An agent can tell exactly what this tool does and what it does not do.

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?

Gives an explicit internal selection rule: 'Prefer ref or a unique target when the element is listed', plus a hard constraint ('Ambiguous targets are rejected') and the snapshotId requirement for screenshot coordinates. This is strong context for choosing among the tool's own targeting modes, though it never references sibling tools by name or an explicit when-not-to-use condition against them.

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

mobile_clipboardClipboardA

Read or replace the device clipboard. Pass text to set the clipboard, omit it to read the current clipboard.

ParametersJSON Schema
NameRequiredDescriptionDefault
textNoText to place on the clipboard. Omit to read the clipboard instead.
deviceYesThe device identifier to use. Use mobile_list_available_devices to find which devices are available to you.

TDQS

A4/5.0
Behavior3/5

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

Annotations already indicate readOnlyHint=false and destructiveHint=false, so the tool's mutation potential is known. The description adds the dual-mode behavior (read vs. write) which is helpful, but it does not disclose any edge cases, such as handling of non-text clipboard content or device-specific limitations. Since annotations cover the safety profile, a score of 3 is appropriate.

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

Conciseness5/5

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

The description is a single sentence that is direct and front-loaded with the primary purpose. 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.

Completeness4/5

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

For a simple two-parameter tool with no output schema and annotations covering safety, the description is nearly complete. It explains the two usage modes. A minor gap is that it does not explicitly state the return value when reading (the clipboard text), though that is reasonably implied.

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% – both text and device parameters have descriptions. The description's note about omitting text to read repeats the schema description exactly, adding no new information. With full schema coverage, the baseline is 3, and the description does not elevate it.

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

Purpose5/5

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

The description clearly states the tool reads or replaces the device clipboard, with a specific verb and resource. It distinguishes the two modes based on the presence of the text parameter, making it unambiguous and distinct from sibling tools like mobile_get_foreground_app or mobile_list_elements_on_screen.

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

Usage Guidelines4/5

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

The description explicitly instructs when to set versus read the clipboard: 'Pass text to set the clipboard, omit it to read.' This gives clear context for both modes. While it does not mention alternative tools, there is no direct sibling for clipboard operations, so exclusion guidance is not needed.

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

mobile_double_tap_on_screenDouble Tap ScreenB

Double-tap on the screen at given x,y coordinates.

ParametersJSON Schema
NameRequiredDescriptionDefault
xYesThe x coordinate to double-tap, in pixels
yYesThe y coordinate to double-tap, in pixels
deviceYesThe device identifier to use. Use mobile_list_available_devices to find which devices are available to you.

TDQS

B3.4/5.0
Behavior2/5

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

The description only restates the action and adds no behavioral context beyond what annotations already indicate (openWorldHint=true suggests external side effects). It does not mention potential impacts like triggering app interactions, coordinate system considerations, or device requirements beyond the schema. No contradiction exists, but the description adds no value beyond the annotations.

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

Conciseness5/5

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

The description is a single concise sentence with no redundant information. It is front-loaded with the core action and location, and every word serves a purpose. This is exemplary conciseness.

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

Completeness4/5

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

For a simple gesture tool with full schema coverage and annotations that indicate non-read-only, non-destructive, open-world behavior, the description is adequate. The only missing context is usage guidance, which is a separate dimension. The tool's simplicity and complete schema make this description sufficiently complete for correct invocation.

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

Parameters3/5

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

The schema covers all three parameters (device, x, y) with descriptions, achieving 100% coverage. The tool description adds no additional parameter information, so the baseline 3 applies. The parameters are already well-documented in the schema.

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

Purpose5/5

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

The description 'Double-tap on the screen at given x,y coordinates' clearly states the action (double-tap) and the resource (screen at coordinates), and it distinguishes this from sibling tools like single click, long press, and swipe by specifying the gesture type. The verb and resource are specific and unambiguous.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives such as mobile_click_on_screen_at_coordinates or mobile_long_press_on_screen_at_coordinates. The agent is left to infer usage from the gesture name, with no explicit conditions or exclusions.

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

mobile_ensure_appEnsure AppA

Ensure an app is installed, optionally install it from a local package when it is missing, and optionally launch it with foreground/readiness verification. Use mobile_launch_and_ready when a screenshot snapshot is needed in the same call.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNoresume keeps the existing app task; cold force-stops the package before launching and is opt-inresume
deviceYesThe device identifier to use. Use mobile_list_available_devices to find which devices are available to you.
launchNoLaunch after ensuring installation. Defaults to true.
localeNoComma-separated BCP 47 locale tags to launch the app with.
appNameNoApp label in the device's current locale.
appPathNoLocal .apk, .ipa, .app, or .zip to install if the app is not present.
waitForNoReadiness conditions after launch. Foreground defaults to true.
packageNameNoExact Android package name or iOS bundle identifier.

TDQS

A4.2/5.0
Behavior4/5

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

The description clearly discloses the compound side effects: it can install an app when missing and launch it, which aligns with readOnlyHint=false and destructiveHint=false. It adds behavior beyond annotations by explaining the conditional install and verification steps, though it does not mention edge cases like overwrite semantics or the cold-mode force-stop, which are covered only in the schema.

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

Conciseness5/5

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

Two sentences with zero filler. The first sentence front-loads the core purpose and optional behaviors; the second provides a precise alternative. Every word earns its place.

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

Completeness4/5

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

For a tool with 8 parameters, a nested waitFor object, and no output schema, the description gives a clear high-level flow: ensure install, optionally install, optionally launch with verification, and points to the sibling for screenshot needs. It does not state what the tool returns or how failures are reported, but the schema covers parameter details, so the orientation is largely sufficient.

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 baseline is 3. The description adds only indirect mapping ('local package' implies appPath, 'foreground/readiness verification' implies waitFor) and does not clarify any parameter interactions, such as the requirement for appPath when the app is missing or the semantics of mode. It adds no meaning beyond what the schema already documents.

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

Purpose5/5

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

The description uses a specific verb-resource pair: 'Ensure an app is installed', with explicit optional behaviors (install from local package if missing, launch with foreground/readiness verification). It also distinguishes itself from the sibling mobile_launch_and_ready by naming the exact condition for choosing that alternative, so an agent can tell the tools apart.

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

Usage Guidelines4/5

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

The description gives clear context for when to use this tool: when an app needs to be ensured installed and then optionally launched. It explicitly routes to mobile_launch_and_ready when a screenshot snapshot is needed, but it does not mention other alternatives like mobile_install_app or mobile_launch_app or their exclusion conditions, leaving some inference to the agent.

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

mobile_get_app_capabilitiesGet App CapabilitiesA
Read-only

Inspect the app inventory record used for resolution and launch planning. Reports whether the backend knows the app as installed, enabled, and launchable; unknown fields remain explicit instead of being inferred.

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceYesThe device identifier to use. Use mobile_list_available_devices to find which devices are available to you.
appNameNoApp label in the device's current locale.
packageNameNoExact Android package name or iOS bundle identifier.

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, but the description adds meaningful behavioral detail: it reports only what the backend knows, keeping unknown fields explicit instead of inferring them. This goes beyond the structured annotations and helps an agent understand the tool's conservative reporting 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?

Two sentences with zero redundancy. The first sentence states the purpose, the second details the key behavior, and the 'unknown fields remain explicit' clause adds a valuable nuance without extra words. Every sentence earns its place.

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

Completeness4/5

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

With a clear read-only purpose, full schema coverage, and no output schema, the description covers the essential behavior an agent needs: what it reports and how it handles unknowns. The only minor gap is the lack of explicit sibling differentiation guidance, but the tool's scope is sufficiently clear for correct invocation.

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

Parameters3/5

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

Schema description coverage is 100%, so the parameters are fully documented in the input schema. The description does not add parameter-specific details beyond that, but it does not need to compensate for any gaps; 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.

Purpose5/5

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

The description clearly identifies the tool's purpose with a specific verb ('Inspect'), resource ('app inventory record'), and the exact statuses it reports (installed, enabled, launchable). The phrase 'used for resolution and launch planning' differentiates it from siblings like mobile_list_apps or mobile_launch_app, and the note about unknown fields remaining explicit further sharpens the scope.

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

Usage Guidelines3/5

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

The description implies a use case ('used for resolution and launch planning') but does not explicitly state when to prefer this tool over alternatives like mobile_resolve_app or mobile_get_foreground_app. It gives context but no exclusions or direct sibling comparisons, leaving the agent to infer the boundary.

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

mobile_get_crashGet Crash ReportA
Read-only

Get the full content of a crash report by its ID. Use mobile_list_crashes to find available crash IDs.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe crash report ID to retrieve
deviceYesThe device identifier to use. Use mobile_list_available_devices to find which devices are available to you.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, covering the safety profile. The description adds the 'full content' aspect and the retrieval-by-ID mechanism, providing context beyond what annotations offer. It doesn't describe the exact return format, but the annotations lower the bar for safety-related disclosure.

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

Conciseness5/5

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

Two concise sentences with no fluff. The primary purpose is front-loaded, and the usage hint is appended directly. Every sentence serves a distinct purpose—stating what the tool does and how to obtain inputs.

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

Completeness4/5

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

For a simple fetch-by-ID tool, the description is complete: it tells how to find IDs and the annotations cover read-only behavior. The lack of an output schema is not a major gap because the description's 'full content' gives a general expectation. It could benefit from a hint about the output structure, but it's adequate given the tool's simplicity.

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 both 'id' and 'device' are already documented in the schema. The description adds no extra detail about parameter formats or constraints; it only restates that the tool works by ID, which is already implicit. Thus, baseline 3 applies.

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

Purpose5/5

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

States a specific verb ('Get'), resource ('crash report'), and scope ('by its ID'). It also distinguishes itself from siblings by explicitly pointing to mobile_list_crashes for finding IDs, which clarifies its role in the workflow.

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

Usage Guidelines5/5

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

Explicitly tells the agent to use mobile_list_crashes to find available crash IDs, giving a clear alternative and prerequisite. This is direct when-to-use guidance that leaves no ambiguity about how to obtain valid IDs.

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

mobile_get_device_logsGet Device LogsA

Collect live device logs (logcat on Android, unified log on iOS) as one JSON object per line. Only logs emitted after the call starts are captured, so trigger the behavior you want to observe right before or during the call. Stops after limit entries or after 30 seconds of silence. Each line of a stack trace counts as one entry, so filter by process or tag to avoid filling the limit with noise. Start with a small limit (20-50) for a quick look. For large captures, pass saveTo to write logs to a file and only the entry count is returned.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoStop after this many log entries
deviceYesThe device identifier to use. Use mobile_list_available_devices to find which devices are available to you.
filterNoFilters, ANDed together. key=value includes, key!=value excludes. Keys: pid, process, tag, level, subsystem, category, message. Example: ["tag=ActivityManager", "level=Error", "process!=SpringBoard"]
saveToNoPath to write the logs to instead of returning them. Filename must end with .log, .txt, or .jsonl

TDQS

A4.4/5.0
Behavior4/5

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

With only readOnlyHint=false and openWorldHint=true in annotations, the description carries the behavioral disclosure burden. It explains the capture window, 30-second silence stop, stack-trace line counting, and saveTo return behavior. This adds significant context beyond the annotations, though it does not explicitly discuss side effects of the optional file write beyond saying it writes to a file.

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 with the core purpose and then layers important behavioral details and practical tips. Every sentence contributes useful information, with no fluff or redundancy.

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

Completeness4/5

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

There is no output schema, so the description properly explains the return format (JSON object per line) and the saveTo behavior (only entry count). It also covers stopping conditions and filtering guidance. Minor missing details like timeout return behavior or what happens on empty results, but overall the description is complete enough for an agent to call the tool correctly.

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 coverage is 100%, so each parameter is already described. The description adds meaningful usage semantics: filtering by process/tag to avoid noise, starting with a limit of 20-50, and the fact that saveTo changes the response to only an entry count. This clearly builds on the schema rather than repeating it.

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

Purpose5/5

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

The description identifies a specific action and resource: collect live device logs (logcat on Android, unified log on iOS) as JSON lines. This clearly differentiates it from siblings like mobile_list_crashes and mobile_get_crash, which deal with crash reports rather than live logs.

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?

Provides strong usage context: logs are only captured after the call starts, so the agent should trigger the behavior before/during the call. It also advises starting with a small limit and using saveTo for large captures. It stops short of explicitly naming alternatives for when not to use this tool, but the guidance is practical and actionable.

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

mobile_get_foreground_appGet Foreground AppA
Read-only

Get the app currently in the foreground on the device. Use this to verify which app or screen you are on before interacting with it.

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceYesThe device identifier to use. Use mobile_list_available_devices to find which devices are available to you.

TDQS

A4.1/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, so the read-only nature is covered. The description adds a usage hint (verifying before interaction) but does not disclose extra behavioral traits like return format or potential edge cases. This aligns with the get_calls example where annotations carry the safety profile.

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

Conciseness5/5

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

Two sentences, front-loaded with the core action, followed by a practical use case. No wasted words; every sentence earns its place.

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

Completeness5/5

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

For a simple getter with one parameter and no output schema, the description fully covers what the agent needs: what it does and when to use it. The schema covers the parameter, and annotations cover safety. Nothing essential is missing.

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 the device parameter fully documented (including how to discover devices). The description itself does not add parameter details, so it meets the baseline 3 for high schema coverage.

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?

Clear verb 'Get' and specific resource 'app currently in the foreground'. The description also states its purpose (verify which app/screen) and implicitly differentiates from siblings like mobile_list_apps which list all apps.

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

Usage Guidelines4/5

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

Provides a clear when-to-use: 'before interacting with it' to verify the current context. It does not explicitly list alternatives or exclusions, but the use case is specific and practical, making selection straightforward.

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

mobile_get_orientationGet OrientationB
Read-only

Get the current screen orientation of the device

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceYesThe device identifier to use. Use mobile_list_available_devices to find which devices are available to you.

TDQS

B3.4/5.0
Behavior3/5

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

The readOnlyHint and openWorldHint annotations already disclose that this is a read-only, closed-world operation. The description adds minimal context beyond that—only that it retrieves orientation. It does not describe the return format (e.g., portrait/landscape or degrees) or any edge cases. No contradiction exists between description and annotations.

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

Conciseness5/5

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

The description is a single, front-loaded sentence with zero filler. It states exactly what the tool does without unnecessary detail, 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.

Completeness4/5

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

For a simple read-only tool with one parameter and full schema coverage, the description is largely sufficient. The only gap is that it does not specify what the returned orientation values look like (e.g., 'portrait' vs 'landscape'), which an agent might need to interpret the result. Given the lack of an output schema, a brief note on return format would improve completeness, but the tool's simplicity keeps this from being a critical omission.

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 'device' parameter is fully documented in the schema, including a pointer to mobile_list_available_devices. The description adds no additional parameter information. Baseline of 3 is appropriate since the schema carries the semantic weight.

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 the resource ('current screen orientation of the device'). It is specific enough to distinguish from the sibling mobile_set_orientation, though it does not explicitly call out that distinction. It is not tautological and communicates the core purpose.

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

Usage Guidelines2/5

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

No guidance is provided about when to use this tool versus alternatives. It does not mention that it is read-only (though readOnlyHint annotation covers that), nor does it reference the related setter or other device info tools. The device parameter description points to a sibling for finding devices, but that is about parameter selection, not usage context.

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

mobile_get_screen_sizeGet Screen SizeA
Read-only

Get the screen size of the mobile device in pixels

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceYesThe device identifier to use. Use mobile_list_available_devices to find which devices are available to you.

TDQS

A4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, so the description need not restate safety. It adds the unit 'pixels', which is useful context, but does not disclose other traits like return format or potential side effects. With annotations covering safety, a 3 is appropriate for this simple read-only 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?

A single sentence with zero filler, front-loaded with the core purpose. Every word adds value and the unit specification is efficient.

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

Completeness4/5

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

For a one-parameter, read-only getter with full schema coverage and annotations, the description is nearly complete. It lacks explicit mention of the return structure (e.g., width and height), but 'screen size in pixels' reasonably implies dimensions, making it adequate for an agent to call 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%: the 'device' parameter is fully described in the schema, including a pointer to mobile_list_available_devices. The tool description adds no parameter-specific information beyond the schema, so baseline 3 is warranted.

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

Purpose5/5

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

The description clearly states the verb 'Get' and the resource 'screen size of the mobile device' with the unit 'pixels'. It is specific and distinguishable from all sibling tools, none of which address screen size.

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 is straightforward and implies when to use it (whenever the screen size is needed). While it does not explicitly name alternatives, no sibling tool competes for the same purpose, so the usage context is clear without exclusions.

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

mobile_install_appInstall AppC

Install an app on mobile device

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesThe path to the app file to install. For iOS simulators, provide a .zip file or a .app directory. For Android provide an .apk file. For iOS real devices provide an .ipa file
deviceYesThe device identifier to use. Use mobile_list_available_devices to find which devices are available to you.

TDQS

C2.9/5.0
Behavior2/5

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

Annotations (readOnlyHint=false, destructiveHint=false) already indicate this is a mutating operation. The description adds no behavioral details beyond that – it doesn't mention potential side effects (e.g., overwriting existing apps), required permissions, or time expectations. With no annotation coverage on specifics, the description carries the burden and fails to disclose anything extra.

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

Conciseness4/5

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

The description is a single concise sentence with no filler. It is front-loaded with the core action. However, it is perhaps too brief, missing useful context, but for conciseness alone it earns a 4.

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 output schema and no usage guidance, the description is incomplete. It doesn't explain the installation flow (e.g., need to allocate a device first), potential impacts, or how to verify success. The schema covers parameters, but broader context is missing, making this inadequate for an agent navigating 30+ siblings.

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

Parameters3/5

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

Schema coverage is 100% – both parameters have thorough descriptions (path explains platform-specific file types; device references mobile_list_available_devices). The tool description adds nothing beyond the schema, so the baseline of 3 is appropriate.

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

Purpose4/5

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

The description states a clear verb and resource: 'Install an app on mobile device'. It distinguishes from siblings like mobile_launch_app (launch) and mobile_uninstall_app (uninstall) by the action word, though it doesn't explicitly name them. The purpose is unambiguous.

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

Usage Guidelines2/5

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

No guidance is provided about when to use this tool versus alternatives. It doesn't mention prerequisites like device availability or that installation is a prerequisite for launching. The description offers no when/when-not context, leaving the agent to infer from the name alone.

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

mobile_launch_and_readyLaunch And ReadyA

Launch an app directly, wait until it is confirmed ready, and return a fresh frame-validated screenshot snapshot for immediate interaction. This is the preferred one-call app entry point for agents.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNoresume keeps the existing app task; cold force-stops the package before launching and is opt-inresume
scaleNoScreenshot scale factor. Ignored if maxSize is provided.
deviceYesThe device identifier to use. Use mobile_list_available_devices to find which devices are available to you.
localeNoComma-separated BCP 47 locale tags to launch the app with (e.g., fr-FR,en-GB)
appNameNoThe app label in the device's current locale, for example 設定 or Settings
maxSizeNoMaximum screenshot width/height in pixels, up to 16384.
waitForNoReadiness conditions. Foreground defaults to true; a target can require an exact visible UI field.
packageNameNoThe package name of the app to launch

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already provide readOnlyHint=false and destructiveHint=false, and the description adds useful behavioral detail: it waits for confirmation of readiness and returns a frame-validated screenshot. It does not mention the cold-mode force-stop behavior in the description itself, but this is disclosed in the schema and does not contradict the annotations.

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

Conciseness5/5

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

Two dense sentences with no filler. The primary behavior is front-loaded, and the second sentence adds strategic usage guidance without redundancy.

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

Completeness4/5

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

Given the complex 8-parameter schema and no output schema, the description explains the core contract well: launch, wait, screenshot. It could be more explicit about the return format of the screenshot or readiness semantics, but the description gives enough for an agent to select and invoke the tool 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%, so all eight parameters including the nested waitFor object are already documented. The tool description adds no parameter-specific meaning, so the baseline of 3 is appropriate.

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

Purpose5/5

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

The description names a specific action sequence: launch an app, wait until ready, and return a fresh frame-validated screenshot. It clearly differentiates itself from siblings like mobile_launch_app or mobile_wait_for_app by framing this as a single combined entry point.

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 phrase 'preferred one-call app entry point for agents' gives clear usage context, telling the agent to prefer this over multi-step alternatives. It does not, however, specify when NOT to use it or name explicit alternative tools for partial workflows.

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

mobile_launch_appLaunch AppA

Launch an app directly without navigating the home screen. Identify it by packageName or by the label in the device's current locale. By default, wait until the requested app is confirmed in the foreground; use mobile_launch_and_ready when a fresh validated screenshot is also needed.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNoresume keeps the existing app task; cold force-stops the package before launching and is opt-inresume
deviceYesThe device identifier to use. Use mobile_list_available_devices to find which devices are available to you.
localeNoComma-separated BCP 47 locale tags to launch the app with (e.g., fr-FR,en-GB)
appNameNoThe app label in the device's current locale, for example 設定 or Settings
waitForNoReadiness conditions. Foreground defaults to true; a target can require an exact visible UI field.
packageNameNoThe package name of the app to launch

TDQS

A4/5.0
Behavior3/5

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

Annotations already provide readOnlyHint=false, openWorldHint=true, and destructiveHint=false, so the safety profile is present. The description adds useful behavioral context: direct launch and waiting for foreground confirmation. However, it does not disclose side effects such as cold-mode force-stopping, which appears only in the schema, so the behavioral disclosure stops short of being rich.

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

Conciseness5/5

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

Two sentences with no filler: the first states the core action and identification strategy, the second states the default wait behavior and names the sibling alternative. Every sentence earns its place and the key information is front-loaded.

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

Completeness4/5

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

For a tool with six parameters and a nested waitFor object, the description covers the essential concepts: how to identify the app, the default readiness behavior, and when to switch to the screenshot-returning variant. It could additionally summarize cold-mode effects, but the schema already documents those, so the description is complete enough for correct tool selection.

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?

All six parameters have schema descriptions, so the tool description does not need to compensate for missing semantics. It reinforces the packageName-versus-label choice and the foreground wait default, but adds no meaning beyond what the schema already states.

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

Purpose5/5

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

The description states a specific verb and resource: launch an app directly without navigating the home screen. It also names the two identification routes (packageName or locale label), which clearly distinguishes the tool's purpose from home-screen automation and from the sibling launch variant.

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

Usage Guidelines4/5

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

The description gives explicit routing guidance: by default it waits for the foreground app, and mobile_launch_and_ready should be used when a fresh validated screenshot is also needed. It does not enumerate exclusions versus other launch-ish siblings like mobile_ensure_app or mobile_open_app_link, but the core alternative is clearly covered.

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

mobile_list_appsList AppsA
Read-only

List apps known by the device backend, including the current device-locale label when available. Use mobile_resolve_app to resolve a human-facing name without guessing.

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceYesThe device identifier to use. Use mobile_list_available_devices to find which devices are available to you.

TDQS

A4.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, covering the safety profile. The description adds a useful behavioral caveat ('including the current device-locale label when available') but does not disclose output shape or pagination behavior. This matches the baseline for a read-only list 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?

Two tight sentences with no filler. The primary action and key output trait are front-loaded, and the alternative tool pointer is placed after the core functionality without cluttering the definition.

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

Completeness5/5

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

For a simple one-parameter list tool, the description is complete: it states the action, the scope (device backend), a key output detail (locale label), and routes to the relevant sibling for human-readable names. No crucial calling information is missing.

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 device parameter is fully documented in the schema. The description does not add parameter-level meaning beyond what the schema provides, which is acceptable given the high coverage baseline.

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

Purpose5/5

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

The description states a specific verb and resource ('List apps known by the device backend') and adds a distinguishing detail about device-locale labels. It also explicitly distinguishes itself from mobile_resolve_app, so an agent can tell them apart without inspecting schemas.

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

Usage Guidelines5/5

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

The second sentence directly routes the agent to mobile_resolve_app when a human-facing name is needed, providing an explicit alternative and the condition that selects it. The schema additionally points to mobile_list_available_devices for finding device identifiers, so usage context is clear.

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

mobile_list_available_devicesList DevicesA
Read-only

List all available devices. This includes both physical mobile devices and mobile simulators and emulators. It returns both Android and iOS devices. These are local devices already connected to this machine, ready to use immediately at no cost - for devices from the shared remote cloud fleet, use mobile_list_remote_devices instead.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, so the read-only nature is covered. The description adds useful behavioral context beyond that: these devices are 'local devices already connected to this machine, ready to use immediately at no cost.' This informs the agent about the operational state and cost implications, which is not in the annotations.

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

Conciseness5/5

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

The description is concise yet comprehensive, front-loading the core purpose ('List all available devices') before elaborating on scope and the alternative. Every sentence adds value, and the structure is logical, 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.

Completeness5/5

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

Given the tool has no parameters, no output schema, and readOnlyHint annotation, the description provides all necessary context: what devices are listed, their local nature, cost, and the alternative for remote devices. Nothing an agent needs to correctly invoke or interpret the result is missing.

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

Parameters4/5

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

The tool has zero parameters, so the input schema is fully covered (100% coverage trivially). The description does not need to elaborate on parameters, and with no parameters to describe, a baseline of 4 is appropriate per the scoring rules.

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

Purpose5/5

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

The description clearly states the action ('List') and the resource ('all available devices'), and specifies the exact scope: physical devices, simulators/emulators, Android and iOS. It also explicitly contrasts with the remote fleet alternative, making the tool's purpose unambiguous and distinct from siblings.

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

Usage Guidelines5/5

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

The description provides explicit guidance on when to use this tool versus an alternative: 'for devices from the shared remote cloud fleet, use mobile_list_remote_devices instead.' This directly addresses selection between the two listing tools, which is the primary alternative.

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

mobile_list_crashesList Crash ReportsA
Read-only

List crash reports available on the device

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceYesThe device identifier to use. Use mobile_list_available_devices to find which devices are available to you.

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, covering the safety profile. The description does not contradict these and adds minimal behavioral context beyond the listing action. With annotations present, the bar is lower, but the description offers no extra behavioral detail such as what the returned list contains.

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

Conciseness5/5

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

A single concise sentence that front-loads the action and resource. No filler or redundant detail.

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

Completeness4/5

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

For a simple read-only list tool with one fully documented parameter and annotations covering safety, the description is largely sufficient. However, it omits any detail about the output format or how crash reports are identified, which could be useful but is not critical given the tool's simplicity.

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

Parameters3/5

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

Schema coverage is 100% and the single parameter 'device' is fully documented in the schema. The description references 'on the device' which aligns with the parameter but adds no additional semantics beyond what the schema provides. Baseline 3 is appropriate given full schema coverage.

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

Purpose5/5

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

The description clearly states the verb 'List' and the resource 'crash reports', and scopes it to the device. It distinguishes from siblings like mobile_get_crash (which implies fetching a single crash) by using 'List' and 'available on the device'.

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 this tool is for listing crash reports, but it does not explicitly mention when to use it over alternatives like mobile_get_crash. No exclusions or routing guidance is provided, leaving the agent to infer from the name and context.

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

mobile_list_elements_on_screenList Screen ElementsA
Read-only

List elements on screen with their ref, coordinates, and display text or accessibility label. Use the ref with mobile_click_on_screen_at_coordinates. Refs and coordinates stay valid as long as the screen does not change; re-list only after navigation or a layout change.

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceYesThe device identifier to use. Use mobile_list_available_devices to find which devices are available to you.
formatNoOutput format. "text" (default) is one compact line per element, "json" is a json array

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, covering the read-only and dynamic nature of the tool. The description adds valuable behavioral context: that refs and coordinates remain valid only until the screen changes, and that a re-list is required after navigation or layout changes. This goes beyond the annotations and helps the agent anticipate when results become stale.

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

Conciseness5/5

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

The description is two sentences, front-loaded with the primary purpose and then the usage caveat. There is no redundant information, and every sentence earns its place. The guidance on ref validity and re-listing is concise and directly actionable.

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

Completeness5/5

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

For a simple read-only list tool, the description covers everything an agent needs: what it returns (ref, coordinates, text/label), how to use the ref (with a specific sibling tool), and when to refresh (after screen changes). With annotations covering safety and no output schema required, nothing essential is missing.

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% – both device and format parameters are fully described in the input schema. The description adds no extra parameter semantics beyond what the schema provides. Since the schema does the heavy lifting, a baseline score of 3 is appropriate.

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

Purpose5/5

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

The description clearly states the tool lists screen elements with ref, coordinates, and display text or accessibility label. It explicitly names the sibling tool mobile_click_on_screen_at_coordinates for using the ref, which distinguishes it from other list tools in the sibling set (e.g., mobile_list_apps, mobile_list_available_devices). The verb 'list' plus resource 'screen elements' is specific and unambiguous.

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

Usage Guidelines4/5

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

The description gives explicit guidance on when to use the tool again: 're-list only after navigation or a layout change' and notes that refs/coordinates stay valid while the screen is unchanged. It also directs the agent to use the ref with a specific sibling tool, providing clear follow-up context. It doesn't explicitly state when not to use it, but there is no direct alternative among siblings, so this is adequate.

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

mobile_list_remote_devicesList Remote DevicesA
Read-only

List the catalog of device models (make, platform, OS version) available to reserve from the remote cloud device fleet. This is different from mobile_list_available_devices, which lists real devices and simulators/emulators already connected to this local machine and ready to use immediately at no cost. Remote devices live in a shared cloud fleet: they are not usable until reserved with mobile_allocate_remote_device, and reserving one may be a limited/billed resource. Requires mobile_login_to_cloud_provider to have been called first; if this fails with an authentication error, call that tool then retry.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already mark readOnlyHint=true and openWorldHint=true, so the description adds value by disclosing the authentication prerequisite and the billing/limited-resource nature of remote reservations. It doesn't contradict annotations and provides context beyond them, though it omits details about the exact return format or pagination, which are less critical here.

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?

Three well-structured sentences: the core action is front-loaded, the sibling distinction is clear, and the prerequisite is stated last. Every sentence earns its place with no redundancy.

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

Completeness5/5

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

For a tool with no parameters and no output schema, the description covers the essential context: what it lists, how it differs from the local alternative, and what must be done before calling it. Nothing an agent needs to invoke it correctly is missing.

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

Parameters4/5

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

The tool has zero parameters and the schema is effectively fully covered (vacuously). The description doesn't need to explain parameters since none exist, so the baseline of 4 for no-parameter tools applies.

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

Purpose5/5

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

The description states a specific verb and resource: 'List the catalog of device models (make, platform, OS version) available to reserve from the remote cloud device fleet.' It clearly differentiates from mobile_list_available_devices by explaining the local vs remote distinction, leaving no ambiguity about which tool to pick.

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

Usage Guidelines5/5

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

The description explicitly contrasts with mobile_list_available_devices, explaining when each is appropriate, and states the prerequisite to call mobile_login_to_cloud_provider first, including a retry strategy on authentication errors. This is direct, actionable guidance.

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

mobile_login_to_cloud_providerLogin to Cloud ProviderA

Start authenticating this machine with the remote device cloud provider. This is required once before mobile_list_remote_devices or mobile_allocate_remote_device will work; if either of those fails with an authentication error, call this tool and then retry. This starts a browser-based device-code login and returns quickly with a URL and a one-time code - it does NOT wait for the login to complete. Show the URL and code to the user verbatim and ask them to open the URL and enter the code in their own browser. The login keeps running in the background after this tool returns; once the user confirms they've completed it, retry the remote devices tool that originally failed. Only call this after the user has explicitly asked to connect to, log into, or use remote/cloud devices - never call it speculatively, since it interrupts the user to act in their browser.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.8/5.0
Behavior5/5

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

Discloses key behavioral traits beyond annotations: it is a browser-based device-code login, returns quickly with a URL and one-time code, does NOT wait for completion, runs in the background, and interrupts the user. This aligns with openWorldHint=true and readOnlyHint=false, adding crucial context about the asynchronous, user-interrupting nature.

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

Conciseness4/5

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

The description is thorough and well-structured, with the core purpose first and detailed usage instructions following. It is somewhat lengthy, but every sentence contributes essential context (async behavior, user interaction, retry logic) that an agent needs; no filler.

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

Completeness5/5

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

For a tool with no output schema and no params, the description fully explains the return behavior (URL and code), the required user action, the background execution, and the correct sequence with sibling tools. Nothing critical is missing for correct invocation and handling.

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?

With 0 parameters, the schema is fully self-describing (coverage 100%), so the description need not elaborate on params. It does not add parameter-specific details, but the baseline of 4 applies because no params exist; no additional compensation is needed.

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

Purpose5/5

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

The description clearly states the tool's purpose: 'Start authenticating this machine with the remote device cloud provider.' It identifies the specific verb (authenticating) and resource (cloud provider), and explicitly names the sibling tools that depend on it (mobile_list_remote_devices, mobile_allocate_remote_device), distinguishing it from them.

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

Usage Guidelines5/5

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

Provides explicit guidance: when to use (as a prerequisite for the two remote-device tools, if they fail with auth errors), when not to use (never speculatively, only after explicit user request), and names alternatives (the dependent tools). It also instructs on the retry flow after login completion.

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

mobile_long_press_on_screen_at_coordinatesLong Press ScreenA

Long press on the screen at given x,y coordinates. If long pressing on an element, use the mobile_list_elements_on_screen tool to find the coordinates.

ParametersJSON Schema
NameRequiredDescriptionDefault
xYesThe x coordinate to long press on the screen, in pixels
yYesThe y coordinate to long press on the screen, in pixels
deviceYesThe device identifier to use. Use mobile_list_available_devices to find which devices are available to you.
durationNoDuration of the long press in milliseconds. Defaults to 500ms.

TDQS

A4/5.0
Behavior3/5

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

Annotations already indicate this is a mutating (readOnlyHint=false) but non-destructive (destructiveHint=false) interaction. The description adds a small workflow hint but no additional behavioral details such as side effects, failure behavior, or coordinate origin; there is no annotation contradiction.

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

Conciseness5/5

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

Two sentences with no filler: the first states the action, and the second provides a targeted prerequisite/coordinate-finding tip. Key information is front-loaded and every sentence earns its place.

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

Completeness4/5

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

For a simple gesture tool with a fully documented schema, the essential workflow is present: find coordinates via list_elements, then long press. A minor gap is the lack of explicit coordinate origin, but this is unlikely to prevent correct invocation by a capable 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 x, y, device, and duration are already well documented. The description only restates the existing notion of x,y coordinates and adds no new parameter-level meaning, which matches the baseline for full schema coverage.

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?

Names the exact gesture ('long press') and target ('screen at given x,y coordinates'), which clearly distinguishes it from sibling input tools like click, double-tap, and swipe. It also references mobile_list_elements_on_screen for coordinate discovery, reinforcing what this tool is for.

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?

Provides clear context: if the target is an element, first use mobile_list_elements_on_screen to find its coordinates before long pressing. It does not explicitly say when to prefer long press over click/double-tap/swipe, but the common coordinate-finding workflow is well covered.

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

mobile_open_urlOpen URLA

Open a URL in browser on device

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesThe URL to open
deviceYesThe device identifier to use. Use mobile_list_available_devices to find which devices are available to you.

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already indicate this is a mutating, non-destructive, open-world operation. The description adds the useful detail that the URL is opened 'in browser,' but does not disclose side effects like switching the foreground app or requiring the device to be unlocked.

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 short sentence that is immediately understandable and front-loaded. There is no wasted text.

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

Completeness4/5

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

For a simple two-parameter tool with fully documented schema and no output schema, the description is nearly complete. A note about expected behavior after opening the URL, such as switching to the browser app, would make it fully complete.

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

Parameters3/5

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

Schema description coverage is 100%, with both 'url' and 'device' already documented. The description adds no parameter-specific detail beyond what the schema provides, so the baseline of 3 is appropriate.

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

Purpose5/5

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

The description states a specific action ('Open a URL'), the resource ('URL'), and the context ('in browser on device'). This clearly distinguishes it from siblings like mobile_launch_app, which launch apps rather than URLs.

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 use case is implied by the description: use this when a URL needs to be opened in a browser on a device. However, it does not explicitly state when to prefer this over alternatives such as mobile_launch_app or when not to use it.

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

mobile_press_buttonPress ButtonC

Press a button on device

ParametersJSON Schema
NameRequiredDescriptionDefault
buttonYesThe button to press. Supported buttons: BACK (android only), HOME, VOLUME_UP, VOLUME_DOWN, ENTER, DPAD_CENTER (android tv only), DPAD_UP (android tv only), DPAD_DOWN (android tv only), DPAD_LEFT (android tv only), DPAD_RIGHT (android tv only)
deviceYesThe device identifier to use. Use mobile_list_available_devices to find which devices are available to you.

TDQS

C2.4/5.0
Behavior2/5

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

The description adds no behavioral context beyond what the annotations already state: readOnlyHint=false and destructiveHint=false. It does not mention platform restrictions, possible side effects of pressing device buttons, or that the action is a one-way command; there is no contradiction, but no extra disclosure either.

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

Conciseness2/5

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

The sentence is short and front-loaded, but it does not earn its place because it merely restates the title with a generic 'on device.' It is under-specified rather than usefully concise.

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?

Although the schema fully documents the two parameters, the description is not complete enough for tool selection among many interaction siblings, and there is no mention of return behavior or platform/device suitability. For a state-changing action with no output schema, the agent is left to infer consequences.

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%, and the button parameter already documents the supported button names and platform caveats. The description adds no new parameter meaning, so the baseline of 3 is appropriate.

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

Purpose3/5

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

The description states a verb ('press') and a resource ('button on device'), so it is not completely tautological, but it is vague: it does not say this is for hardware/navigation buttons rather than screen taps, and it adds little beyond the tool title. It also does not distinguish itself from siblings like mobile_click_on_screen_at_coordinates or mobile_type_keys.

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 given about when to use this tool instead of screen-interaction siblings, nor when it would not be appropriate (e.g., pressing a visible UI element vs a hardware button). The device parameter points to mobile_list_available_devices, but that addresses device selection, not tool selection.

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

mobile_release_remote_deviceRelease Remote DeviceA
Destructive

Release a device previously reserved with mobile_allocate_remote_device back to the remote cloud fleet so it becomes available to others. Releasing is destructive to the device's state: apps installed, files pushed, and any other changes made during this session are lost, and a later mobile_allocate_remote_device call may take time and could return a different physical unit. Only release once the whole task is finished - if there is more work to do on the same device shortly, keep holding it rather than releasing and reallocating.

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceYesThe device identifier to release back to the remote fleet

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already include destructiveHint=true, but the description goes beyond by detailing exactly what is lost ('apps installed, files pushed, and any other changes') and the consequences of reallocation ('may take time and could return a different physical unit'). This enriches the annotation without contradicting it.

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 three sentences, front-loading the primary purpose and then delivering critical behavioral warnings. There is no fluff; every sentence contributes essential information for correct usage.

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

Completeness4/5

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

For a destructive remote-device action, the description covers the core aspects: what it does, the destructive side effects, and the optimal timing. It could mention error cases (e.g., releasing an unallocated device) but this is a minor omission given the annotations and schema already cover the basic contract. The lack of an output schema means return value explanation is unnecessary.

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

Parameters3/5

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

Schema coverage is 100% and the parameter 'device' is described as 'The device identifier to release back to the remote fleet'. The tool description adds the contextual requirement that the device must be previously reserved, but this is implicit rather than explicitly tied to the parameter. Baseline of 3 is appropriate since the schema already documents the parameter fully.

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

Purpose5/5

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

The description states a specific verb ('Release'), a precise resource ('a device previously reserved with mobile_allocate_remote_device'), and the outcome ('back to the remote cloud fleet so it becomes available to others'). It explicitly names the complementary sibling tool, making the tool's role unambiguous.

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

Usage Guidelines5/5

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

The description provides explicit when-to-use guidance: 'Only release once the whole task is finished' and advises against premature release ('keep holding it rather than releasing and reallocating'). It also notes that reallocation may be slow and yield a different physical unit, giving the agent a clear decision rule.

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

mobile_resolve_appResolve AppA
Read-only

Resolve an app by package name or by the app label currently exposed by the device locale. Matching is exact after Unicode/whitespace normalization; ambiguous labels are rejected instead of guessed.

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceYesThe device identifier to use. Use mobile_list_available_devices to find which devices are available to you.
appNameNoApp label in the device's current locale, for example 設定 or Settings.
packageNameNoExact Android package name or iOS bundle identifier.

TDQS

A3.9/5.0
Behavior4/5

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

The description adds meaningful behavioral context beyond the readOnly annotation: exact matching after Unicode/whitespace normalization and rejection of ambiguous labels. This is valuable because it informs the agent about edge cases and failure behavior, going beyond what annotations alone provide.

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

Conciseness5/5

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

Two sentences with no filler. The first clause front-loads the primary purpose, and the second adds precise behavioral detail. Every phrase earns its place, making it concise and well-structured.

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?

The description covers the input semantics and matching behavior well, but with no output schema and no mention of what the tool returns, an agent is left guessing whether the result is a package name, a label, or a structured object. It also does not state behavior on no match (only ambiguous labels), leaving a gap for correct post-processing.

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?

Although schema coverage is 100%, the description enriches parameter meaning by clarifying that packageName and appName are alternative lookup keys, and that matching follows strict normalization. It connects the parameters to the tool's core behavior, adding value beyond the schema's individual field descriptions.

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 a specific verb ('resolve') and resource ('an app'), plus the accepted identifier forms ('package name' or 'app label'). This distinguishes it from sibling tools like mobile_launch_app or mobile_get_foreground_app, which have different purposes.

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

Usage Guidelines2/5

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

The description does not explicitly state when to use this tool over alternatives, nor does it mention any sibling tools or exclusions. It implies usage through the 'resolve' verb and matching semantics, but leaves the agent to infer context without clear guidance.

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

mobile_restore_previous_appRestore Previous AppA

Return to the app that was foreground before the last verified app launch or app-link session. The destination is re-observed and old screenshots/refs are not restored.

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceYesThe device identifier to use. Use mobile_list_available_devices to find which devices are available to you.

TDQS

A4.2/5.0
Behavior4/5

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

Beyond the annotations (readOnly=false, destructive=false), it discloses that the destination is re-observed and old screenshots/refs are not restored, warning the agent not to rely on stale UI state. It does not mention failure modes, but the added behavior is material.

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

Conciseness5/5

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

Two short sentences, with the core behavior first and the behavioral caveat second. No filler or schema repetition.

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

Completeness4/5

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

For a single-request navigation tool, the description covers purpose, timing, and a key behavioral nuance, and the sibling list provides surrounding context. It could optionally address the no-previous-app case or return value, but these are not critical for invoking it.

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 only parameter (device) is already fully described in the schema, including how to discover valid values. The tool description adds no parameter-specific detail, so the schema-coverage baseline applies.

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

Purpose5/5

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

States a specific action ('Return to the app') and precisely scopes the target as the one foreground before the last verified app launch or app-link session. This clearly distinguishes it from sibling launch/app-resolution tools and is not a tautology.

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?

Conveys the usage context (after a verified launch or app-link session) and implies it is a backtracking operation. It does not explicitly name alternatives or exclusions, so it falls short of a 5.

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

mobile_save_screenshotSave ScreenshotB

Save a screenshot of the mobile device to a file

ParametersJSON Schema
NameRequiredDescriptionDefault
scaleNoScale factor (0.0-1.0). Ignored if maxSize is provided.
deviceYesThe device identifier to use. Use mobile_list_available_devices to find which devices are available to you.
saveToYesThe path to save the screenshot to. Filename must end with .png, .jpg, or .jpeg
maxSizeNoMaximum width/height in pixels, keeping aspect ratio (up to 16384). Omit for full size.

TDQS

B3.4/5.0
Behavior3/5

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

Annotations declare readOnlyHint=false, destructiveHint=false, and openWorldHint=false, so the description is not contradicting them. The description adds minimal behavioral context: it saves to a file, and the schema adds constraints like file extension and scale/maxSize behavior. But the description itself does not disclose side effects, whether it overwrites existing files, or whether it requires a visible screen. With annotations present, the bar is lower, but the description adds little beyond the schema.

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

Conciseness4/5

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

The description is a single, clear sentence with no wasted words. It is front-loaded with the action and object. It could add a bit more context, but for its size it is efficient.

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

Completeness3/5

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

For a simple save-to-file tool with 100% schema coverage and no output schema, the description is mostly adequate. However, it does not mention whether the file will be overwritten, whether the screenshot is taken fresh or from the current screen state, or how it relates to mobile_take_screenshot. These are minor gaps given the tool's simplicity.

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 all four parameters. The description itself does not add parameter-level meaning beyond the schema. Baseline 3 is appropriate because the schema carries 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 states a clear verb and resource: 'Save a screenshot of the mobile device to a file.' It is distinct from the sibling mobile_take_screenshot, which likely captures/returns the screenshot, while this tool persists it to a file. However, it does not explicitly differentiate itself from that sibling, so it loses a point.

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: call it when you need to save a screenshot to a file. The schema's device parameter references mobile_list_available_devices, which gives some context. However, there is no explicit guidance on when to use this versus mobile_take_screenshot, nor any exclusions or alternatives.

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

mobile_set_locationSet LocationA

Override the GPS location reported by the device, or clear the override to restore the real location. Omit latitude and longitude to clear.

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceYesThe device identifier to use. Use mobile_list_available_devices to find which devices are available to you.
latitudeNoLatitude in decimal degrees, e.g. 37.7749. Omit together with longitude to clear the override.
longitudeNoLongitude in decimal degrees, e.g. -122.4194. Omit together with latitude to clear the override.

TDQS

A4.2/5.0
Behavior4/5

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

The description discloses that the tool overrides the real location and that clearing restores it, implying reversibility. Annotations already indicate it is not read-only and not destructive, and the description aligns with these. It does not go into side effects like whether the override persists, but the core behavior is transparent.

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

Conciseness5/5

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

The description is a single, front-loaded sentence that covers both actions (override and clear) with zero wasted words. It is immediately actionable.

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

Completeness4/5

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

For a simple set/clear tool with no output schema, the description covers the main behaviors. It does not mention prerequisites like device allocation, but the device parameter description in the schema already points to listing available devices. Minor gaps like session scope are not critical for basic 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%, with each parameter already documented (e.g., latitude says 'Omit together with longitude to clear'). The description adds the high-level pattern of setting vs clearing but does not add per-parameter semantics beyond the schema. Baseline 3 is appropriate.

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

Purpose5/5

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

The description states a specific action ('Override the GPS location') and the resource (device), and clearly distinguishes between setting and clearing. It is not a tautology and is unique among siblings since no other tool deals with location.

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

Usage Guidelines4/5

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

The description provides clear instructions on how to set (provide lat/long) and clear (omit both). It implies use cases like simulating location, though it does not explicitly mention alternatives or exclusions. Since there is no sibling location tool, this is sufficient.

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

mobile_set_orientationSet OrientationA

Change the screen orientation of the device

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceYesThe device identifier to use. Use mobile_list_available_devices to find which devices are available to you.
orientationYesThe desired orientation

TDQS

A3.7/5.0
Behavior3/5

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

Annotations declare readOnlyHint=false and destructiveHint=false, indicating a non-destructive mutation. The description says 'Change', which aligns with these annotations and adds no contradiction. However, it does not provide additional behavioral context such as side effects, timing, or device requirements beyond what the annotations imply. With annotations covering the safety profile, the description adds minimal extra value.

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

Conciseness4/5

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

The description is a single, succinct sentence that is easy to parse. It is not overly verbose, though it borders on being a slight restatement of the title. Still, it is appropriately sized for a simple tool with no wasted words.

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

Completeness4/5

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

For a simple tool with only two well-documented parameters and no output schema, the description is adequate. The schema covers parameter semantics and the annotations cover safety. The description provides enough to understand the tool's purpose. One could argue it should mention that the change affects a physical device or simulator, but that is implied by the tool family and the device parameter guidance. Overall, the definition is sufficiently complete for an agent to call 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%, meaning both parameters (device and orientation) are fully documented in the schema, including the orientation enum and the device instruction to list available devices. The description itself adds no parameter-specific information. Given the high schema coverage, a baseline of 3 is appropriate.

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

Purpose5/5

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

The description states a clear verb ('Change') and resource ('screen orientation'), and it naturally distinguishes itself from the sibling mobile_get_orientation (which reads orientation). It is specific and immediately conveys the tool's core action.

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

Usage Guidelines3/5

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

The description provides no guidance on when to use this tool versus alternatives. It does not mention that it should be used when an orientation change is needed, nor does it note that mobile_get_orientation is the read counterpart. The device parameter's schema description points to mobile_list_available_devices, but that is in the schema, not the description. Thus, usage context is only implied.

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

mobile_start_screen_recordingStart Screen RecordingA

Start recording the screen of a mobile device. The recording runs in the background until stopped with mobile_stop_screen_recording. Returns the path where the recording will be saved.

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceYesThe device identifier to use. Use mobile_list_available_devices to find which devices are available to you.
outputNoThe file path to save the recording to. Filename must end with .mp4. If not provided, a temporary path will be used.
timeLimitNoMaximum recording duration in seconds, from 1 to 3600. The recording will stop automatically after this time.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations only indicate readOnlyHint=false and destructiveHint=false, so the description carries the main behavioral burden. It usefully discloses that recording continues in the background, that it requires a stop call, and that it returns the save path. This goes beyond annotations, though it does not address permissions or concurrent recordings.

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

Conciseness5/5

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

Two concise sentences with no filler. The core action is front-loaded, followed by the key behavioral detail about stopping and the return value. Every sentence earns its place.

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

Completeness4/5

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

For a relatively simple action with no nested objects and no output schema, the description covers the essential behavior: what it does, how it ends, and what it returns. It does not mention prerequisites or failure modes, but those are not critical for invoking this tool 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%, so each parameter (device, output, timeLimit) is already documented in the schema. The description adds no additional parameter meaning beyond confirming a return path, so the baseline 3 is appropriate.

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

Purpose5/5

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

States a specific action ('Start recording the screen of a mobile device') with a clear resource and lifecycle. It also distinguishes itself from the sibling mobile_stop_screen_recording by naming it directly, so an agent can disambiguate at a glance.

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 establishes the operative context: the recording runs in the background until explicitly stopped with mobile_stop_screen_recording. It does not explicitly enumerate when-not-to-use alternatives, but the pairing with the stop tool gives clear usage guidance.

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

mobile_stop_screen_recordingStop Screen RecordingA

Stop an active screen recording on a mobile device. Returns the file path, size, and approximate duration of the recording.

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceYesThe device identifier to use. Use mobile_list_available_devices to find which devices are available to you.

TDQS

A4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false and destructiveHint=false, indicating this is a mutating but non-destructive operation. The description adds the return info but does not disclose potential error cases (e.g., if no recording is active) or side effects beyond stopping. It provides some value over annotations but not rich behavioral context.

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

Conciseness5/5

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

The description is two sentences with zero filler. It front-loads the action and immediately states the return values. Every word earns its place.

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

Completeness4/5

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

For a simple single-parameter tool with no output schema, the description is largely complete: it covers the action, the prerequisite (active recording implied), and the return payload. It omits explicit error handling but that is a minor gap given the low complexity.

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 device parameter is fully documented in the schema. The description does not add any additional meaning about the parameter beyond what the schema already provides, matching the baseline for high coverage.

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

Purpose5/5

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

The description clearly states the action (stop), the resource (screen recording on a mobile device), and even mentions the return values (file path, size, duration). It is specific and easily distinguishable from sibling tools like mobile_start_screen_recording.

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 phrase 'active screen recording' implies it should be used only when a recording is in progress, and the sibling context makes the alternative (start_screen_recording) obvious. However, it does not explicitly state when not to use it or list alternatives, so it falls slightly short of a 5.

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

mobile_swipe_on_screenSwipe ScreenC

Swipe on the screen

ParametersJSON Schema
NameRequiredDescriptionDefault
xNoThe x coordinate to start the swipe from, in pixels. If not provided, uses center of screen
yNoThe y coordinate to start the swipe from, in pixels. If not provided, uses center of screen
deviceYesThe device identifier to use. Use mobile_list_available_devices to find which devices are available to you.
distanceNoThe distance to swipe in pixels. Defaults to 60% of the available screen axis
overflowNoWhen a coordinate swipe would leave the screen, reject it by default; use shorten only when ending at the edge is intentional.reject
directionYesThe direction to swipe

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already indicate readOnlyHint=false and destructiveHint=false, but the description adds no behavioral context beyond the basic action. It does not mention whether the swipe triggers scrolling, navigation, or any other side effect, nor does it clarify the openWorld hint. The description provides no value beyond what annotations already convey.

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

Conciseness3/5

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

The description is extremely short and free of unnecessary words, but it borders on under-specification. It lacks any contextual or behavioral guidance that would help an agent use the tool correctly, so the conciseness is not paired with sufficient content.

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 six parameters and no output schema, the description is too sparse to provide complete context. The schema covers parameter semantics, but the description does not explain the tool's role in a mobile interaction flow, what happens after a swipe, or when it should be preferred over other gestures. A fuller description would be more helpful.

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

Parameters3/5

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

The schema has 100% description coverage for all six parameters, so the description does not need to explain parameters. It also does not add any semantic detail beyond the schema. Baseline 3 is appropriate because the schema fully documents each parameter.

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

Purpose4/5

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

The description states a specific verb and resource: a swipe on the screen. This clearly distinguishes it from sibling tools like click, double-tap, and long-press. However, it is minimal and essentially restates the title without adding any nuance about the gesture's effect.

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 the many sibling gesture tools (e.g., click, double-tap, long-press). The description gives no context about suitable scenarios, prerequisites, or alternatives, leaving the agent to infer usage from the name and schema.

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

mobile_take_screenshotTake ScreenshotA
Read-only

Take a screenshot of the mobile device and create a short-lived, frame-validated snapshot. Use the returned snapshotId with mobile_click_on_screen_at_coordinates and coordinateSpace=screenshot when tapping a point read from this image. Do not cache this result beyond the snapshot lifetime.

ParametersJSON Schema
NameRequiredDescriptionDefault
scaleNoScale factor (0.0-1.0). Ignored if maxSize is provided.
deviceYesThe device identifier to use. Use mobile_list_available_devices to find which devices are available to you.
maxSizeNoMaximum width/height in pixels, keeping aspect ratio (up to 16384). Defaults to 1024.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true. The description adds valuable behavioral details: the snapshot is short-lived and frame-validated, and it instructs not to cache beyond the snapshot lifetime. This goes beyond the safety profile provided by annotations and gives crucial operational context.

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

Conciseness5/5

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

The description is three sentences with no redundancy. The purpose is front-loaded, followed by usage guidance and a caching warning. Each sentence contributes essential information.

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

Completeness4/5

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

The description compensates for the lack of an output schema by mentioning the returned snapshotId and its usage. It covers the tools purpose, output lifetime, and downstream interaction. Minor omissions (e.g., failure modes, precise meaning of 'frame-validated') are not critical for an agent to invoke 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?

The schema already covers all three parameters (device, scale, maxSize) with full descriptions at 100% coverage. The tool description does not add any parameter-specific meaning beyond the schema, so the baseline score of 3 applies.

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

Purpose5/5

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

The description states a specific verb ('Take a screenshot') and resource ('mobile device'), and clarifies the output as a 'short-lived, frame-validated snapshot'. It distinguishes itself from similar tools like mobile_save_screenshot by emphasizing the temporary nature, so an agent can tell them apart without opening schemas.

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

Usage Guidelines4/5

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

The description provides clear guidance on how to use the returned snapshotId with mobile_click_on_screen_at_coordinates and coordinateSpace=screenshot, and explicitly warns not to cache beyond the snapshot lifetime. It does not, however, explicitly contrast with mobile_save_screenshot for persistent screenshots, leaving a small gap in 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.

mobile_terminate_appTerminate AppA

Stop and terminate an app on mobile device. Identify it by package name or by its current device-locale label.

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceYesThe device identifier to use. Use mobile_list_available_devices to find which devices are available to you.
appNameNoThe app label in the device's current locale
packageNameNoThe package name of the app to terminate

TDQS

A3.7/5.0
Behavior2/5

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

Annotations already indicate readOnlyHint=false and destructiveHint=false, which tells the agent it mutates state without destroying data. The description adds no further behavioral context, such as force-stop semantics, loss of unsaved app state, or whether the app can be relaunched afterward. It essentially restates the action already implied by the annotations.

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

Conciseness5/5

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

Two sentences with no filler. The action is front-loaded, and the identification methods are concise. Every word earns its place.

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?

The tool is simple, but the description does not address whether at least one of appName or packageName is required, even though the schema lists only device as required. This is a notable gap for correct invocation. It also lacks any mention of behavior when the app is not running or when both identifiers conflict. Adequate but with clear gaps.

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 baseline is 3. The description adds value by clarifying that appName and packageName are alternative identification methods ('Identify it by package name or by its current device-locale label'), which is not explicit in the schema. This helps agents understand they can use one or the other (or both), improving parameter understanding beyond schema text.

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

Purpose5/5

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

The description states a specific action ('Stop and terminate an app') and a clear resource ('on mobile device'), and it distinguishes from siblings by noting the two identification methods (package name or locale label). This unambiguously differentiates it from launch, uninstall, or restore tools.

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 when to use the tool: when you need to stop an app. However, it does not explicitly mention alternatives or exclusions, such as 'use uninstall instead of terminate if you want to remove the app' or when to use mobile_restore_previous_app. It provides clear context but no exclusionary guidance.

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

mobile_type_keysType TextA

Type text into the focused element. Optionally provide a ref or exact target to focus immediately before typing; ambiguous or stale targets are rejected.

ParametersJSON Schema
NameRequiredDescriptionDefault
refNoCurrent UI element ref to focus before typing, e.g. @e5
textYesThe text to type
deviceYesThe device identifier to use. Use mobile_list_available_devices to find which devices are available to you.
submitYesWhether to submit the text. If true, the text will be submitted as if the user pressed the enter key.
targetNoExact UI attributes for the unique actionable input to focus before typing

TDQS

A3.9/5.0
Behavior3/5

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

Annotations indicate readOnlyHint=false (write operation), openWorldHint=true, and destructiveHint=false. The description adds that ambiguous or stale targets are rejected, which is useful behavioral context. However, it doesn't disclose side effects like what happens to existing text or whether it overwrites, or the exact behavior of the 'submit' flag beyond the schema. Given annotations cover the write nature, the description adds moderate value.

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

Conciseness4/5

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

The description is concise (two sentences) and front-loads the primary purpose. The second sentence adds the optional focusing behavior and rejection criteria, which is important for correct usage. No excessive detail or fluff; every sentence earns its place.

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

Completeness4/5

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

Given the tool's moderate complexity (5 parameters, nested target object, no output schema), the description covers the core behavior and the key constraint about target rejection. However, it could benefit from explaining the difference between 'ref' and 'target' and when to use each, especially since both are optional. With no output schema, return value description is not required, but usage nuances are missing, making it slightly incomplete but close to full.

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%, meaning all parameters have descriptions in the schema. The description adds the context that targets must be exact and that ambiguous/stale ones are rejected, which enhances understanding of the 'target' and 'ref' parameters. However, it doesn't provide deeper semantics like formatting requirements for 'text' or the relationship between ref and target, so it adds some value beyond schema.

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

Purpose5/5

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

The description clearly states the specific action ('Type text into the focused element') and the resource (the focused element). It also mentions the optional ability to provide a ref or target to focus first, which distinguishes it from other input-related tools like clicking or pressing buttons. This clearly differentiates it from siblings like mobile_click_on_screen_at_coordinates and mobile_press_button.

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

Usage Guidelines4/5

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

The description gives clear context on when to use the tool (type text into focused element) and optionally mentions providing a ref or target to focus. However, it doesn't explicitly state when NOT to use it or mention alternatives, such as using mobile_click_on_screen_at_coordinates for tapping or mobile_press_button for button presses. The guidance is clear but lacks explicit exclusions.

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

mobile_uninstall_appUninstall AppA
Destructive

Uninstall an app from mobile device

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceYesThe device identifier to use. Use mobile_list_available_devices to find which devices are available to you.
bundle_idYesBundle identifier (iOS) or package name (Android) of the app to be uninstalled

TDQS

A3.5/5.0
Behavior2/5

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

Annotations already declare destructiveHint=true, so the destructive nature is covered. The description adds nothing beyond that – no mention of irreversibility, prerequisites (e.g., app must be installed), or potential failure modes. With no additional behavioral context, the description does not go beyond what annotations already convey.

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

Conciseness5/5

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

The description is a single concise sentence with no redundant wording. It is front-loaded with the action and resource, making it immediately clear what the tool does.

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

Completeness3/5

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

For a simple two-parameter destructive operation, the description is minimally adequate. However, it does not mention what happens after uninstalling (e.g., success/failure response) or any caveats like whether the operation is reversible. Given the annotations cover destructiveness, the missing details are minor but still leave room for improvement.

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

Parameters3/5

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

The input schema provides complete descriptions for both parameters (device and bundle_id), including how to find the device. Since schema_description_coverage is 100%, the description adds no extra parameter information. The baseline of 3 applies because 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 'Uninstall an app from mobile device' clearly identifies the specific action (uninstall) and resource (app on mobile device). It distinguishes from sibling tools like mobile_install_app and mobile_terminate_app, so an agent can easily tell what this does.

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 usage context is implied – you uninstall when you need to remove an app. However, there is no explicit guidance on when not to use it or alternatives to consider, such as mobile_terminate_app for stopping a running app. The schema's parameter hint about using mobile_list_available_devices is helpful but not usage guidance for this tool itself.

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

mobile_wait_for_appWait For AppA
Read-only

Wait until an app is in the foreground and/or an exact visible UI target appears. This is read-only and does not launch, terminate, or otherwise change the app.

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceYesThe device identifier to use. Use mobile_list_available_devices to find which devices are available to you.
appNameNoApp label in the device's current locale.
waitForNoReadiness conditions. Foreground defaults to true.
packageNameNoExact Android package name or iOS bundle identifier.

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, and the description reinforces this by stating it does not launch, terminate, or change the app. It also adds the specific behavioral detail that it waits for foreground and/or visible UI target, which aligns with the read-only nature. The description does not contradict annotations and provides additional context about non-mutating 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 two sentences with no filler. The core purpose is front-loaded, and the read-only clarification follows immediately. Every word earns its place, and the structure is clean.

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

Completeness3/5

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

Given the tool's complexity (nested waitFor object, four parameters, no output schema), the description provides only the high-level purpose. It does not explain how to specify conditions, what happens on timeout, or how it differs from similar tools. The schema covers parameter details, but the description lacks usage guidance for complex scenarios. It is minimally complete but leaves gaps.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3. The description does not add any parameter-specific guidance beyond what the schema already provides. It does not explain the waitFor structure or how to combine conditions, leaving the schema to carry the full burden. This is adequate but not enhanced.

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

Purpose5/5

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

The description states a specific verb and resource: 'Wait until an app is in the foreground and/or an exact visible UI target appears.' This clearly distinguishes the tool's purpose from siblings like launching or listing apps. The read-only qualifier further differentiates it from mutation tools.

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 when to use it (when you need to wait for a UI condition) but does not explicitly mention alternatives or when not to use it. Sibling tools like mobile_launch_and_ready likely serve a similar waiting purpose, but the description does not contrast with them. No exclusion criteria are given.

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

Tool Schema Changelog

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

  1. 39 tool updatesv0.0.1
    • First observedmobile_allocate_remote_device
    • First observedmobile_batch_commands
    • First observedmobile_click_on_screen_at_coordinates
    • First observedmobile_clipboard
    • First observedmobile_double_tap_on_screen
    • First observedmobile_ensure_app
    • First observedmobile_get_app_capabilities
    • First observedmobile_get_crash
    • First observedmobile_get_device_logs
    • First observedmobile_get_foreground_app
    • First observedmobile_get_orientation
    • First observedmobile_get_screen_size
    • First observedmobile_install_app
    • First observedmobile_launch_and_ready
    • First observedmobile_launch_app
    • First observedmobile_list_apps
    • First observedmobile_list_available_devices
    • First observedmobile_list_crashes
    • First observedmobile_list_elements_on_screen
    • First observedmobile_list_remote_devices
    • First observedmobile_login_to_cloud_provider
    • First observedmobile_long_press_on_screen_at_coordinates
    • First observedmobile_open_app_link
    • First observedmobile_open_url
    • First observedmobile_press_button
    • First observedmobile_release_remote_device
    • First observedmobile_resolve_app
    • First observedmobile_restore_previous_app
    • First observedmobile_save_screenshot
    • First observedmobile_set_location
    • First observedmobile_set_orientation
    • First observedmobile_start_screen_recording
    • First observedmobile_stop_screen_recording
    • First observedmobile_swipe_on_screen
    • First observedmobile_take_screenshot
    • First observedmobile_terminate_app
    • First observedmobile_type_keys
    • First observedmobile_uninstall_app
    • First observedmobile_wait_for_app

TDQS

A3.6/5.0

Scored across 39 tools

Disambiguation4/5

Most tools have clearly distinct purposes, but a few near-overlaps exist among app-launching tools (mobile_launch_app, mobile_launch_and_ready, mobile_ensure_app) and between mobile_take_screenshot and mobile_save_screenshot. Descriptions are detailed enough to disambiguate with care, so agents should rarely misselect.

Naming Consistency5/5

All tools follow the consistent mobile_verb_noun pattern, with clear verbs like list, get, set, launch, click, swipe, and take. Even compound actions like mobile_launch_and_ready and prepositions like on_screen are used consistently across the set, making the naming predictable and readable.

Tool Count2/5

At 39 tools, this is well above the 25-tool threshold for 'too many' even for a broad mobile automation domain. While each tool has a specific purpose, the sheer number risks overwhelming an agent and suggests some tools could be consolidated (e.g., combining screenshot save/take or merging device listing variants).

Completeness5/5

The tool set covers the full mobile lifecycle: device discovery/reservation, app management (install, launch, terminate, ensure), UI interaction (clicks, gestures, typing), screenshots, orientation, location, clipboard, logs, crash reports, screen recording, and a batch execution tool. There are no obvious dead ends or missing critical operations for the stated purpose.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    A
    quality
    D
    maintenance
    Enables AI agents to interact with Android devices through UI manipulation, screen capture, touch gestures, text input, and app management via ADB. Provides comprehensive mobile automation capabilities including element detection, navigation, and application control for Android device testing and interaction.
    9
    4
    -
  • A
    license
    B
    quality
    B
    maintenance
    Enables AI agents to control Android devices and emulators through direct UI interaction, allowing app navigation, automated testing, and real-world task execution via ADB without computer vision or scripts.
    18
    2
    MIT