Skip to main content
Glama
mobile-next

Mobile Next MCP Server

Official
by mobile-next

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: Mobile Next 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 all installed apps on the device

  • mobile_get_foreground_app - Get the app currently in the foreground

  • mobile_launch_app - Launch an app using its package name

  • 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 specific x,y coordinates

  • 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

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

🏗️ Mobile MCP Architecture

📚 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); remote mode is stateless (no session affinity required), which works well with Smithery and other horizontal hosts.

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. When unset, the server accepts unauthenticated connections and logs a warning.

🛠️ 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_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

32 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 unless a step provides its own.

ParametersJSON Schema
NameRequiredDescriptionDefault
stepsYesTools to run, in order
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.3/5.0
Behavior4/5

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

Annotations already flag destructiveHint=true and openWorldHint=true, so the risk profile is known. The description adds a non-obvious behavioral rule: the device argument applies to every step unless a step overrides it. This is useful beyond the schema, which only describes device as a string. It does not contradict annotations, and the added context is meaningful for safe execution.

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, zero filler. The purpose is front-loaded, the example makes it concrete, and the device-inheritance rule is a single sentence at the end. Every word earns its place; it is compact yet complete for the main intent.

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 batch tool with no output schema, the description does not mention what the return value looks like (e.g., per-step results or error aggregation), nor does it address the stopOnError and listElementsAtEnd options beyond their schema descriptions. Since these options materially change behavior and the tool aggregates multiple actions, the description could be more complete. However, the schema and annotations carry much of the load, so it is adequate but not fully self-contained.

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 all parameters have basic descriptions. The description goes further by clarifying the inheritance behavior of the device parameter across steps, which is not in the schema. It also hints at the step structure ('same as calling it directly') reinforcing the schema's meaning. This adds genuine semantic value beyond the structured data.

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 ('Run multiple tools in sequence') and resource (a batch of mobile tools), and gives concrete examples ('click, type, click, type'). It clearly distinguishes from the sibling tools, which are individual mobile actions, by framing this as a sequence orchestrator. The purpose is unambiguous and immediately actionable.

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?

It explicitly recommends using this tool for multi-step flows ('Use this to fill forms or perform multi-step flows without round-trips'), which gives a clear when-to-use. It does not explicitly state when not to use it (e.g., for single actions use the individual tools), but the implied context is sufficient for an agent to route correctly. The device-inheritance rule also adds operational guidance.

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, either at x,y coordinates or on an element by its ref (e.g. "@e5") from the latest mobile_list_elements_on_screen result. Prefer ref when the element is listed.

ParametersJSON Schema
NameRequiredDescriptionDefault
xNoThe x coordinate to click on the screen, in pixels. Required unless ref is given
yNoThe y coordinate to click on the screen, in pixels. Required unless ref is given
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.

TDQS

A3.5/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=false and destructiveHint=false, so the safety profile is covered. The description adds little about actual behavior—it does not mention side effects (e.g., triggering UI events), failure modes (e.g., off-screen coordinates), or any prerequisites beyond the device parameter. It focuses on input selection rather than behavioral outcomes.

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 fluff. It front-loads the core action ('Click on the screen') and then specifies the two input modes and the preference rule. 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 click tool with no output schema, the description covers the essential information needed to invoke it correctly: the action, the two input methods, and the ref source. It could mention that it is a single tap (versus double/long press) or potential side effects, but those are largely implied by the name and annotations. The coverage is adequate for the tool's complexity.

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 documented. The description adds meaningful context beyond the schema by explaining the ref format, its source (latest list_elements result), and the precedence of ref over coordinates, which helps an agent construct correct calls. This exceeds the baseline for fully covered schemas.

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

Purpose4/5

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

The description clearly states the tool performs a click on the screen, with two input modes (coordinates or ref). It is specific about the action and resource, and the name plus description make it distinguishable from sibling tools like double-tap or long-press, though it does not explicitly name those alternatives.

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 a clear internal guideline—'Prefer ref when the element is listed'—which helps choose between ref and coordinates. However, it gives no explicit guidance on when to use this tool instead of siblings like double_tap or long_press, leaving that to inference from names and context.

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_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
Read-only

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.9/5.0
Behavior5/5

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

