Android Mobile MCP Server
Provides tools for Android device and emulator automation via adb, such as listing installed apps on a connected Android device.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Android Mobile MCP Serverlist installed apps on emulator-5554"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Android Mobile MCP Server
Minimal Android-only fork of the original mobile-mcp project by MobileNext.
This project keeps only the Android functionality and exposes it through a Streamable HTTP MCP server protected by a shared bearer token.
License and attribution
This project is derived from the original mobile-mcp project and is licensed under the Apache License 2.0.
Keep the Apache License file in this repository and preserve the original copyright notices. This repository is a modified Android-focused fork and is not the official upstream project.
Related MCP server: android-mcp-server
Requirements
Node.js 20+
Android SDK Platform Tools
adbon yourPATHone running Android emulator or one connected Android device
a shared secret in
.envviaMOBILEMCP_AUTH
Check connectivity:
adb devicesSetup environment
Create a .env file in the project root:
MOBILEMCP_AUTH=your_shared_secret_hereYou can use the example file:
cp .env.example .envInstall and run
npm install
npm run build
node lib/index.js --listen 0.0.0.0:3000Server URL:
http://localhost:3000/mcpThe server requires a bearer token for every HTTP request.
Auth header
Authorization: Bearer your_shared_secret_hereMCP config
{
"mcpServers": {
"mobile-mcp": {
"type": "http",
"url": "http://localhost:3000/mcp",
"headers": {
"Authorization": "Bearer your_shared_secret_here"
}
}
}
}Example device-targeted tool call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "mobile_list_apps",
"arguments": {
"device": "emulator-5554"
}
}
}Use the device ID from:
adb devicesDocker
The container must be told how to reach the host adb server. host.docker.internal is only available on Docker Desktop or when explicitly mapped for Linux.
Docker Desktop / macOS / Windows
docker build -t mobile-mcp-android .Linux with host networking
docker run -d \
--network host \
-e MOBILEMCP_AUTH=your_shared_secret_here \
-e ADB_SERVER_SOCKET=tcp:127.0.0.1:5037 \
--name mobile-mcp-android \
mobile-mcp-androidIf port 3000 is already in use, change the host port mapping to another port, for example 3000:3000 as above.
Then access the server at:
http://localhost:3000/mcpIf you are debugging inside the container, the adb server should then resolve correctly:
docker exec -it mobile-mcp-android sh
adb devicesNotes
Android-only build
iOS support removed
intended for local Android automation and emulator/device control
anyone without the correct
MOBILEMCP_AUTHsecret cannot connect
License
This project is distributed under the Apache License 2.0.
See the included LICENSE file for the full text.
Available Tools
27 toolsmobile_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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Filter by device name/model. Supports a trailing * for prefix match (e.g. "iPhone*"), or an exact name (e.g. "iPhone 16"). | |
| type | No | Device type filter. Currently only "real" (physical devices) is supported by the fleet. | |
| wait | No | If 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. | |
| version | No | Filter by OS version. Supports comparison prefixes >=, >, <=, < (e.g. ">=18"), or an exact version (e.g. "18.6.2"). Multiple values are ANDed together. | |
| platform | Yes | The platform to allocate a device for | |
| timeoutSeconds | No | Seconds to wait for allocation when wait is true. Defaults to 900 (15 minutes). Only relevant when wait is true. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, it discloses that the device is shared and billed, borrowed for the session only, and that releasing wipes the device's state. It also exposes the authentication dependency and the retry-on-auth-error behavior. These are material behavioral traits not already present in readOnlyHint/openWorldHint/destructiveHint, and there is no contradiction with 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every sentence carries operational weight: purpose, exclusivity/billing caveat, explicit user-consent constraint, auth prerequisite, listing prerequisite, and release/wipe warning. The most important selection information is front-loaded in the first sentence, and the warnings come after the core usage context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a state-changing cloud allocation tool with no output schema, the description explains what the call returns (a usable device identifier), how long the device is held, what must happen before and after, and how to handle a common auth failure. Nothing needed 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3; the schema already documents every parameter including filters, wait behavior, and timeout semantics. The description adds useful operational advice to call mobile_list_remote_devices before filtering by name/version, but it does not materially expand on the parameter meanings themselves.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence names a specific verb ('Reserve'), a specific resource ('physical device from the remote cloud fleet'), and the key output ('a device identifier usable with the other mobile_* tools'). It clearly distinguishes remote allocation from local devices and from listing remote devices, so an agent can select it correctly among many siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit when-to-use guidance: only after the user explicitly asks for a remote/cloud device, never speculatively or as a fallback. It also states ordering prerequisites (login first, list devices before filtering), an error-and-retry path for authentication failures, and the required release step afterward.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mobile_click_on_screen_at_coordinatesClick ScreenA
Click on the screen at given x,y coordinates. If clicking on an element, use the list_elements_on_screen tool to find the coordinates.
| Name | Required | Description | Default |
|---|---|---|---|
| x | Yes | The x coordinate to click on the screen, in pixels | |
| y | Yes | The y coordinate to click on the screen, in pixels | |
| device | Yes | The device identifier to use. Use mobile_list_available_devices to find which devices are available to you. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate this is not read-only, not destructive, and operates in an open world. The description adds little behavioral detail beyond the coordinate-based click itself. It does not disclose possible return behavior, coordinate system origin, or feedback after clicking, but for a simple click action the annotation coverage provides a reasonable baseline. No contradiction with annotations exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences with no filler. The core action is front-loaded in the first sentence, and the second sentence provides a practical prerequisite tip. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple coordinate-click tool with fully documented parameters and adequate annotations, the description covers what an agent needs: the action, the coordinate basis, and a pointer to the element-listing tool for finding coordinates. No output schema is present, but click actions typically need no elaborate return-value explanation, so this is sufficiently complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so x, y, and device are already well-defined with their own descriptions. The tool description adds only a workflow hint about using list_elements_on_screen to find coordinates, which supports parameter usage but does not add new semantic meaning to the parameters themselves. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action: 'Click on the screen at given x,y coordinates.' It identifies the resource (screen) and the approach (coordinates), and it distinguishes from coordinate-based siblings like double-tap or long-press by naming the specific 'click' action. However, it does not explicitly contrast itself with those sibling gesture tools, so it stops short of full sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear operational context: 'If clicking on an element, use the list_elements_on_screen tool to find the coordinates.' This tells the agent how to obtain valid coordinates before invoking the tool. It does not, however, give explicit when-not-to-use guidance against alternatives like double_tap or long_press, so it lacks full exclusionary guidance.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| x | Yes | The x coordinate to double-tap, in pixels | |
| y | Yes | The y coordinate to double-tap, in pixels | |
| device | Yes | The device identifier to use. Use mobile_list_available_devices to find which devices are available to you. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds no behavioral detail beyond the annotations. Annotations already indicate this is not read-only and not destructive, but the description does not disclose potential side effects, prerequisites (e.g., screen on), or response behavior. It essentially restates the tool's purpose without additional transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the core action and coordinates. There is no wasted wording, and it is appropriately sized for the tool's simplicity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple action with three fully documented parameters and no output schema, the description is sufficient to invoke the tool correctly. It might benefit from mentioning its distinctness from sibling tap tools, but that gap is covered by usage guidelines, not contextual completeness. The core information is complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the parameters (x, y, device) are fully described in the schema. The description merely repeats 'x,y coordinates' without adding new meaning, which meets the baseline of 3 for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (double-tap) and the resource (screen at coordinates). It is concise and specific, but it does not explicitly differentiate from sibling tools like mobile_click_on_screen_at_coordinates or mobile_long_press_on_screen_at_coordinates; the distinction is implied by the verb 'double-tap'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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. It does not mention that single taps should use mobile_click_on_screen_at_coordinates, or that double-taps are for specific gestures like zoom. The description provides no context 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 ReportARead-only
Get the full content of a crash report by its ID. Use mobile_list_crashes to find available crash IDs.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The crash report ID to retrieve | |
| device | Yes | The device identifier to use. Use mobile_list_available_devices to find which devices are available to you. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the agent knows this is a safe read operation. The description adds that it returns the crash report's 'full content,' but does not disclose details like response format or whether the report is returned in raw form. With annotations covering safety, a 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with no redundant wording. The primary action is front-loaded and the useful pointer to the sibling list tool is included without extra fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter read-only retrieval tool with fully documented schema properties and appropriate annotations, the description is nearly complete. It could mention what kind of content the crash report contains or the response shape since there is no output schema, but the core instructions for invoking the tool are all present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both 'id' and 'device.' The description reinforces that the ID identifies the crash report, but it does not add meaning beyond the schema. Baseline 3 applies because the schema carries the parameter documentation burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Get'), a precise resource ('full content of a crash report'), and the lookup key ('by its ID'). It also distinguishes itself from the sibling listing tool by referencing mobile_list_crashes, so an agent can tell retrieval apart from enumeration.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly instructs the agent to use mobile_list_crashes to find available crash IDs, providing clear context for when this tool is appropriate. It does not mention exclusions or alternatives beyond the list step, but for a simple get-by-ID tool that is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mobile_get_orientationGet OrientationBRead-only
Get the current screen orientation of the device
| Name | Required | Description | Default |
|---|---|---|---|
| device | Yes | The device identifier to use. Use mobile_list_available_devices to find which devices are available to you. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare `readOnlyHint: true`, so the safe read-only nature is covered. The description adds no additional behavioral context, such as what values may be returned or whether orientation is sensed versus stored, but it also does not contradict the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single clear sentence with no unnecessary words or repetition. It is front-loaded and easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description should explain what the tool returns, but it only says it gets the orientation. It also omits any indication of return value format, possible values, or behavior on unsupported devices, leaving the agent to guess.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides 100% coverage with a clear description for the `device` parameter, including how to discover available devices. The tool description only says 'of the device', adding no meaningful detail beyond what the schema already documents.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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'), so an agent can understand the tool's basic purpose. It is distinguishable from `mobile_set_orientation` by the get/set contrast, though it does not explicitly call out that sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this tool versus alternatives such as `mobile_set_orientation`. It does not mention preconditions, context, or when this read operation is appropriate.
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 SizeARead-only
Get the screen size of the mobile device in pixels
| Name | Required | Description | Default |
|---|---|---|---|
| device | Yes | The device identifier to use. Use mobile_list_available_devices to find which devices are available to you. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already communicates that this is a safe read operation. The description adds the 'in pixels' unit, which is helpful, but it does not disclose the return shape (e.g., width and height values) despite there being no output schema to fill that gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no filler or redundant phrasing. It states the operation, target, and unit efficiently, earning its place without excess words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter, read-only getter, the description is largely complete: the parameter is fully documented in the schema and the annotations cover the safety profile. The only minor gap is the exact return format, which is relevant because no output schema is provided.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already provides 100% coverage for the single 'device' parameter and even instructs the agent to use mobile_list_available_devices. The description itself adds no parameter-level meaning, but the baseline of 3 applies because the schema carries the full burden successfully.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Get'), a clear resource ('screen size'), and a precise unit ('in pixels'). It is unambiguous and distinguishes itself from related siblings like mobile_get_orientation, which concern a different device property.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The intended use is clear: call this tool when the agent needs the mobile device's screen dimensions. There are no meaningful alternatives among the siblings for this exact purpose, so explicit exclusions are unnecessary, though the description does not explicitly state 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_install_appInstall AppB
Install an app on mobile device
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | The 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 | |
| device | Yes | The device identifier to use. Use mobile_list_available_devices to find which devices are available to you. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds no behavioral context beyond what the annotations already provide. Annotations show readOnlyHint=false and destructiveHint=false, meaning this is a state-changing but non-destructive operation; the description does not mention potential side effects like overwriting existing apps, permission requirements, or what happens on failure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, direct sentence with no filler words, making it appropriately concise. It is front-loaded with the action, though it borders on restating the tool title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the two fully documented parameters and the absence of an output schema, the description is minimally sufficient for an agent to invoke the tool. However, it leaves gaps around return behavior, side effects, and the need for a valid installed-file path, which are not covered elsewhere except partially in parameter descriptions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides 100% parameter coverage, including detailed descriptions for both 'path' and 'device', so the baseline is 3. The description itself adds no extra parameter semantics beyond restating that an app is installed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'Install' with the resource 'an app on mobile device', clearly distinguishing it from siblings like mobile_uninstall_app, mobile_launch_app, and mobile_terminate_app. It directly states the operation and scope without ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance about when to use this tool versus alternatives, nor does it mention prerequisites or exclusions. The schema hints at using mobile_list_available_devices to find devices, but this is in a parameter description, not in the tool description, and no alternatives are named.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| device | Yes | The device identifier to use. Use mobile_list_available_devices to find which devices are available to you. | |
| locale | No | Comma-separated BCP 47 locale tags to launch the app with (e.g., fr-FR,en-GB) | |
| packageName | Yes | The package name of the app to launch |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already convey that the operation is not read-only and is not destructive. The description adds little behavioral context beyond the basic act of launching, so it earns a middle score rather than higher.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with no filler. The main action is front-loaded, and the supporting guidance about package name discovery is efficiently placed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is adequate for a simple launch operation, and all parameters are documented in the schema. However, it references 'list_apps_on_device' while the actual sibling is 'mobile_list_apps', which could mislead an agent attempting to follow the guidance.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, establishing a baseline of 3. The description adds value by telling the agent how to discover the packageName parameter's value via a list-apps call, going beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb-resource pair: 'Launch an app on mobile device' and clarifies it means opening a specific app. It is clear, but it does not explicitly distinguish itself from sibling tools like mobile_open_url or mobile_terminate_app.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Use this to open a specific app' gives a clear condition for use, and the pointer to list apps for finding the package name offers useful context. It does not explicitly state when not to use this tool or name alternative launch mechanisms.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mobile_list_appsList AppsARead-only
List all the installed apps on the device
| Name | Required | Description | Default |
|---|---|---|---|
| device | Yes | The device identifier to use. Use mobile_list_available_devices to find which devices are available to you. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as readOnlyHint=true, so the description does not need to restate safety. The description adds no additional behavioral details such as output format, completeness guarantees, or potential limitations. There is 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single clear sentence with no filler or redundant phrasing. It conveys the complete functional scope of the tool efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 documented required parameter and annotations declaring safety, the description is sufficiently complete. It could specify the output format, but the returned data is reasonably inferable from 'List all the installed apps.'
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the schema already explains the device parameter and recommends mobile_list_available_devices. The tool description does not need to add parameter-level information, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('List') and resource ('installed apps on the device'), which clearly distinguishes it from app-manipulation siblings like mobile_launch_app, mobile_terminate_app, mobile_install_app, and mobile_uninstall_app. It communicates exactly what the tool returns.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The tool's intended use is obvious from 'List all the installed apps on the device.' The parameter description adds helpful context by pointing to mobile_list_available_devices for discovering device identifiers, though it does not explicitly state exclusions or when to prefer other listing tools.
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 DevicesARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark readOnlyHint true. Description adds useful context beyond annotations: the tools lists physical and simulated devices, covers both platforms, and indicates devices are local, connected, and free to use. Does not describe return format, but this is a simple list operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences front-load the core action, then add relevant detail, then provide alternative guidance. No wasted words or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a parameterless read-only list tool, the description fully covers what an agent needs: what is listed, platform coverage, local availability, and when to choose the sibling remote-device tool. No output schema is present, but the description gives enough expectation about the return content.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are zero parameters, so parameter semantics are not needed. The description's context about what is being listed is sufficient and adds no conflicting or missing parameter guidance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description uses specific verb 'List' and resource 'available devices', and elaborates that these include physical devices, simulators, emulators, Android and iOS. It clearly differentiates from sibling tool mobile_list_remote_devices by naming it explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
States exactly when to use this tool: for local devices already connected to this machine, ready to use immediately at no cost. Explicitly routes to mobile_list_remote_devices for shared remote cloud fleet devices.
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 ReportsBRead-only
List crash reports available on the device
| Name | Required | Description | Default |
|---|---|---|---|
| device | Yes | The device identifier to use. Use mobile_list_available_devices to find which devices are available to you. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the agent knows this is read-only. The description adds little behavior beyond that, such as what 'available' means, whether reports are sorted, or whether the list is empty-capable. With annotations covering the safety profile, a mid-range score 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler. It is appropriately brief for such a simple tool, though it borders on redundant with the title and could add useful information without becoming too long.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool with one well-documented parameter and read-only annotations, the description is minimally sufficient. However, it leaves out what the returned list contains, whether items can be passed to mobile_get_crash, and any details about crash report availability. A sentence connecting this tool to mobile_get_crash would make it noticeably more complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema provides 100% coverage for the single 'device' parameter, including a clear description and a pointer to mobile_list_available_devices. The main description does not discuss parameters, but the schema carries the burden adequately, so the description need not repeat it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('List') and resource ('crash reports') and scopes them to the device, making the basic purpose clear. It is distinguishable from the sibling mobile_get_crash by the list-vs-get operation, though it does not explicitly call out that distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no indication of when to use this tool versus mobile_get_crash or other siblings. The only contextual hint is 'available on the device,' which weakly implies local scope, but there is no mention of prerequisites, alternatives, or how the returned list should be consumed.
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 ElementsARead-only
List elements on screen and their coordinates, with display text or accessibility label. Do not cache this result.
| Name | Required | Description | Default |
|---|---|---|---|
| device | Yes | The device identifier to use. Use mobile_list_available_devices to find which devices are available to you. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds value by warning against caching the result, signaling that the output is time-sensitive and may change between calls, and by clarifying that elements are identified via display text or accessibility label.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with no filler. The core purpose is front-loaded, the output contents are specified, and the caching caveat is a meaningful addition that earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 no output schema, the description covers the main behavior, output contents, coordinate presence, and freshness requirement. It does not detail coordinate units or element ordering, but these are minor given the simplicity and the read-only annotation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the schema already explains the device parameter and even points to mobile_list_available_devices. The tool description itself adds no new parameter semantics, which matches the baseline for a fully documented single parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('List'), a clear resource ('elements on screen'), and the exact output contents (coordinates, display text, accessibility label). This distinguishes it from sibling tools like mobile_get_screen_size, which only returns screen dimensions, and the interaction tools that operate on elements rather than listing them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The instruction 'Do not cache this result' gives an important usage constraint, implying the agent should call this fresh each time the current screen state matters. However, it does not explicitly say when to choose this tool over siblings or name alternatives, leaving the usage context mostly implicit.
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 DevicesARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=true, and the description does not contradict this. It adds valuable operational context: remote devices are not usable until reserved, reservations may be limited or billed, and authentication is required. This goes beyond what the annotations convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose, then differentiates from the sibling tool, then explains constraints and prerequisites. Every sentence earns its place and there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, read-only listing tool, the description is complete. It explains what the tool returns, how it differs from the local-device tool, when reservation is needed, billing implications, and the authentication prerequisite.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and the empty schema already fully documents this. The description adds no parameter details because none are needed, and it instead usefully describes what the returned catalog contains.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('List') and resource ('catalog of device models ... remote cloud device fleet'), including the returned fields (make, platform, OS version). It also explicitly distinguishes this from mobile_list_available_devices, making sibling differentiation clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly explains when this tool is appropriate: when the user needs remote cloud devices, not locally connected devices. It names the alternative tool (mobile_list_available_devices), states the prerequisite (mobile_login_to_cloud_provider), and provides a retry strategy on authentication failure.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
It richly discloses behavior beyond the annotations: the call returns quickly without waiting, the login continues in the background, a URL and one-time code are returned for the user, and the caller should retry after user confirmation. This is exactly the kind of temporal and interaction context annotations cannot convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is longer than average but every sentence earns its place: purpose, prerequisite relationship, failure trigger, non-blocking behavior, user handoff, and retry instruction. It is well-structured and front-loaded with the core action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter tool with no output schema, the description is fully self-sufficient. It covers when to call, what the call returns, what does not happen, what the user must do, and what to do next. 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and the schema coverage is 100%, so the empty schema already communicates there are no inputs. The description reinforces this by framing the tool as a simple action trigger rather than a parameterized operation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Start authenticating this machine with the remote device cloud provider.' It clearly differentiates this login/setup tool from the UI-interaction and remote-device siblings by naming the specific commands that depend on it.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to call this tool: once before mobile_list_remote_devices or mobile_allocate_remote_device, and after those fail with an authentication error. It also gives a firm exclusion: never call speculatively, only after the user explicitly asks to use remote/cloud devices.
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 ScreenB
Long press on the screen at given x,y coordinates. If long pressing on an element, use the list_elements_on_screen tool to find the coordinates.
| Name | Required | Description | Default |
|---|---|---|---|
| x | Yes | The x coordinate to long press on the screen, in pixels | |
| y | Yes | The y coordinate to long press on the screen, in pixels | |
| device | Yes | The device identifier to use. Use mobile_list_available_devices to find which devices are available to you. | |
| duration | No | Duration of the long press in milliseconds. Defaults to 500ms. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate the tool is not read-only and not destructive, and openWorldHint is true. The description adds no behavioral context beyond that, such as potential effects like triggering a context menu, whether the press is injected as a system-level gesture, or what happens if the coordinates are invalid.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences with no filler. The main action is front-loaded, and the second sentence provides a directly useful coordinate-discovery tip. Every word contributes.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple coordinate-based gesture tool, the description alongside the full schema is nearly sufficient. It lacks an explicit statement about coordinate origin or what visual/behavioral feedback the user will see, but neither is essential for correctly invoking the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already explains x, y, device, and duration in sufficient detail. The description reinforces using list_elements_on_screen for coordinates but does not add meaningful parameter semantics beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action and resource: 'Long press on the screen at given x,y coordinates.' This clearly conveys what the tool does. However, it doesn't explicitly distinguish itself from similar sibling gestures like mobile_click_on_screen_at_coordinates or mobile_double_tap_on_screen beyond the gesture name itself.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description offers one concrete usage hint: 'If long pressing on an element, use the list_elements_on_screen tool to find the coordinates.' This helps with coordinate lookup, but it doesn't say when to prefer long press over alternatives like click or double tap, or when long press would be inappropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mobile_open_urlOpen URLB
Open a URL in browser on device
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | The URL to open | |
| device | Yes | The device identifier to use. Use mobile_list_available_devices to find which devices are available to you. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already disclose that the tool is not read-only and has open-world effects, and the description aligns with that. It adds minimal context beyond the annotations — no mention of which browser is used, whether it navigates away from the current app state, or failure conditions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single eight-word sentence that front-loads the verb and object with zero filler. Every word earns its place, making it a model of conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a low-complexity two-parameter action, the fully documented schema plus side-effect annotations make the definition nearly complete. Remaining gaps are minor: unspecified return behavior (no output schema) and which browser is selected as the target.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the device parameter's schema description already points to mobile_list_available_devices, which is strong guidance. The tool description adds no parameter-specific detail, 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.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (open), resource (URL), and target (browser on device), which distinguishes it from siblings like mobile_launch_app (apps) and mobile_press_button (UI interaction). Slightly generic phrasing, but unambiguous about the action it performs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides no guidance on when to use this tool versus alternatives. Nothing tells the agent to prefer this over launching a browser via mobile_launch_app, or whether a browser must already be installed on the target device.
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
| Name | Required | Description | Default |
|---|---|---|---|
| button | Yes | The 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) | |
| device | Yes | The device identifier to use. Use mobile_list_available_devices to find which devices are available to you. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false, so the operation may have side effects, but the description adds no behavioral context. It does not mention that pressing HOME, BACK, or VOLUME buttons can change device state or navigation. No contradiction exists, but no value is added 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single short sentence with no wasted words. It is concise and front-loads the core action, though it is perhaps too terse to provide useful disambiguation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 full schema coverage and annotations, the description is minimally viable. However, it leaves a gap around the hardware-button semantics and when to use it relative to screen-click tools, so it is not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 lists all supported values and device gives lookup guidance. The description itself adds no parameter-level meaning, so it meets the baseline for fully documented parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear action and resource: 'Press a button on device.' It is not fully tautological, but it does not explicitly say it handles hardware/system buttons rather than on-screen elements, so it lacks sibling differentiation from mobile_click_on_screen_at_coordinates.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 mobile_click_on_screen_at_coordinates or mobile_type_keys. The supported button list in the schema hints at its purpose, but the description itself provides no usage context or exclusions.
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 DeviceADestructive
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.
| Name | Required | Description | Default |
|---|---|---|---|
| device | Yes | The device identifier to release back to the remote fleet |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true and readOnlyHint=false, but the description adds critical details: state loss (apps, files, changes), reallocation delays, and the possibility of a different physical unit. It also warns about the cost of releasing prematurely. This substantially enhances transparency beyond the structured annotations, making the operation's consequences clear.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Concise, efficient three-sentence description. The purpose is front-loaded, followed by critical consequences, then usage guidance. No redundant information; every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter tool with destructive side effects and a clear counterpart, the description covers purpose, usage timing, consequences, and the relationship to allocation. An agent has everything needed to invoke and interpret the tool correctly, given the annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already provides a description for the 'device' parameter (100% coverage), so baseline is 3. The description adds meaning by specifying that the device must have been 'previously reserved with mobile_allocate_remote_device', which clarifies the expected source of the identifier. This adds value beyond the schema, justifying a 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Release'), the 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 directly distinguishes from the sibling mobile_allocate_remote_device by referencing it explicitly, 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit guidance on when to use: 'Only release once the whole task is finished' and when not to: 'if there is more work to do on the same device shortly, keep holding it rather than releasing and reallocating.' This goes beyond typical usage hints and gives clear conditions, making it easy for an agent to decide correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mobile_save_screenshotSave ScreenshotB
Save a screenshot of the mobile device to a file
| Name | Required | Description | Default |
|---|---|---|---|
| device | Yes | The device identifier to use. Use mobile_list_available_devices to find which devices are available to you. | |
| saveTo | Yes | The path to save the screenshot to. Filename must end with .png, .jpg, or .jpeg |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=false, so the write behavior is already implied. The description adds only that the output is 'to a file', which is also reflected in the saveTo parameter. It does not disclose overwrite behavior, required permissions, or side effects 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence with no redundant or unnecessary wording. It is front-loaded with the action and target, making it easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 strong schema coverage, the description is mostly adequate. However, it misses an opportunity to clarify when to use save versus take_screenshot, and the phrase 'to a file' leaves ambiguous whether the path is on the device or the host. These gaps prevent full contextual completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%; both device and saveTo have clear descriptions, including how to discover devices and the required filename extensions. The tool description itself adds no additional parameter meaning, so the baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('save'), a resource ('screenshot of the mobile device'), and a destination ('to a file'). This clearly communicates the core operation, though it does not explicitly distinguish itself from the closely related sibling mobile_take_screenshot.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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. Given that mobile_take_screenshot is a sibling, the absence of any comparison or selection criteria leaves the agent to infer the distinction from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mobile_set_orientationSet OrientationB
Change the screen orientation of the device
| Name | Required | Description | Default |
|---|---|---|---|
| device | Yes | The device identifier to use. Use mobile_list_available_devices to find which devices are available to you. | |
| orientation | Yes | The desired orientation |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate this is not read-only (readOnlyHint=false), and the description merely restates that mutation without adding behavioral context such as effects on the current app or whether the change persists. It is consistent with the annotations but adds no extra transparency beyond them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single clear sentence with no filler. Every word contributes to conveying the tool's action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter setter with full schema coverage, the description is sufficient to call the tool correctly. It does not describe return values, but this is minor for a state-changing action and no output schema exists.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both parameters documented, including the enum for orientation and device discovery guidance in the schema. The description adds no parameter semantics beyond what the schema already provides, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Change') and resource ('screen orientation of the device'), clearly identifying the action. The verb differentiates it from the sibling mobile_get_orientation without needing to name the sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided about when this tool should be used instead of alternatives such as mobile_get_orientation. The description states the action but gives no context, exclusions, or preconditions, leaving the agent to infer usage 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_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.
| Name | Required | Description | Default |
|---|---|---|---|
| device | Yes | The device identifier to use. Use mobile_list_available_devices to find which devices are available to you. | |
| output | No | The file path to save the recording to. Filename must end with .mp4. If not provided, a temporary path will be used. | |
| timeLimit | No | Maximum recording duration in seconds. The recording will stop automatically after this time. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the key behavioral trait that the recording runs in the background until explicitly stopped, and that a save path is returned. Annotations already indicate mutability (readOnlyHint=false), and the description adds useful stateful context without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences long, front-loads the main action, and every sentence adds necessary information: the action, the background lifecycle, and the return value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description, combined with the fully covered schema and annotations, gives the agent everything needed to invoke and manage the recording. It explains how the recording is stopped and what the tool returns, with no missing operational details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with all three parameters already well documented. The description adds value by stating that the result is a saved path, but it does not need to restate parameter meanings.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb and resource: starting screen recording on a mobile device. It also distinguishes itself from the closely related mobile_stop_screen_recording by explicitly naming that sibling as the stop counterpart.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear operational context: recording runs in the background and is stopped with mobile_stop_screen_recording, which tells the agent how to pair these calls. It does not explicitly discuss alternatives like screenshots, but the lifecycle guidance is sufficient for correct use.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| device | Yes | The device identifier to use. Use mobile_list_available_devices to find which devices are available to you. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds meaningful behavioral information beyond the annotations: it discloses the return values (file path, size, approximate duration). readOnlyHint=false is consistent with a state-changing stop action, and the description further clarifies that the result is a saved recording artifact rather than merely a confirmation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one efficient sentence that front-loads the core action and then lists the key outputs. There is no filler or redundant restating of the title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter tool, the description covers the action, the precondition ('active'), and the return values. It could mention failure behavior when no recording is active, but this is a minor gap given the simplicity and clarity of the overall definition.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for the single device parameter, and the schema already provides helpful guidance on discovering available devices via mobile_list_available_devices. The tool description does not add additional parameter semantics, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Stop'), the target resource ('an active screen recording on a mobile device'), and the expected output. It distinguishes itself from the sibling mobile_start_screen_recording by saying 'Stop' and 'active'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description tells the agent this is for ending a currently active screen recording, which makes the usage context clear. It does not explicitly mention that a recording must have been started first, but 'active' implies that precondition strongly enough.
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
| Name | Required | Description | Default |
|---|---|---|---|
| x | No | The x coordinate to start the swipe from, in pixels. If not provided, uses center of screen | |
| y | No | The y coordinate to start the swipe from, in pixels. If not provided, uses center of screen | |
| device | Yes | The device identifier to use. Use mobile_list_available_devices to find which devices are available to you. | |
| distance | No | The distance to swipe in pixels. Defaults to 400 pixels for iOS or 30% of screen dimension for Android | |
| direction | Yes | The direction to swipe |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description merely restates the action implied by the title and adds no behavioral context beyond what annotations already provide. Annotations indicate readOnlyHint=false and destructiveHint=false, but the description does not disclose side effects, motion, or platform-specific behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no filler, and the core action is front-loaded. However, it is nearly identical to the title and the available space could have been used more valuably.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The schema fully documents all five parameters, including defaults and device discovery, so the parameter context is complete. Still, the description lacks behavioral or usage context beyond the action, leaving the agent to infer the effects and appropriate use of the swipe gesture.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the parameters are already well-documented with details like defaults and device discovery. The description itself adds no parameter meaning, but the schema carries the full burden appropriately.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Swipe') and resource ('the screen'), which clearly distinguishes it from sibling click, tap, and press tools. It is essentially a rephrasing of the title, but the action is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided about when to use a swipe versus alternatives like mobile_click_on_screen_at_coordinates or mobile_long_press_on_screen_at_coordinates. There is no mention of scroll semantics, gestures, or any condition favoring this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mobile_take_screenshotTake ScreenshotARead-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. Do not cache this result.
| Name | Required | Description | Default |
|---|---|---|---|
| device | Yes | The device identifier to use. Use mobile_list_available_devices to find which devices are available to you. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, covering the safe-read and dynamic-world aspects. The description adds value beyond annotations by warning 'Do not cache this result,' which complements the openWorldHint and is non-obvious. It also clarifies that a screenshot is a visual observation, not an interaction mechanism, which is a meaningful behavioral trait beyond what annotations express.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences with no filler. The primary purpose is front-loaded, followed by a relevant usage exclusion and a concise caching directive. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with one well-documented parameter, clear annotations (readOnlyHint, openWorldHint), and no output schema, the description covers the essential context: what it does, when to use it, when not to, and a handling caveat. The only minor gap is that it doesn't explicitly describe the return format, but this is a minor omission for such a simple, self-evident tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already fully documents the single 'device' parameter, including pointing to mobile_list_available_devices. The description itself adds no parameter-specific meaning beyond what the schema provides. Baseline 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.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Take a screenshot') and resource ('the mobile device'), and clarifies its purpose: 'Use this to understand what's on screen.' It also distinguishes itself from the sibling mobile_list_elements_on_screen by noting that if the agent needs to press an element available through the view hierarchy, it must list elements instead. This makes the tool's role unambiguous relative to its siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit when-to-use guidance ('Use this to understand what's on screen') and explicit when-not-to-use guidance with a named alternative ('if you need to press an element that is available through view hierarchy then you must list elements on screen instead'). It also adds a direct operational instruction: 'Do not cache this result.' This fully orients an agent on when to invoke this tool versus alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mobile_terminate_appTerminate AppC
Stop and terminate an app on mobile device
| Name | Required | Description | Default |
|---|---|---|---|
| device | Yes | The device identifier to use. Use mobile_list_available_devices to find which devices are available to you. | |
| packageName | Yes | The package name of the app to terminate |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the operation as non-read-only and non-destructive, but the description adds little beyond the basic 'terminate' behavior. It does not disclose details such as whether the app is force-stopped, whether background processes are killed, or whether unsaved state is discarded.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately short for a simple tool. The phrase 'Stop and terminate' is slightly redundant, but the sentence is front-loaded and contains no unnecessary filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter action with a complete schema and no output schema, the description is minimally viable. However, it omits any note about side effects, success behavior, or relation to the app lifecycle, so an agent gets only the most basic context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the parameters device and packageName are fully documented there. The tool description adds no additional semantic detail, so it stays at the baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('terminate an app') and resource ('app on mobile device'). It is distinguishable from siblings like mobile_uninstall_app and mobile_launch_app by the verb, though it does not explicitly name or contrast those alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 mobile_uninstall_app or mobile_launch_app. The description says only what the tool does, not when it should be selected.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mobile_type_keysType TextA
Type text into the focused element
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | The text to type | |
| device | Yes | The device identifier to use. Use mobile_list_available_devices to find which devices are available to you. | |
| submit | Yes | Whether to submit the text. If true, the text will be submitted as if the user pressed the enter key. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=false and destructiveHint=false, so the description is not required to restate those. It adds the useful context that input targets the focused element, but it does not disclose whether text appends to or replaces existing content, whether special keys are supported, or what happens after submission. These are moderate gaps but not contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that communicates the essential action and target without any filler. Every word earns its place, and it is appropriately sized for a simple input tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with fully documented parameters and no output schema, the description is mostly complete: it states the action and the target element. It could be slightly richer by noting that the element must already be focused, but that is already implied by the phrase 'focused element'.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with all three parameters (text, device, submit) clearly described in the input schema. The description adds no additional parameter-level detail, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Type') and a clear resource ('the focused element'), making the tool's function immediately obvious. It is easily distinguished from sibling tools like mobile_click_on_screen_at_coordinates or mobile_press_button because it specifically handles text input.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool should be used when text needs to be entered into an already-focused element, but it does not explicitly state when to use it versus alternatives or mention any prerequisites beyond focus. There is no exclusion guidance or comparison to other input-related siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mobile_uninstall_appUninstall AppBDestructive
Uninstall an app from mobile device
| Name | Required | Description | Default |
|---|---|---|---|
| device | Yes | The device identifier to use. Use mobile_list_available_devices to find which devices are available to you. | |
| bundle_id | Yes | Bundle identifier (iOS) or package name (Android) of the app to be uninstalled |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, but the description adds no behavioral context beyond that. It does not mention that uninstallation is typically permanent, may affect app data, or requires the app to exist on the device. No contradiction exists, but the description contributes nothing beyond the structured annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single clear, front-loaded sentence with no filler. It is concise, though slightly redundant ('from mobile device' is implied by the tool's context), but the brevity is appropriate for such a straightforward action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The definition is minimally viable for a simple two-parameter destructive operation, with the schema covering argument semantics and annotations covering safety. However, it lacks any description of expected outcomes, return behavior, or prerequisite conditions, leaving some ambiguity for an agent about what happens after invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both 'device' and 'bundle_id' already well-documented, including how to find available devices. The description itself adds no parameter-level meaning, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Uninstall') and resource ('an app from mobile device'), making the tool's function immediately clear. It is distinct from sibling tools like mobile_install_app, mobile_launch_app, and mobile_terminate_app because only this one performs uninstallation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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, no mention of prerequisites (e.g., app must be installed), and no exclusion criteria. The agent must infer usage entirely from the tool name and sibling list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Most tools map to clearly distinct actions and objects, and the descriptions generally resolve potential confusion. However, mobile_take_screenshot and mobile_save_screenshot have overlapping purposes, and mobile_press_button vs. mobile_click_on_screen_at_coordinates could be misread without careful attention.
All tools share a consistent mobile_ prefix and mostly follow a verb_noun pattern, making the set predictable. Minor deviations exist with longer prepositional names like mobile_click_on_screen_at_coordinates and mobile_long_press_on_screen_at_coordinates, but they do not break readability.
27 tools is on the heavy side for a typical MCP server, but the broad mobile automation scope—UI interaction, app lifecycle, screenshots/recording, crash reporting, and remote device management—largely justifies the count. Still, the surface feels larger than ideal and could be tightened.
The server covers the core mobile automation lifecycle well: app install/uninstall/launch/terminate, screen interaction, navigation, screenshots, recording, and crash retrieval. Notable gaps include file push/pull, device health/battery info, and an explicit wait-for-element/condition tool, but these are workable around.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
An authenticated remote MCP server for user-owned devices and one-shot capability invocation.
Drive real Android & iOS devices and web browsers from natural language for mobile + web QA. 290+ tools across device control, app management, automation sessions, browser automation, and flow recording / replay. Bearer-auth — get a token at robotactions.com → Profile → API Tokens.
Remote MCP for Android CLI agent build gate, structured receipts, audit logs, and reviewer-ready evi
Melaya is a remote MCP server. It gives an assistant hands on your own Android phone and browser: it reads the screen through the accessibility tree, then taps, types and navigates inside the apps and sites you allow-list, with no per-app API. It also builds, schedules and runs agent pipelines across 6k+ connected tools. OAuth 2.1, nothing to install.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables MCP-compatible agents to control an Android device over the network via ADB, providing tools for shell commands, screen capture, UI inspection, file operations, and input simulation.13MIT
- FlicenseNot gradedqualityDmaintenanceA powerful MCP server that provides comprehensive Android device automation capabilities through ADB, enabling AI agents to interact with Android devices for testing, automation, and device control tasks.1
- AlicenseAqualityCmaintenanceDrive an Android phone over ADB and expose it to AI agents via MCP, enabling natural language-driven interaction for native app testing.13MIT
- AlicenseBqualityAmaintenanceMCP server for Android emulator automation via ADB.172714MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/PaboluManohar/DevAutoFlow-MCP'
If you have feedback or need assistance with the MCP directory API, please join our Discord server