Android Mobile MCP Server
This server provides tools for automating and controlling Android mobile devices (and, based on the schema, some iOS/remote capabilities despite the README's Android-only claim).
List local available devices (mobile_list_available_devices)
Login to a remote cloud provider and list/allocate/release remote devices (mobile_login_to_cloud_provider, mobile_list_remote_devices, mobile_allocate_remote_device, mobile_release_remote_device)
Manage apps: list, launch, terminate, install, uninstall (mobile_list_apps, mobile_launch_app, mobile_terminate_app, mobile_install_app, mobile_uninstall_app)
Interact with the screen: get screen size, click, double-tap, long-press, list elements, swipe, type text, take/save screenshots (mobile_get_screen_size, mobile_click_on_screen_at_coordinates, mobile_double_tap_on_screen, mobile_long_press_on_screen_at_coordinates, mobile_list_elements_on_screen, mobile_swipe_on_screen, mobile_type_keys, mobile_take_screenshot, mobile_save_screenshot)
Control device buttons and orientation (mobile_press_button, mobile_set_orientation, mobile_get_orientation)
Open URLs (mobile_open_url)
Record the screen (mobile_start_screen_recording, mobile_stop_screen_recording)
Access crash reports (mobile_list_crashes, mobile_get_crash)
Provides tools for Android device and emulator automation via adb, such as listing installed apps on a connected Android device.
Click on "Deploy 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: scrcpy-agent
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
On Linux, expose the host ADB daemon on TCP port 5037 before starting the container:
adb kill-server
adb -a start-server
adb devicesThe -a flag is required for Docker clients. Without it, ADB listens only on the host's local Unix socket and container commands fail with Connection refused.
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?
Annotations already indicate non-readonly and non-destructive, but the description adds substantial context: the device is a shared and billed resource, releasing wipes state, and allocation may block. It also warns against releasing between steps. This goes well beyond the structured annotations and is consistent with them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every sentence earns its place: core purpose, usage constraints, prerequisites, filtering advice, and release instructions. It is front-loaded with the essential action and maintains a logical flow without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (6 parameters, lifecycle requirements, no output schema), the description covers the critical context: reservation semantics, billing, authentication, filtering, and release. It doesn't specify the exact format of the returned device identifier, but that is implied and not essential for correct invocation. Overall it is nearly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description mentions that users should list available names/versions before filtering, which reinforces the name and version parameters, but it doesn't add new semantic detail beyond what the schema already documents (prefixes, comparison operators, wait semantics). No significant compensation needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb ('Reserve'), a specific resource ('physical device from the remote cloud fleet'), and a clear outcome ('returning a device identifier'). It also explicitly contrasts with local devices and names the sibling tools that list and release remote devices, making differentiation immediate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit when-to-use ('only call this after the user has explicitly asked to use a remote/cloud device'), when-not-to-use ('never speculatively or as a fallback'), and names alternatives like mobile_list_remote_devices and mobile_release_remote_device. It also states a prerequisite (mobile_login_to_cloud_provider) and error-recovery behavior.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mobile_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, covering the safety profile. The description adds the 'full content' aspect and the retrieval-by-ID mechanism, providing context beyond what annotations offer. It doesn't describe the exact return format, but the annotations lower the bar for safety-related disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences with no fluff. The primary purpose is front-loaded, and the usage hint is appended directly. Every sentence serves a distinct purpose—stating what the tool does and how to obtain inputs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple fetch-by-ID tool, the description is complete: it tells how to find IDs and the annotations cover read-only behavior. The lack of an output schema is not a major gap because the description's 'full content' gives a general expectation. It could benefit from a hint about the output structure, but it's adequate given the tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both 'id' and 'device' are already documented in the schema. The description adds no extra detail about parameter formats or constraints; it only restates that the tool works by ID, which is already implicit. Thus, baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Get'), resource ('crash report'), and scope ('by its ID'). It also distinguishes itself from siblings by explicitly pointing to mobile_list_crashes for finding IDs, which clarifies its role in the workflow.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells the agent to use mobile_list_crashes to find available crash IDs, giving a clear alternative and prerequisite. This is direct when-to-use guidance that leaves no ambiguity about how to obtain valid IDs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mobile_get_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 readOnlyHint and openWorldHint annotations already disclose that this is a read-only, closed-world operation. The description adds minimal context beyond that—only that it retrieves orientation. It does not describe the return format (e.g., portrait/landscape or degrees) or any edge cases. No contradiction exists between description and annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with zero filler. It states exactly what the tool does without unnecessary detail, making it easy for an agent to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with one parameter and full schema coverage, the description is largely sufficient. The only gap is that it does not specify what the returned orientation values look like (e.g., 'portrait' vs 'landscape'), which an agent might need to interpret the result. Given the lack of an output schema, a brief note on return format would improve completeness, but the tool's simplicity keeps this from being a critical omission.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the 'device' parameter is fully documented in the schema, including a pointer to mobile_list_available_devices. The description adds no additional parameter information. Baseline of 3 is appropriate since the schema carries the semantic weight.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Get') and the resource ('current screen orientation of the device'). It is specific enough to distinguish from the sibling mobile_set_orientation, though it does not explicitly call out that distinction. It is not tautological and communicates the core purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided about when to use this tool versus alternatives. It does not mention that it is read-only (though readOnlyHint annotation covers that), nor does it reference the related setter or other device info tools. The device parameter description points to a sibling for finding devices, but that is about parameter selection, not usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mobile_get_screen_sizeGet Screen 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?
Annotations already declare readOnlyHint=true, so the description need not restate safety. It adds the unit 'pixels', which is useful context, but does not disclose other traits like return format or potential side effects. With annotations covering safety, a 3 is appropriate for this simple read-only operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence with zero filler, front-loaded with the core purpose. Every word adds value and the unit specification is efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter, read-only getter with full schema coverage and annotations, the description is nearly complete. It lacks explicit mention of the return structure (e.g., width and height), but 'screen size in pixels' reasonably implies dimensions, making it adequate for an agent to call correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%: the 'device' parameter is fully described in the schema, including a pointer to mobile_list_available_devices. The tool description adds no parameter-specific information beyond the schema, so baseline 3 is warranted.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Get' and the resource 'screen size of the mobile device' with the unit 'pixels'. It is specific and distinguishable from all sibling tools, none of which address screen size.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description is straightforward and implies when to use it (whenever the screen size is needed). While it does not explicitly name alternatives, no sibling tool competes for the same purpose, so the usage context is clear without exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mobile_install_appInstall AppC
Install an app on mobile device
| 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?
Annotations (readOnlyHint=false, destructiveHint=false) already indicate this is a mutating operation. The description adds no behavioral details beyond that – it doesn't mention potential side effects (e.g., overwriting existing apps), required permissions, or time expectations. With no annotation coverage on specifics, the description carries the burden and fails to disclose anything extra.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence with no filler. It is front-loaded with the core action. However, it is perhaps too brief, missing useful context, but for conciseness alone it earns a 4.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no output schema and no usage guidance, the description is incomplete. It doesn't explain the installation flow (e.g., need to allocate a device first), potential impacts, or how to verify success. The schema covers parameters, but broader context is missing, making this inadequate for an agent navigating 30+ siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% – both parameters have thorough descriptions (path explains platform-specific file types; device references mobile_list_available_devices). The tool description adds nothing beyond the schema, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb and resource: 'Install an app on mobile device'. It distinguishes from siblings like mobile_launch_app (launch) and mobile_uninstall_app (uninstall) by the action word, though it doesn't explicitly name them. The purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided about when to use this tool versus alternatives. It doesn't mention prerequisites like device availability or that installation is a prerequisite for launching. The description offers no when/when-not context, leaving the agent to infer from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mobile_launch_appLaunch AppA
Launch an app on mobile device. Use this to open a specific app. You can find the package name of the app by calling list_apps_on_device.
| 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 declare readOnlyHint=false and destructiveHint=false, so the safety profile is already covered. The description adds no behavioral details beyond the launch action itself, such as foregrounding behavior or failure conditions. It does not contradict annotations, but it does not go beyond them in disclosing side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences with no filler. The primary action is front-loaded, and the additional guidance about finding the package name is placed efficiently. Every word contributes to clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple launch tool with three parameters and no output schema, the description covers the purpose, the precondition for packageName, and the device parameter is covered by the schema. It does not mention error handling or edge cases, but that is not critical for this type of tool. It is sufficiently complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all parameters are described. The description adds a useful hint for the packageName parameter by referencing list_apps_on_device, which helps the agent obtain the correct value. This goes beyond the schema's basic description, adding practical guidance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Launch an app on mobile device') with a specific verb and resource. It distinguishes this from sibling tools like install, terminate, or open URL by its explicit purpose. The mention of finding package names via list_apps further clarifies its scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description says 'Use this to open a specific app', which gives a clear use case. It also provides a precondition (find package name) but does not explicitly exclude alternatives like mobile_open_url or mobile_terminate_app. It could be more explicit about when not to use, but the guidance is adequate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mobile_list_appsList 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 declare readOnlyHint=true, so the read-only nature is covered. The description adds no extra behavioral context (e.g., performance, permission requirements, or output format). It simply states the purpose, which is already clear from the name and annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that fully captures the tool's function. There is no extraneous information, and it is front-loaded with the action and resource.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list operation with readOnlyHint, the description is sufficient. It does not specify the exact output format (e.g., package names vs. display names), but the tool's simplicity and the absence of an output schema make this a minor gap. The agent can infer that the result is a list of installed apps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter 'device' has a schema description that explains how to find the device identifier (using mobile_list_available_devices). Schema coverage is 100%, so the description does not need to add parameter details. It adds no additional semantic value beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific action ('List') and resource ('all the installed apps on the device'). It is distinct from sibling tools that deal with devices or app lifecycle, and there is no ambiguity about what it does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage by stating what it lists, but it does not explicitly mention when to use this tool versus alternatives like mobile_list_remote_devices or mobile_get_foreground_app. The parameter description references mobile_list_available_devices for finding devices, but that is not a usage guideline for the tool itself.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mobile_list_available_devicesList 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 declare readOnlyHint=true, so the read-only nature is covered. The description adds useful behavioral context beyond that: these devices are 'local devices already connected to this machine, ready to use immediately at no cost.' This informs the agent about the operational state and cost implications, which is not in the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise yet comprehensive, front-loading the core purpose ('List all available devices') before elaborating on scope and the alternative. Every sentence adds value, and the structure is logical, making it easy for an agent to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has no parameters, no output schema, and readOnlyHint annotation, the description provides all necessary context: what devices are listed, their local nature, cost, and the alternative for remote devices. Nothing an agent needs to correctly invoke or interpret the result is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the input schema is fully covered (100% coverage trivially). The description does not need to elaborate on parameters, and with no parameters to describe, a baseline of 4 is appropriate per the scoring rules.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('List') and the resource ('all available devices'), and specifies the exact scope: physical devices, simulators/emulators, Android and iOS. It also explicitly contrasts with the remote fleet alternative, making the tool's purpose unambiguous and distinct from siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use this tool versus an alternative: 'for devices from the shared remote cloud fleet, use mobile_list_remote_devices instead.' This directly addresses selection between the two listing tools, which is the primary alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mobile_list_crashesList Crash ReportsARead-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, covering the safety profile. The description does not contradict these and adds minimal behavioral context beyond the listing action. With annotations present, the bar is lower, but the description offers no extra behavioral detail such as what the returned list contains.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single concise sentence that front-loads the action and resource. No filler or redundant detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list tool with one fully documented parameter and annotations covering safety, the description is largely sufficient. However, it omits any detail about the output format or how crash reports are identified, which could be useful but is not critical given the tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single parameter 'device' is fully documented in the schema. The description references 'on the device' which aligns with the parameter but adds no additional semantics beyond what the schema provides. Baseline 3 is appropriate given full schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'List' and the resource 'crash reports', and scopes it to the device. It distinguishes from siblings like mobile_get_crash (which implies fetching a single crash) by using 'List' and 'available on the device'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies this tool is for listing crash reports, but it does not explicitly mention when to use it over alternatives like mobile_get_crash. No exclusions or routing guidance is provided, leaving the agent to infer from the name and context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mobile_list_elements_on_screenList Screen 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 mark readOnlyHint=true and openWorldHint=true, so the description adds value by disclosing the authentication prerequisite and the billing/limited-resource nature of remote reservations. It doesn't contradict annotations and provides context beyond them, though it omits details about the exact return format or pagination, which are less critical here.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three well-structured sentences: the core action is front-loaded, the sibling distinction is clear, and the prerequisite is stated last. Every sentence earns its place with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no parameters and no output schema, the description covers the essential context: what it lists, how it differs from the local alternative, and what must be done before calling it. Nothing an agent needs to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and the schema is effectively fully covered (vacuously). The description doesn't need to explain parameters since none exist, so the baseline of 4 for no-parameter tools applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'List the catalog of device models (make, platform, OS version) available to reserve from the remote cloud device fleet.' It clearly differentiates from mobile_list_available_devices by explaining the local vs remote distinction, leaving no ambiguity about which tool to pick.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly contrasts with mobile_list_available_devices, explaining when each is appropriate, and states the prerequisite to call mobile_login_to_cloud_provider first, including a retry strategy on authentication errors. This is direct, actionable guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mobile_login_to_cloud_providerLogin to Cloud ProviderA
Start authenticating this machine with the remote device cloud provider. This is required once before mobile_list_remote_devices or mobile_allocate_remote_device will work; if either of those fails with an authentication error, call this tool and then retry. This starts a browser-based device-code login and returns quickly with a URL and a one-time code - it does NOT wait for the login to complete. Show the URL and code to the user verbatim and ask them to open the URL and enter the code in their own browser. The login keeps running in the background after this tool returns; once the user confirms they've completed it, retry the remote devices tool that originally failed. Only call this after the user has explicitly asked to connect to, log into, or use remote/cloud devices - never call it speculatively, since it interrupts the user to act in their browser.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses key behavioral traits beyond annotations: it is a browser-based device-code login, returns quickly with a URL and one-time code, does NOT wait for completion, runs in the background, and interrupts the user. This aligns with openWorldHint=true and readOnlyHint=false, adding crucial context about the asynchronous, user-interrupting nature.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is thorough and well-structured, with the core purpose first and detailed usage instructions following. It is somewhat lengthy, but every sentence contributes essential context (async behavior, user interaction, retry logic) that an agent needs; no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no output schema and no params, the description fully explains the return behavior (URL and code), the required user action, the background execution, and the correct sequence with sibling tools. Nothing critical is missing for correct invocation and handling.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0 parameters, the schema is fully self-describing (coverage 100%), so the description need not elaborate on params. It does not add parameter-specific details, but the baseline of 4 applies because no params exist; no additional compensation is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Start authenticating this machine with the remote device cloud provider.' It identifies the specific verb (authenticating) and resource (cloud provider), and explicitly names the sibling tools that depend on it (mobile_list_remote_devices, mobile_allocate_remote_device), distinguishing it from them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit guidance: when to use (as a prerequisite for the two remote-device tools, if they fail with auth errors), when not to use (never speculatively, only after explicit user request), and names alternatives (the dependent tools). It also instructs on the retry flow after login completion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mobile_long_press_on_screen_at_coordinatesLong Press 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 URLA
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 indicate this is a mutating, non-destructive, open-world operation. The description adds the useful detail that the URL is opened 'in browser,' but does not disclose side effects like switching the foreground app or requiring the device to be unlocked.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single short sentence that is immediately understandable and front-loaded. There is no wasted text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter tool with fully documented schema and no output schema, the description is nearly complete. A note about expected behavior after opening the URL, such as switching to the browser app, would make it fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both 'url' and 'device' already documented. The description adds no parameter-specific detail beyond what the schema provides, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Open a URL'), the resource ('URL'), and the context ('in browser on device'). This clearly distinguishes it from siblings like mobile_launch_app, which launch apps rather than URLs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The use case is implied by the description: use this when a URL needs to be opened in a browser on a device. However, it does not explicitly state when to prefer this over alternatives such as mobile_launch_app or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mobile_press_buttonPress ButtonC
Press a button on device
| 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?
The description adds no behavioral context beyond what the annotations already state: readOnlyHint=false and destructiveHint=false. It does not mention platform restrictions, possible side effects of pressing device buttons, or that the action is a one-way command; there is no contradiction, but no extra disclosure either.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The sentence is short and front-loaded, but it does not earn its place because it merely restates the title with a generic 'on device.' It is under-specified rather than usefully concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Although the schema fully documents the two parameters, the description is not complete enough for tool selection among many interaction siblings, and there is no mention of return behavior or platform/device suitability. For a state-changing action with no output schema, the agent is left to infer consequences.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the button parameter already documents the supported button names and platform caveats. The description adds no new parameter meaning, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a verb ('press') and a resource ('button on device'), so it is not completely tautological, but it is vague: it does not say this is for hardware/navigation buttons rather than screen taps, and it adds little beyond the tool title. It also does not distinguish itself from siblings like mobile_click_on_screen_at_coordinates or mobile_type_keys.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given about when to use this tool instead of screen-interaction siblings, nor when it would not be appropriate (e.g., pressing a visible UI element vs a hardware button). The device parameter points to mobile_list_available_devices, but that addresses device selection, not tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mobile_release_remote_deviceRelease Remote 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 include destructiveHint=true, but the description goes beyond by detailing exactly what is lost ('apps installed, files pushed, and any other changes') and the consequences of reallocation ('may take time and could return a different physical unit'). This enriches the annotation without contradicting it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, front-loading the primary purpose and then delivering critical behavioral warnings. There is no fluff; every sentence contributes essential information for correct usage.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive remote-device action, the description covers the core aspects: what it does, the destructive side effects, and the optimal timing. It could mention error cases (e.g., releasing an unallocated device) but this is a minor omission given the annotations and schema already cover the basic contract. The lack of an output schema means return value explanation is unnecessary.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the parameter 'device' is described as 'The device identifier to release back to the remote fleet'. The tool description adds the contextual requirement that the device must be previously reserved, but this is implicit rather than explicitly tied to the parameter. Baseline of 3 is appropriate since the schema already documents the parameter fully.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Release'), a precise resource ('a device previously reserved with mobile_allocate_remote_device'), and the outcome ('back to the remote cloud fleet so it becomes available to others'). It explicitly names the complementary sibling tool, making the tool's role unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit when-to-use guidance: 'Only release once the whole task is finished' and advises against premature release ('keep holding it rather than releasing and reallocating'). It also notes that reallocation may be slow and yield a different physical unit, giving the agent a clear decision rule.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mobile_save_screenshotSave 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 OrientationA
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 declare readOnlyHint=false and destructiveHint=false, indicating a non-destructive mutation. The description says 'Change', which aligns with these annotations and adds no contradiction. However, it does not provide additional behavioral context such as side effects, timing, or device requirements beyond what the annotations imply. With annotations covering the safety profile, the description adds minimal extra value.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, succinct sentence that is easy to parse. It is not overly verbose, though it borders on being a slight restatement of the title. Still, it is appropriately sized for a simple tool with no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with only two well-documented parameters and no output schema, the description is adequate. The schema covers parameter semantics and the annotations cover safety. The description provides enough to understand the tool's purpose. One could argue it should mention that the change affects a physical device or simulator, but that is implied by the tool family and the device parameter guidance. Overall, the definition is sufficiently complete for an agent to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, meaning both parameters (device and orientation) are fully documented in the schema, including the orientation enum and the device instruction to list available devices. The description itself adds no parameter-specific information. Given the high schema coverage, a baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb ('Change') and resource ('screen orientation'), and it naturally distinguishes itself from the sibling mobile_get_orientation (which reads orientation). It is specific and immediately conveys the tool's core action.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It does not mention that it should be used when an orientation change is needed, nor does it note that mobile_get_orientation is the read counterpart. The device parameter's schema description points to mobile_list_available_devices, but that is in the schema, not the description. Thus, usage context is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mobile_start_screen_recordingStart Screen RecordingA
Start recording the screen of a mobile device. The recording runs in the background until stopped with mobile_stop_screen_recording. Returns the path where the recording will be saved.
| 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?
Annotations only declare non-read-only and non-destructive, so the description adds genuine behavioral substance: the recording persists in the background after the call returns and requires a companion stop call, and it discloses the return value (the save path). This meaningfully extends what an agent could infer from annotations alone, with no contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each earning its place: purpose, background-run behavior, and return value. The core action is front-loaded with zero filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the explicit mention of the returned save path is valuable, and the recording lifecycle is fully explained. The only minor gap is that the description's lifecycle narrative omits the timeLimit auto-stop behavior, though the input schema documents it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the schema already documents each parameter well, including the .mp4 filename requirement for output and the cross-reference to mobile_list_available_devices for device discovery. The description adds no parameter-level detail but does not need to, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb plus resource: 'Start recording the screen of a mobile device.' It distinguishes itself from its natural sibling mobile_stop_screen_recording by naming that tool explicitly, and 'recording' is semantically distinct from the sibling screenshot tools (mobile_take_screenshot, mobile_save_screenshot).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description frames the workflow clearly: the recording runs in the background until stopped with mobile_stop_screen_recording, alerting the agent that this is a stateful two-call operation and that a follow-up call is required. It does not, however, give explicit when-not guidance against the screenshot tools for still captures, leaving that distinction implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mobile_stop_screen_recordingStop Screen RecordingA
Stop an active screen recording on a mobile device. Returns the file path, size, and approximate duration of the recording.
| 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=false and destructiveHint=false, indicating this is a mutating but non-destructive operation. The description adds the return info but does not disclose potential error cases (e.g., if no recording is active) or side effects beyond stopping. It provides some value over annotations but not rich behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with zero filler. It front-loads the action and immediately states the return values. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple single-parameter tool with no output schema, the description is largely complete: it covers the action, the prerequisite (active recording implied), and the return payload. It omits explicit error handling but that is a minor gap given the low complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the device parameter is fully documented in the schema. The description does not add any additional meaning about the parameter beyond what the schema already provides, matching the baseline for high coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (stop), the resource (screen recording on a mobile device), and even mentions the return values (file path, size, duration). It is specific and easily distinguishable from sibling tools like mobile_start_screen_recording.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'active screen recording' implies it should be used only when a recording is in progress, and the sibling context makes the alternative (start_screen_recording) obvious. However, it does not explicitly state when not to use it or list alternatives, so it falls slightly short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mobile_swipe_on_screenSwipe ScreenC
Swipe on the screen
| 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 AppB
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 declare readOnlyHint=false, so the agent knows this is a mutation. The description adds no further behavioral context—it does not state whether the termination is a force-stop, whether app data is preserved, or what side effects occur. Given destructiveHint=false, the description could clarify the impact but remains silent. It does not contradict annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single short sentence, front-loaded with the action. It is concise and avoids unnecessary detail, but the phrase 'Stop and terminate' is slightly redundant—'terminate' alone would suffice. Still, it is efficient and free of fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple 2-parameter tool with no output schema and existing annotations, the description is minimally sufficient. However, it omits any mention of return values, success/failure indications, or side effects like app state loss. The lack of such context could leave an agent uncertain about outcomes, though the tool's simplicity reduces the gap. Overall, adequate but not rich.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both device and packageName are well documented in the schema. The description itself adds no additional meaning to the parameters. With high schema coverage, the baseline of 3 applies; the description does not compensate with extra context about parameter usage beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Stop and terminate') on a specific resource ('an app on mobile device'). It clearly distinguishes from siblings like launch, install, and uninstall, and the target is unambiguous via the packageName parameter. The redundancy of 'stop and terminate' is minor and does not obscure the purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It does not mention prerequisites (e.g., app must be installed) or suggest situations where termination is appropriate. The device parameter schema hints at discovering devices, but that is not usage guidance for the tool itself. No exclusions or comparisons to siblings are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mobile_type_keysType TextC
Type text into the focused element
| 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 mark readOnlyHint=false (a mutating operation), openWorldHint=true, and destructiveHint=false. The description adds only the 'focused element' precondition, which is mild useful context, but it does not disclose what happens on submit=true (side effects of submission), whether text replaces or appends existing content, or whether the device must be foregrounded. Since the annotations do not carry a safety profile that the description can lean on, more behavioral disclosure would be expected. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence, front-loaded, with zero filler. It gets the core purpose across efficiently. Slightly under-specified rather than overly verbose, but for a simple tool whose parameters are fully covered by the schema, this length is appropriate.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is relatively simple with 3 fully documented parameters and no output schema, so the burden is modest. The description conveys the core purpose and the focused-element precondition. However, it omits usage context (when to choose typing over button-press or tap), which an agent would need to select it correctly among the large sibling set. Adequate for basic invocation but with a clear guidance gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents all three parameters (text, device, submit), including the device hint to consult mobile_list_available_devices. The description adds nothing beyond the schema for parameters, so the baseline of 3 applies. The description's 'focused element' wording loosely relates to the text target but does not clarify the device or submit semantics beyond what the schema already states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Type text into the focused element.' This clearly identifies the action and target, and it distinguishes the tool from siblings like mobile_click_on_screen_at_coordinates, mobile_press_button, and mobile_swipe_on_screen, which perform different input actions. It is not a pure tautology of the title, since 'focused element' adds meaningful targeting context.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives. The description implies usage for entering text but never states prerequisites (e.g., the target element must first be focused, possibly via a click or tap tool), nor does it mention exclusions or route the agent toward sibling tools. An agent is left to infer when typing is the right action versus pressing a button or tapping coordinates.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mobile_uninstall_appUninstall AppADestructive
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, so the destructive nature is covered. The description adds nothing beyond that – no mention of irreversibility, prerequisites (e.g., app must be installed), or potential failure modes. With no additional behavioral context, the description does not go beyond what annotations already convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence with no redundant wording. It is front-loaded with the action and resource, making it immediately clear what the tool does.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter destructive operation, the description is minimally adequate. However, it does not mention what happens after uninstalling (e.g., success/failure response) or any caveats like whether the operation is reversible. Given the annotations cover destructiveness, the missing details are minor but still leave room for improvement.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema provides complete descriptions for both parameters (device and bundle_id), including how to find the device. Since schema_description_coverage is 100%, the description adds no extra parameter information. The baseline of 3 applies because the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Uninstall an app from mobile device' clearly identifies the specific action (uninstall) and resource (app on mobile device). It distinguishes from sibling tools like mobile_install_app and mobile_terminate_app, so an agent can easily tell what this does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The usage context is implied – you uninstall when you need to remove an app. However, there is no explicit guidance on when not to use it or alternatives to consider, such as mobile_terminate_app for stopping a running app. The schema's parameter hint about using mobile_list_available_devices is helpful but not usage guidance for this tool itself.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
27 tool updates
v0.0.1- First observed
mobile_allocate_remote_device - First observed
mobile_click_on_screen_at_coordinates - First observed
mobile_double_tap_on_screen - First observed
mobile_get_crash - First observed
mobile_get_orientation - First observed
mobile_get_screen_size - First observed
mobile_install_app - First observed
mobile_launch_app - First observed
mobile_list_apps - First observed
mobile_list_available_devices - First observed
mobile_list_crashes - First observed
mobile_list_elements_on_screen - First observed
mobile_list_remote_devices - First observed
mobile_login_to_cloud_provider - First observed
mobile_long_press_on_screen_at_coordinates - First observed
mobile_open_url - First observed
mobile_press_button - First observed
mobile_release_remote_device - First observed
mobile_save_screenshot - First observed
mobile_set_orientation - First observed
mobile_start_screen_recording - First observed
mobile_stop_screen_recording - First observed
mobile_swipe_on_screen - First observed
mobile_take_screenshot - First observed
mobile_terminate_app - First observed
mobile_type_keys - First observed
mobile_uninstall_app
TDQS
Scored across 27 tools
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
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.
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.
Drive real devices from your AI Coding tool. Embed a client SDK (Unity, Godot, Flutter, iOS/macOS, Android, React Native, Web) in your app, then capture screenshots, traverse the UI tree, inject taps and key events, and run automated test tasks on the physical device over a secure relay.
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.5 npmMIT
- AlicenseBqualityBmaintenanceLocal MCP server for observing and controlling an authorized Android device over USB using ADB and scrcpy, providing screen capture, UI automation, app inspection, logcat, and evidence recording.2921 npm2MIT
- AlicenseAqualityCmaintenanceEnables MCP clients to discover, pair with, and control Android phones running the FreeCode Agent app over a local network, including accessibility tree inspection, taps/swipes/text input, screenshots, and live screen streaming.8Apache 2.0
- FlicenseNot gradedqualityCmaintenanceEnables AI agents and test runners to control Android devices via local ADB, including listing devices, tapping, swiping, typing, sending system keys, launching apps, and dumping UI hierarchy. Communicates over MCP stdio without exposing network listeners.-