Annotations only provide readOnlyHint and openWorldHint. The description discloses critical runtime behaviors: capture starts only after the call begins, stops after limit entries or 30s of silence, stack trace lines count as entries, and saveTo changes the return to just a count. These go well 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?

A compact paragraph with every sentence serving a purpose: what it does, when to trigger, stop conditions, counting caveat, and practical usage tips. No fluff, front-loaded with the core function.

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, it explains the output format (JSON per line), the return behavior with saveTo, and the key constraints (timing, limits, counting). An agent has all needed information to call it correctly and interpret results.

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 covers all parameters with 100% coverage, so baseline is 3. The description adds value by recommending a starting range for limit (20-50) and clarifying that saveTo returns only the entry count, which is not stated in the schema. This is useful but not transformative.

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 precise verb+resource ('Collect live device logs') and immediately clarifies platform specifics (logcat vs unified log) and output format (JSON per line). It is distinct from the only related siblings (crash-focused tools) without needing to name 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?

It explicitly tells the agent when to trigger behavior (right before or during the call), how to start (small limit 20-50), how to avoid noise (filter by process/tag), and when to use saveTo for large captures. This is actionable guidance for correct invocation.

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_appLaunch AppA

Launch an app on mobile device. Use this to open a specific app. You can find the package name of the app by calling list_apps_on_device.

ParametersJSON Schema
NameRequiredDescriptionDefault
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)
packageNameYesThe package name of the app to launch

TDQS

A4.2/5.0
Behavior3/5

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

Annotations declare readOnlyHint=false and destructiveHint=false, so the safety profile is already covered. The description adds no behavioral details beyond the launch action itself, such as foregrounding behavior or failure conditions. It does not contradict annotations, but it does not go beyond them in disclosing side effects.

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

Conciseness5/5

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

Two concise sentences with no filler. The primary action is front-loaded, and the additional guidance about finding the package name is placed efficiently. Every word contributes to clarity.

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 launch tool with three parameters and no output schema, the description covers the purpose, the precondition for packageName, and the device parameter is covered by the schema. It does not mention error handling or edge cases, but that is not critical for this type of tool. It is sufficiently complete.

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 all parameters are described. The description adds a useful hint for the packageName parameter by referencing list_apps_on_device, which helps the agent obtain the correct value. This goes beyond the schema's basic description, adding practical guidance.

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 ('Launch an app on mobile device') with a specific verb and resource. It distinguishes this from sibling tools like install, terminate, or open URL by its explicit purpose. The mention of finding package names via list_apps further clarifies its scope.

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 says 'Use this to open a specific app', which gives a clear use case. It also provides a precondition (find package name) but does not explicitly exclude alternatives like mobile_open_url or mobile_terminate_app. It could be more explicit about when not to use, but the guidance 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_appsList AppsA
Read-only

List all the installed apps 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, so the read-only nature is covered. The description adds no extra behavioral context (e.g., performance, permission requirements, or output format). It simply states the purpose, which is already clear from the name 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, concise sentence that fully captures the tool's function. There is no extraneous information, and it is front-loaded with the action and resource.

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 list operation with readOnlyHint, the description is sufficient. It does not specify the exact output format (e.g., package names vs. display names), but the tool's simplicity and the absence of an output schema make this a minor gap. The agent can infer that the result is a list of installed apps.

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 single parameter 'device' has a schema description that explains how to find the device identifier (using mobile_list_available_devices). Schema coverage is 100%, so the description does not need to add parameter details. It adds no additional semantic value beyond what the schema provides.

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 action ('List') and resource ('all the installed apps on the device'). It is distinct from sibling tools that deal with devices or app lifecycle, and there is no ambiguity about what it 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 description implies usage by stating what it lists, but it does not explicitly mention when to use this tool versus alternatives like mobile_list_remote_devices or mobile_get_foreground_app. The parameter description references mobile_list_available_devices for finding devices, but that is not a usage guideline for the tool itself.

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

A3.6/5.0
Behavior3/5

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

Annotations declare readOnlyHint=false and destructiveHint=false, so the safety profile is known. The description adds a tip about finding coordinates but does not disclose additional behavioral traits such as potential side effects (e.g., triggering a context menu) or any special device requirements. Given annotations cover the basic safety, this is adequate but not 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?

The description is two sentences with zero filler. The core action is front-loaded, and the additional sentence provides a practical pointer to a related tool. Every word earns its place, making it highly concise and well-structured.

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

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 well-documented schema and annotations, the description covers the essential usage and even adds a helpful workflow hint. It does not explain return values, but no output schema exists, and the side effects of a long press are generally understood. It lacks detail on edge cases like invalid coordinates or device behavior, but those are not critical for a basic gesture.

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 parameters (x, y, device, duration) are already documented in the schema. The description does not add meaning beyond the schema; it only reiterates coordinates and offers a usage tip. Per the baseline rule, a 3 is appropriate when the schema does the heavy lifting.

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

Purpose4/5

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

The description clearly states the action: long press at given x,y coordinates. It identifies the resource (screen) and the specific gesture, which distinguishes it from tap or swipe by name and wording. However, it does not explicitly contrast with sibling gestures like click or double_tap, so it's not a full 5.

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

Usage Guidelines3/5

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

The description provides a helpful tip about using mobile_list_elements_on_screen to find coordinates when long pressing on an element, which is context-specific guidance. However, it does not explicitly state when to use this tool versus alternatives like mobile_click_on_screen_at_coordinates or mobile_double_tap_on_screen, leaving the choice implied rather than explicit.

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

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_save_screenshotSave ScreenshotC

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. Omit for full size.

TDQS

C2.9/5.0
Behavior2/5

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

Annotations indicate readOnlyHint=false and destructiveHint=false, so the description doesn't need to restate that. However, it adds no context about side effects, such as whether the file is overwritten, what permissions are required, or whether a new screenshot is captured. The description simply restates the obvious operation without revealing any behavioral nuances beyond what the 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 that immediately states the tool's purpose. It is front-loaded with the core action and avoids any filler or redundancy. Every word earns its place, making it an excellent example of conciseness.

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

Completeness2/5

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

For a tool that saves a screenshot to a file, the description is incomplete. It doesn't explain what happens if the file already exists (overwrite vs. error), whether the tool captures a new screenshot or uses the current screen state, or any expected output. The lack of an output schema means the description should clarify the return value or success/failure indications, but it remains silent. Given the sibling tool mobile_take_screenshot, the distinction is unclear, and an agent might be uncertain about the exact behavior.

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 four parameters are documented in the schema. The description adds no extra parameter-specific details beyond what the schema provides, such as how scale and maxSize interact (though the schema mentions scale is ignored if maxSize is provided). Since the schema covers everything, the description meets the baseline of 3.

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.' This distinguishes it from sibling tools like mobile_get_screen_size or mobile_take_screenshot, though it doesn't explicitly differentiate itself from mobile_take_screenshot. The purpose is unambiguous and specific enough for an agent to understand the action.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. Notably, there is a sibling tool mobile_take_screenshot, and the description doesn't clarify whether this tool captures a screenshot or saves an existing one, nor does it mention any prerequisites like prior screenshot capture or device availability. An agent must infer usage from the name and schema alone.

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. 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 declare non-read-only and non-destructive, so the description adds genuine behavioral substance: the recording persists in the background after the call returns and requires a companion stop call, and it discloses the return value (the save path). This meaningfully extends what an agent could infer from annotations alone, with no contradiction.

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

Conciseness5/5

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

Three sentences, each earning its place: purpose, background-run behavior, and return value. The core action is front-loaded with zero filler 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?

With no output schema, the explicit mention of the returned save path is valuable, and the recording lifecycle is fully explained. The only minor gap is that the description's lifecycle narrative omits the timeLimit auto-stop behavior, though the input schema documents 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?

Schema description coverage is 100%, and the schema already documents each parameter well, including the .mp4 filename requirement for output and the cross-reference to mobile_list_available_devices for device discovery. The description adds no parameter-level detail but does not need to, so the 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?

The description states a specific verb plus resource: 'Start recording the screen of a mobile device.' It distinguishes itself from its natural sibling mobile_stop_screen_recording by naming that tool explicitly, and 'recording' is semantically distinct from the sibling screenshot tools (mobile_take_screenshot, mobile_save_screenshot).

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 frames the workflow clearly: the recording runs in the background until stopped with mobile_stop_screen_recording, alerting the agent that this is a stateful two-call operation and that a follow-up call is required. It does not, however, give explicit when-not guidance against the screenshot tools for still captures, leaving that distinction implied.

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 400 pixels for iOS or 30% of screen dimension for Android
directionYesThe direction to swipe

TDQS

C2.7/5.0
Behavior2/5

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

The annotations (readOnlyHint=false, destructiveHint=false) already indicate a non-read-only, non-destructive action. The description adds no behavioral context such as potential side effects on UI elements, scrolling behavior, or failure conditions. It does not contradict annotations but adds no extra transparency.

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 description is a single sentence, but it is under-specified rather than concise. It repeats the tool name without adding useful content, so it does not 'earn its place' as a meaningful elaboration. It is more of a placeholder than a well-structured definition.

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

Completeness2/5

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

For a tool with 5 parameters and no output schema, the description is highly incomplete. It lacks information about return values, side effects, or interaction with the UI. Annotations cover basic safety but not the operational context needed for reliable use.

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

Parameters3/5

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

Schema description coverage is 100%, so each parameter (x, y, device, distance, direction) is already documented. The description itself adds no parameter-related information. Per the rubric, a high schema coverage sets a baseline of 3, which is appropriate here.

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

Purpose4/5

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

The description 'Swipe on the screen' clearly indicates a swipe gesture on the mobile screen, matching the tool name and title. It is specific enough to distinguish from other touch actions like click or long press by name, but the description itself does not add any differentiation detail beyond the resource and verb.

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?

There is no guidance on when to use this tool versus alternatives such as click, double tap, or long press. No context about typical use cases, prerequisites, or exclusions is provided, leaving the agent to infer usage solely from the name.

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. Use this to understand what's on screen, if you need to press an element that is available through view hierarchy then you must list elements on screen instead. The screenshot is usually smaller than the screen, so when the device reports its screen size the result also states how to convert positions in the screenshot into screen coordinates before tapping. Do not cache this result.

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. Defaults to 1024.

TDQS

A4.5/5.0
Behavior5/5

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

Annotations only declare readOnlyHint=true and openWorldHint=true, which say nothing about the mechanics of the result. The description adds two non-obvious behavioral facts: the screenshot is usually smaller than the screen, and the result includes coordinate-conversion guidance needed before tapping, plus a caching warning. That is substantial context beyond the structured fields.

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?

Front-loads the core action in the first sentence and follows with the routing rule and the coordinate/caching caveats. Every sentence carries information, though the coordinate-conversion sentence is dense and could be split; minor stylistic drag.

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?

No output schema exists, and the description covers what the agent actually needs from the return value (that it states how to map screenshot positions to screen coordinates). It stops short of describing the image encoding/size defaults, but those are covered by the schema and are not essential to 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 scale, device, and maxSize are already fully documented in the schema, including the interaction between scale and maxSize. The description adds no parameter-level detail, so the baseline of 3 applies.

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

Purpose5/5

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

States a specific verb and resource ('Take a screenshot of the mobile device') and immediately distinguishes itself from the element-listing sibling by naming the exact condition that selects that alternative. An agent can tell it apart from mobile_list_elements_on_screen and mobile_save_screenshot without opening the schema.

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?

Explicit when-to-use ('understand what's on screen'), explicit alternative routing ('if you need to press an element ... you must list elements on screen instead'), and an explicit prohibition ('Do not cache this result'). This is exactly the when/when-not/alternatives structure the dimension rewards.

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

mobile_terminate_appTerminate AppB

Stop and terminate an app on mobile device

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceYesThe device identifier to use. Use mobile_list_available_devices to find which devices are available to you.
packageNameYesThe package name of the app to terminate

TDQS

B3.2/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=false, so the agent knows this is a mutation. The description adds no further behavioral context—it does not state whether the termination is a force-stop, whether app data is preserved, or what side effects occur. Given destructiveHint=false, the description could clarify the impact but remains silent. It does not contradict annotations.

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

Conciseness4/5

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

The description is a single short sentence, front-loaded with the action. It is concise and avoids unnecessary detail, but the phrase 'Stop and terminate' is slightly redundant—'terminate' alone would suffice. Still, it is efficient and free of fluff.

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 2-parameter tool with no output schema and existing annotations, the description is minimally sufficient. However, it omits any mention of return values, success/failure indications, or side effects like app state loss. The lack of such context could leave an agent uncertain about outcomes, though the tool's simplicity reduces the gap. Overall, adequate but not rich.

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 device and packageName are well documented in the schema. The description itself adds no additional meaning to the parameters. With high schema coverage, the baseline of 3 applies; the description does not compensate with extra context about parameter usage beyond what the schema provides.

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') on a specific resource ('an app on mobile device'). It clearly distinguishes from siblings like launch, install, and uninstall, and the target is unambiguous via the packageName parameter. The redundancy of 'stop and terminate' is minor and does not obscure the 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?

The description provides no guidance on when to use this tool versus alternatives. It does not mention prerequisites (e.g., app must be installed) or suggest situations where termination is appropriate. The device parameter schema hints at discovering devices, but that is not usage guidance for the tool itself. No exclusions or comparisons to siblings are given.

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

mobile_type_keysType TextC

Type text into the focused element

ParametersJSON Schema
NameRequiredDescriptionDefault
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.

TDQS

C2.9/5.0
Behavior2/5

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

Annotations mark readOnlyHint=false (a mutating operation), openWorldHint=true, and destructiveHint=false. The description adds only the 'focused element' precondition, which is mild useful context, but it does not disclose what happens on submit=true (side effects of submission), whether text replaces or appends existing content, or whether the device must be foregrounded. Since the annotations do not carry a safety profile that the description can lean on, more behavioral disclosure would be expected. No contradiction with annotations.

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

Conciseness4/5

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

A single sentence, front-loaded, with zero filler. It gets the core purpose across efficiently. Slightly under-specified rather than overly verbose, but for a simple tool whose parameters are fully covered by the schema, this length is appropriate.

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 relatively simple with 3 fully documented parameters and no output schema, so the burden is modest. The description conveys the core purpose and the focused-element precondition. However, it omits usage context (when to choose typing over button-press or tap), which an agent would need to select it correctly among the large sibling set. Adequate for basic invocation but with a clear guidance gap.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema fully documents all three parameters (text, device, submit), including the device hint to consult mobile_list_available_devices. The description adds nothing beyond the schema for parameters, so the baseline of 3 applies. The description's 'focused element' wording loosely relates to the text target but does not clarify the device or submit semantics beyond what the schema already states.

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: 'Type text into the focused element.' This clearly identifies the action and target, and it distinguishes the tool from siblings like mobile_click_on_screen_at_coordinates, mobile_press_button, and mobile_swipe_on_screen, which perform different input actions. It is not a pure tautology of the title, since 'focused element' adds meaningful targeting context.

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?

There is no guidance on when to use this tool versus alternatives. The description implies usage for entering text but never states prerequisites (e.g., the target element must first be focused, possibly via a click or tap tool), nor does it mention exclusions or route the agent toward sibling tools. An agent is left to infer when typing is the right action versus pressing a button or tapping coordinates.

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.

Tool Schema Changelog

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

  1. 16 tool updatesv1.0.3
    • Addedmobile_allocate_remote_device
    • Addedmobile_batch_commands
    • Changedmobile_click_on_screen_at_coordinates6 fields changed
      • addedInput schema / properties / ref
        Added value: +{
        +  "description": "Element ref from mobile_list_elements_on_screen, e.g. \"@e5\". Takes precedence over x,y",
        +  "type": "string"
        +}
      • changedInput schema / properties / x / description
        Previous value: -"The x coordinate to click on the screen, in pixels"New value: +"The x coordinate to click on the screen, in pixels. Required unless ref is given"
      • addedInput schema / properties / x / minimum
        Added value: +0
      • changedInput schema / properties / y / description
        Previous value: -"The y coordinate to click on the screen, in pixels"New value: +"The y coordinate to click on the screen, in pixels. Required unless ref is given"
      • addedInput schema / properties / y / minimum
        Added value: +0
      • changedInput schema / required
        Previous value: -[
        -  "device",
        -  "x",
        -  "y"
        -]New value: +[
        +  "device"
        +]
    • Addedmobile_clipboard
    • Changedmobile_double_tap_on_screen2 fields changed
      • addedInput schema / properties / x / minimum
        Added value: +0
      • addedInput schema / properties / y / minimum
        Added value: +0
    • Addedmobile_get_device_logs
    • Addedmobile_get_foreground_app
    • Changedmobile_list_elements_on_screen1 field changed
      • addedInput schema / properties / format
        Added value: +{
        +  "description": "Output format. \"text\" (default) is one compact line per element, \"json\" is a json array",
        +  "enum": [
        +    "text",
        +    "json"
        +  ],
        +  "type": "string"
        +}
    • Addedmobile_list_remote_devices
    • Addedmobile_login_to_cloud_provider
    • Changedmobile_long_press_on_screen_at_coordinates2 fields changed
      • addedInput schema / properties / x / minimum
        Added value: +0
      • addedInput schema / properties / y / minimum
        Added value: +0
    • Addedmobile_release_remote_device
    • Changedmobile_save_screenshot2 fields changed
      • addedInput schema / properties / maxSize
        Added value: +{
        +  "description": "Maximum width/height in pixels, keeping aspect ratio. Omit for full size.",
        +  "exclusiveMinimum": 0,
        +  "maximum": 9007199254740991,
        +  "type": "integer"
        +}
      • addedInput schema / properties / scale
        Added value: +{
        +  "description": "Scale factor (0.0-1.0). Ignored if maxSize is provided.",
        +  "exclusiveMinimum": 0,
        +  "maximum": 1,
        +  "type": "number"
        +}
    • Addedmobile_set_location
    • Changedmobile_swipe_on_screen2 fields changed
      • addedInput schema / properties / x / minimum
        Added value: +0
      • addedInput schema / properties / y / minimum
        Added value: +0
    • Changedmobile_take_screenshot2 fields changed
      • addedInput schema / properties / maxSize
        Added value: +{
        +  "description": "Maximum width/height in pixels, keeping aspect ratio. Defaults to 1024.",
        +  "exclusiveMinimum": 0,
        +  "maximum": 9007199254740991,
        +  "type": "integer"
        +}
      • addedInput schema / properties / scale
        Added value: +{
        +  "description": "Scale factor (0.0-1.0). Ignored if maxSize is provided.",
        +  "exclusiveMinimum": 0,
        +  "maximum": 1,
        +  "type": "number"
        +}
  2. 7 tool updatesv0.0.53
    • Addedmobile_get_crash
    • Changedmobile_launch_app1 field changed
      • addedInput schema / properties / locale
        Added value: +{
        +  "description": "Comma-separated BCP 47 locale tags to launch the app with (e.g., fr-FR,en-GB)",
        +  "type": "string"
        +}
    • Changedmobile_list_available_devices2 fields changed
      • removedInput schema / properties / noParams
        Removed value: -{
        -  "properties": {},
        -  "type": "object"
        -}
      • removedInput schema / required
        Removed value: -[
        -  "noParams"
        -]
    • Addedmobile_list_crashes
    • Changedmobile_save_screenshot1 field changed
      • changedInput schema / properties / saveTo / description
        Previous value: -"The path to save the screenshot to"New value: +"The path to save the screenshot to. Filename must end with .png, .jpg, or .jpeg"
    • Addedmobile_start_screen_recording
    • Addedmobile_stop_screen_recording
  3. 22 tool updatesv1.0.0
    • Changedmobile_click_on_screen_at_coordinates3 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / device
        Added value: +{
        +  "description": "The device identifier to use. Use mobile_list_available_devices to find which devices are available to you.",
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "x",
        -  "y"
        -]New value: +[
        +  "device",
        +  "x",
        +  "y"
        +]
    • Addedmobile_double_tap_on_screen
    • Changedmobile_get_orientation4 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / device
        Added value: +{
        +  "description": "The device identifier to use. Use mobile_list_available_devices to find which devices are available to you.",
        +  "type": "string"
        +}
      • removedInput schema / properties / noParams
        Removed value: -{
        -  "additionalProperties": false,
        -  "properties": {},
        -  "type": "object"
        -}
      • changedInput schema / required
        Previous value: -[
        -  "noParams"
        -]New value: +[
        +  "device"
        +]
    • Changedmobile_get_screen_size4 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / device
        Added value: +{
        +  "description": "The device identifier to use. Use mobile_list_available_devices to find which devices are available to you.",
        +  "type": "string"
        +}
      • removedInput schema / properties / noParams
        Removed value: -{
        -  "additionalProperties": false,
        -  "properties": {},
        -  "type": "object"
        -}
      • changedInput schema / required
        Previous value: -[
        -  "noParams"
        -]New value: +[
        +  "device"
        +]
    • Addedmobile_install_app
    • Changedmobile_launch_app3 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / device
        Added value: +{
        +  "description": "The device identifier to use. Use mobile_list_available_devices to find which devices are available to you.",
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "packageName"
        -]New value: +[
        +  "device",
        +  "packageName"
        +]
    • Changedmobile_list_apps4 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / device
        Added value: +{
        +  "description": "The device identifier to use. Use mobile_list_available_devices to find which devices are available to you.",
        +  "type": "string"
        +}
      • removedInput schema / properties / noParams
        Removed value: -{
        -  "additionalProperties": false,
        -  "properties": {},
        -  "type": "object"
        -}
      • changedInput schema / required
        Previous value: -[
        -  "noParams"
        -]New value: +[
        +  "device"
        +]
    • Changedmobile_list_available_devices2 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • removedInput schema / properties / noParams / additionalProperties
        Removed value: -false
    • Changedmobile_list_elements_on_screen4 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / device
        Added value: +{
        +  "description": "The device identifier to use. Use mobile_list_available_devices to find which devices are available to you.",
        +  "type": "string"
        +}
      • removedInput schema / properties / noParams
        Removed value: -{
        -  "additionalProperties": false,
        -  "properties": {},
        -  "type": "object"
        -}
      • changedInput schema / required
        Previous value: -[
        -  "noParams"
        -]New value: +[
        +  "device"
        +]
    • Addedmobile_long_press_on_screen_at_coordinates
    • Changedmobile_open_url3 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / device
        Added value: +{
        +  "description": "The device identifier to use. Use mobile_list_available_devices to find which devices are available to you.",
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "url"
        -]New value: +[
        +  "device",
        +  "url"
        +]
    • Changedmobile_press_button3 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / device
        Added value: +{
        +  "description": "The device identifier to use. Use mobile_list_available_devices to find which devices are available to you.",
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "button"
        -]New value: +[
        +  "device",
        +  "button"
        +]
    • Changedmobile_save_screenshot3 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / device
        Added value: +{
        +  "description": "The device identifier to use. Use mobile_list_available_devices to find which devices are available to you.",
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "saveTo"
        -]New value: +[
        +  "device",
        +  "saveTo"
        +]
    • Changedmobile_set_orientation3 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / device
        Added value: +{
        +  "description": "The device identifier to use. Use mobile_list_available_devices to find which devices are available to you.",
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "orientation"
        -]New value: +[
        +  "device",
        +  "orientation"
        +]
    • Addedmobile_swipe_on_screen
    • Changedmobile_take_screenshot4 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / device
        Added value: +{
        +  "description": "The device identifier to use. Use mobile_list_available_devices to find which devices are available to you.",
        +  "type": "string"
        +}
      • removedInput schema / properties / noParams
        Removed value: -{
        -  "additionalProperties": false,
        -  "properties": {},
        -  "type": "object"
        -}
      • changedInput schema / required
        Previous value: -[
        -  "noParams"
        -]New value: +[
        +  "device"
        +]
    • Changedmobile_terminate_app3 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / device
        Added value: +{
        +  "description": "The device identifier to use. Use mobile_list_available_devices to find which devices are available to you.",
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "packageName"
        -]New value: +[
        +  "device",
        +  "packageName"
        +]
    • Changedmobile_type_keys3 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / device
        Added value: +{
        +  "description": "The device identifier to use. Use mobile_list_available_devices to find which devices are available to you.",
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "text",
        -  "submit"
        -]New value: +[
        +  "device",
        +  "text",
        +  "submit"
        +]
    • Addedmobile_uninstall_app
    • Removedmobile_use_default_device
    • Removedmobile_use_device
    • Removedswipe_on_screen
  4. 17 tool updates
    • First observedmobile_click_on_screen_at_coordinates
    • First observedmobile_get_orientation
    • First observedmobile_get_screen_size
    • First observedmobile_launch_app
    • First observedmobile_list_apps
    • First observedmobile_list_available_devices
    • First observedmobile_list_elements_on_screen
    • First observedmobile_open_url
    • First observedmobile_press_button
    • First observedmobile_save_screenshot
    • First observedmobile_set_orientation
    • First observedmobile_take_screenshot
    • First observedmobile_terminate_app
    • First observedmobile_type_keys
    • First observedmobile_use_default_device
    • First observedmobile_use_device
    • First observedswipe_on_screen

TDQS

A3.5/5.0

Scored across 32 tools

Disambiguation4/5

Most tools map to a clear resource+action (app lifecycle, screen input, orientation, clipboard, logs, crashes, cloud fleet). The only mild overlap is mobile_take_screenshot vs mobile_save_screenshot and the list_available_devices vs list_remote_devices pair, but the descriptions explicitly contrast these, so an agent can reliably choose.

Naming Consistency5/5

Every tool uses a uniform mobile_verb_noun snake_case convention (mobile_get_foreground_app, mobile_list_apps, mobile_allocate_remote_device, etc.). Even the meta-tool mobile_batch_commands fits the pattern, so naming is fully predictable.

Tool Count3/5

32 tools is on the heavy side for a single server and pushes into the 'too many' range, with several near-sibling input tools (click, double tap, long press, swipe, press button, type keys). However, the domain is genuinely broad (device mgmt, app lifecycle, input, media, diagnostics, cloud fleet), so most tools earn their place.

Completeness4/5

Coverage is strong end-to-end: local/remote device discovery, login and allocation lifecycle, app install/uninstall/launch/terminate, full input and navigation primitives, orientation, location, clipboard, logs, crashes, and screen recording. Only minor gaps remain, such as no explicit scroll/pinch or text-clear helper.

Maintenance

ActivityActive
ResponsivenessWithin a week

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    A Model Context Protocol server that enables AI agents to control and automate Android devices through natural language, supporting actions like app management, UI interactions, and device monitoring.
    59
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    A Model Context Protocol server that enables scalable mobile automation for iOS and Android through a platform-agnostic interface, allowing LLMs to interact with mobile applications via accessibility snapshots or screenshot-based inputs.
    19
    23,436 npm
    2
    Apache 2.0
  • A
    license
    A
    quality
    C
    maintenance
    A Model Context Protocol server for ad-hoc UI testing of Android and iOS apps, enabling LLM agents to interact with mobile app UIs and react to observations.
    40
    10 npm
    3
    MIT