Mobile Next MCP Server
OfficialThe Mobile Next MCP Server enables scalable mobile automation and interaction with iOS and Android devices, simulators, and emulators through a platform-agnostic interface.
You can use this server to:
Manage applications: List installed apps, launch and terminate applications by package name
Screen interactions: Tap at coordinates, get screen size, list on-screen elements with their coordinates/labels, and perform swipe gestures
Device controls: Press physical buttons (Back, Home, Volume, etc.) and type text into focused elements
Browser operations: Open URLs in the device browser
Visual analysis: Capture screenshots for screen content analysis
Automation support: Facilitate LLM-driven workflows through structured accessibility data and visual analysis
Enables automation of native Android applications through accessibility snapshots or coordinate-based interactions, supporting both emulators and physical devices for testing, data-entry, and multi-step user journeys.
Provides platform-agnostic automation of iOS applications using accessibility trees and screenshots, allowing for scripted flows and form interactions on both simulators and physical devices without manual control.
Supports interaction with Samsung mobile devices for application testing and automation through structured accessibility snapshots or coordinate-based taps.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Mobile Next MCP Serverlaunch the Instagram app on my connected Android device"
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.
Mobile Next - MCP server for Mobile Development and Automation | iOS, Android, Simulator, Emulator, and Real Devices
This is a Model Context Protocol (MCP) server that enables scalable mobile automation, development through a platform-agnostic interface, eliminating the need for distinct iOS or Android knowledge. You can run it on emulators, simulators, and real devices (iOS and Android). This server allows Agents and LLMs to interact with native iOS/Android applications and devices through structured accessibility snapshots or coordinate-based taps based on screenshots.
Works with Claude Code, Codex, Gemini, GitHub Copilot, Antigravity — or any MCP-compatible client.
Run it against devices on your own machine, or against real iOS and Android devices in the cloud with Mobile Next Cloud — same tools, no local setup.
https://github.com/user-attachments/assets/bb084777-beb3-4930-ae6f-8d3fe694ddde
Main use cases
How we help to scale mobile automation:
📲 Native app automation (iOS and Android) for testing or data-entry scenarios.
📝 Scripted flows and form interactions without manually controlling simulators/emulators or real devices (iPhone, Samsung, Google Pixel etc)
🧭 Automating multi-step user journeys driven by an LLM
👆 General-purpose mobile application interaction for agent-based frameworks
🤖 Enables agent-to-agent communication for mobile automation usecases, data extraction
Main Features
🚀 Accessibility-first — fast and cheap: drives apps from the native accessibility tree (no vision model, no image tokens), falling back to screenshots + coordinates only when needed.
📱 One API, every target: the same tools work across iOS and Android — simulators, emulators, and real devices.
🧠 No platform expertise required: no XCUITest, no Espresso, no per-platform glue — describe the goal and the agent does it.
🧰 Full device control: taps, swipes, and gestures; app install/launch/terminate; screen recording; hardware buttons; deep links; orientation.
📊 Structured, deterministic output: reads real UI elements and extracts structured data, cutting the ambiguity of screenshot-only approaches.
🎯 Platform Support
Target | Supported | Setup |
iOS Simulator | ✅ | Xcode + a booted simulator ( |
iOS Real Device | ✅ | Device connected over USB and trusted |
Android Emulator | ✅ | Android SDK + running emulator ( |
Android Real Device | ✅ |
|
Related MCP server: Mobile Next MCP
🔧 Available MCP Tools
Device Management
mobile_list_available_devices- List all available devices (simulators, emulators, and real devices)mobile_get_screen_size- Get the screen size of the mobile device in pixelsmobile_get_orientation- Get the current screen orientation of the devicemobile_set_orientation- Change the screen orientation (portrait/landscape)mobile_set_location- Override the GPS location reported by the device, or clear the overridemobile_clipboard- Read or replace the device clipboard
Remote Devices (Mobile Next Cloud)
mobile_login_to_cloud_provider- Authenticate this machine with the cloud device provider (browser-based device-code login)mobile_list_remote_devices- List device models available to reserve from the cloud fleetmobile_allocate_remote_device- Reserve a physical cloud device for exclusive usemobile_release_remote_device- Release a reserved cloud device back to the fleet
App Management
mobile_list_apps- List all installed apps on the devicemobile_get_foreground_app- Get the app currently in the foregroundmobile_launch_app- Launch an app using its package namemobile_terminate_app- Stop and terminate a running appmobile_install_app- Install an app from file (.apk, .ipa, .app, .zip)mobile_uninstall_app- Uninstall an app using bundle ID or package name
Screen Interaction
mobile_take_screenshot- Take a screenshot to understand what's on screenmobile_save_screenshot- Save a screenshot to a filemobile_list_elements_on_screen- List UI elements with their coordinates and propertiesmobile_click_on_screen_at_coordinates- Click at specific x,y coordinatesmobile_double_tap_on_screen- Double-tap at specific coordinatesmobile_long_press_on_screen_at_coordinates- Long press at specific coordinatesmobile_swipe_on_screen- Swipe in any direction (up, down, left, right)mobile_start_screen_recording- Start recording the device screen to a video filemobile_stop_screen_recording- Stop the active screen recording and save the video
Input & Navigation
mobile_type_keys- Type text into focused elements with optional submitmobile_press_button- Press device buttons (HOME, BACK, VOLUME_UP/DOWN, ENTER, etc.)mobile_open_url- Open URLs in the device browser
Logs & Crash Reports
mobile_get_device_logs- Collect live device logs (logcat on Android, unified log on iOS), optionally saved to a filemobile_list_crashes- List crash reports available on the devicemobile_get_crash- Get the full content of a crash report by its ID
🏗️ Mobile MCP Architecture
📚 Wiki page
More details in our wiki page for setup, configuration and debugging related questions.
Prerequisites
What you will need to connect MCP with your agent and mobile devices:
node.js v20+
MCP supported foundational models or agents, like Claude MCP, OpenAI Agent SDK, Copilot Studio
Installation and configuration
Standard config works in most of the tools:
{
"mcpServers": {
"mobile-mcp": {
"command": "npx",
"args": ["-y", "@mobilenext/mobile-mcp@latest"]
}
}
}Add via the Amp VS Code extension settings screen or by updating your settings.json file:
"amp.mcpServers": {
"mobile-mcp": {
"command": "npx",
"args": [
"@mobilenext/mobile-mcp@latest"
]
}
}Amp CLI:
Run the following command in your terminal:
amp mcp add mobile-mcp -- npx @mobilenext/mobile-mcp@latestAntigravity doesn't have a CLI command to add MCP servers, so add it manually. Edit ~/.gemini/config/mcp_config.json and add:
{
"mcpServers": {
"mobile-mcp": {
"command": "npx",
"args": ["-y", "@mobilenext/mobile-mcp@latest"]
}
}
}To setup Cline, just add the json above to your MCP settings file.
Use the Claude Code CLI to add the Mobile MCP server:
claude mcp add mobile-mcp -- npx -y @mobilenext/mobile-mcp@latestFollow the MCP install guide, use json configuration above.
Use the Codex CLI to add the Mobile MCP server:
codex mcp add mobile-mcp npx "@mobilenext/mobile-mcp@latest"Alternatively, create or edit the configuration file ~/.codex/config.toml and add:
[mcp_servers.mobile-mcp]
command = "npx"
args = ["@mobilenext/mobile-mcp@latest"]For more information, see the Codex MCP documentation.
Use the Copilot CLI to interactively add the Mobile MCP server:
/mcp addYou can edit the configuration file ~/.copilot/mcp-config.json and add:
{
"mcpServers": {
"mobile-mcp": {
"type": "local",
"command": "npx",
"tools": [
"*"
],
"args": [
"@mobilenext/mobile-mcp@latest"
]
}
}
}For more information, see the Copilot CLI documentation.
Click the button to install:
Or install manually:
Go to Cursor Settings -> MCP -> Add new MCP Server. Name to your liking, use command type with the command npx -y @mobilenext/mobile-mcp@latest. You can also verify config or add command like arguments via clicking Edit.
Use the Gemini CLI to add the Mobile MCP server:
gemini mcp add mobile-mcp npx -y @mobilenext/mobile-mcp@latestClick the button to install:
Or install manually:
Go to Advanced settings -> Extensions -> Add custom extension. Name to your liking, use type STDIO, and set the command to npx -y @mobilenext/mobile-mcp@latest. Click "Add Extension".
Follow the MCP Servers documentation. For example in .kiro/settings/mcp.json:
{
"mcpServers": {
"mobile-mcp": {
"command": "npx",
"args": [
"@mobilenext/mobile-mcp@latest"
]
}
}
}Follow the MCP Servers documentation. For example in ~/.config/opencode/opencode.json:
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"mobile-mcp": {
"type": "local",
"command": [
"npx",
"@mobilenext/mobile-mcp@latest"
],
"enabled": true
}
}
}Open Windsurf settings, navigate to MCP servers, and add a new server using the command type with:
npx @mobilenext/mobile-mcp@latestOr add the standard config under mcpServers in your settings as shown above.
✅ Verify it works
Once the server is configured, ask your agent to list devices:
list available devices
You should get back your running simulators, emulators, and connected devices. If you do, Mobile MCP is wired up correctly. If the list is empty, make sure a simulator or emulator is running (see Prerequisites) — for more help, check the wiki.
☁️ Scale up, use a cloud device
Want to scale to hundreds of devices? Use Mobile MCP in your CI/CD pipeline?
In your Agent, prompt:
log in to mobile next cloud and then show me which remote devices are available to meSSE Server Mode
By default, Mobile MCP runs over stdio. To start an SSE server instead, use the --listen flag:
npx @mobilenext/mobile-mcp@latest --listen 3000This binds to localhost:3000. To bind to a specific interface:
npx @mobilenext/mobile-mcp@latest --listen 0.0.0.0:3000Then configure your MCP client to connect to http://<host>:3000/mcp.
Authorization
To require Bearer token authorization on the SSE server, set the MOBILEMCP_AUTH environment variable:
MOBILEMCP_AUTH=my-secret-token npx @mobilenext/mobile-mcp@latest --listen 3000When set, all requests must include the header Authorization: Bearer my-secret-token.
🛠️ How to Use
After adding the MCP server to your IDE/Client, you can instruct your AI assistant to use the available tools. For example, in Cursor's agent mode, you could use the prompts below to quickly validate, test and iterate on UI interactions, read information from screen, go through complex workflows. Be descriptive, straight to the point.
✨ Example Prompts
Workflows
You can specify detailed workflows in a single prompt, verify business logic, setup automations. You can go crazy:
Search for a video, comment, like and share it.
Find the video called " Beginner Recipe for Tonkotsu Ramen" by Way of
Ramen, click on like video, after liking write a comment " this was
delicious, will make it next Friday", share the video with the first
contact in your whatsapp list.Download a successful step counter app, register, setup workout and 5-star the app
Find and Download a free "Pomodoro" app that has more than 1k stars.
Launch the app, register with my email, after registration find how to
start a pomodoro timer. When the pomodoro timer started, go back to the
app store and rate the app 5 stars, and leave a comment how useful the
app is.Search in Substack, read, highlight, comment and save an article
Open Substack website, search for "Latest trends in AI automation 2025",
open the first article, highlight the section titled "Emerging AI trends",
and save article to reading list for later review, comment a random
paragraph summary.Reserve a workout class, set timer
Open ClassPass, search for yoga classes tomorrow morning within 2 miles,
book the highest-rated class at 7 AM, confirm reservation,
setup a timer for the booked slot in the phoneFind a local event, setup calendar event
Open Eventbrite, search for AI startup meetup events happening this
weekend in "Austin, TX", select the most popular one, register and RSVP
yes to the event, setup a calendar event as a reminder.Check weather forecast and send a Whatsapp/Telegram/Slack message
Open Weather app, check tomorrow's weather forecast for "Berlin", and
send the summary via Whatsapp/Telegram/Slack to contact "Lauren Trown",
thumbs up their response.Schedule a meeting in Zoom and share invite via email
Open Zoom app, schedule a meeting titled "AI Hackathon" for tomorrow at
10AM with a duration of 1 hour, copy the invitation link, and send it via
Gmail to contacts "team@example.com".Running & configuration
Environment variables
Variable | Description | Example |
| Require a Bearer token on the SSE server — every request must then send |
|
| Disable anonymous usage telemetry. |
|
| Allow |
|
| Use the legacy platform-specific robots for Android devices and physical iOS devices. iOS simulators continue to use |
|
Simulators, Emulators, and Real Devices
When launched, Mobile MCP can connect to:
iOS Simulators on macOS/Linux
Android Emulators on Linux/Windows/macOS
iOS or Android real devices (requires proper platform tools and drivers)
Make sure you have your mobile platform SDKs (Xcode, Android SDK) installed and configured properly before running Mobile Next Mobile MCP.
Telemetry
Mobile MCP collects anonymous usage telemetry via PostHog. To disable it, set the MOBILEMCP_DISABLE_TELEMETRY environment variable:
MOBILEMCP_DISABLE_TELEMETRY=1 npx @mobilenext/mobile-mcp@latestFor json configurations:
{
"mcpServers": {
"mobile-mcp": {
"command": "npx",
"args": ["-y", "@mobilenext/mobile-mcp@latest"],
"env": {
"MOBILEMCP_DISABLE_TELEMETRY": "1"
}
}
}
}Running in "headless" mode on Simulators/Emulators
When you do not have a real device connected to your machine, you can run Mobile MCP with an emulator or simulator in the background.
For example, on Android:
Start an emulator (avdmanager / emulator command).
Run Mobile MCP with the desired flags
On iOS, you'll need Xcode and to run the Simulator before using Mobile MCP with that simulator instance.
xcrun simctl listxcrun simctl boot "iPhone 16"
🧩 Part of Mobile Next
Mobile MCP is one piece of a toolkit for driving real mobile devices:
mobilewright — "Playwright for mobile." When you're ready to turn agent-driven exploration into repeatable, deterministic tests for iOS and Android, graduate to mobilewright.
mobilecli — the universal device CLI that Mobile MCP is built on: control devices, simulators, and emulators from the command line or a JSON-RPC API.
Mobile Next Cloud — the same stack, rented: real iOS and Android devices on demand. Just prompt your agent:
log in to mobile next cloud and then show me which remote devices are available to meto get started.
🚀 Roadmap
We're continuously improving Mobile MCP. See what we're building next in ROADMAP.md — priorities are shaped heavily by community feedback, so tell us what you'd like to see.
🤝 Contributing
Contributions are welcome — code, docs, bug reports, and ideas.
⭐ Star the repo — the easiest way to help others discover Mobile MCP.
Read CONTRIBUTING.md for how to build, test, and open a pull request.
Browse open issues to find something to work on.
Questions and ideas are also welcome in our Slack community.
Please also review our Code of Conduct.
Thanks to all contributors ❤️
We appreciate everyone who has helped improve this project.
Privacy Policy
Mobile MCP runs locally and communicates only with the devices you connect. See the Mobile Next privacy policy at https://mobilenext.ai/privacy for data collection, usage, retention, and contact information.
Available Tools
23 toolsmobile_click_on_screen_at_coordinatesClick ScreenADestructive
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 |
|---|---|---|---|
| device | Yes | The device identifier to use. Use mobile_list_available_devices to find which devices are available to you. | |
| x | Yes | The x coordinate to click on the screen, in pixels | |
| y | Yes | The y coordinate to click on the screen, in pixels |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description does not add behavioral context beyond the destructiveHint annotation. It does not mention side effects, prerequisites, or error states. With the annotation already indicating destructiveness, the description is adequate but not enhanced.
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 redundancy. The purpose is front-loaded, and every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple click tool with annotations and full schema, the description is nearly complete. It lacks details on coordinate validation and return values, but these are implied. Slightly more differentiation from sibling tools would improve 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 coverage is 100% with clear parameter descriptions. The description adds no additional meaning beyond the schema, so baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (clicking) and the resource (screen at coordinates). It suggests an alternative tool (list_elements_on_screen) for element-based clicks, but does not differentiate from sibling tools like double-tap or long-press at coordinates.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit guidance: use list_elements_on_screen to find coordinates when clicking on an element. However, it does not specify when not to use this tool or mention alternatives for similar actions.
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 ScreenBDestructive
Double-tap on the screen at given x,y coordinates.
| Name | Required | Description | Default |
|---|---|---|---|
| device | Yes | The device identifier to use. Use mobile_list_available_devices to find which devices are available to you. | |
| x | Yes | The x coordinate to double-tap, in pixels | |
| y | Yes | The y coordinate to double-tap, in pixels |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true, so the description does not need to repeat that. However, it adds no additional behavioral context beyond the annotation, such as potential side effects or system response. This is adequate but not exceptional.
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 very short (one sentence) and front-loaded with the key action. It is efficient, though it could be slightly expanded to add value without losing conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple nature of the tool (no output schema, 3 parameters), the description is minimally complete. However, it lacks details about coordinate system (e.g., absolute/relative) or any side effects, making it somewhat incomplete for an agent to fully understand behavior.
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%, meaning all parameters already have descriptions. The tool description adds no extra meaning beyond what is in the schema, so it is baseline adequate.
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 x,y coordinates). It effectively distinguishes from sibling tools like mobile_click_on_screen_at_coordinates (single tap) and mobile_long_press_on_screen_at_coordinates.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives, nor any context about prerequisites, exclusions, or typical use cases. It simply states what it does.
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 |
|---|---|---|---|
| device | Yes | The device identifier to use. Use mobile_list_available_devices to find which devices are available to you. | |
| id | Yes | The crash report ID to retrieve |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true. Description adds 'full content' detail but no additional behavioral traits beyond what annotations imply. For a simple read, this is adequate but not exceptional.
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: first states purpose, second provides usage guideline. No filler words, front-loaded with key action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With only 2 parameters, no output schema, and readOnlyHint, the description fully covers the tool's purpose and usage context. Input schema provides complete parameter documentation.
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?
Input schema covers both parameters ('device' and 'id') with descriptions. The description does not add extra meaning beyond schema, so 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?
Description clearly states 'Get the full content of a crash report by its ID.' Uses specific verb 'get' and resource 'full content of a crash report', distinguishing it from sibling tool 'mobile_list_crashes' which only lists IDs.
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 directs to use 'mobile_list_crashes to find available crash IDs', providing a clear prerequisite. Lacks explicit 'when not to use' but the single-purpose nature makes it sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mobile_get_orientationGet OrientationARead-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?
Annotations already declare readOnlyHint: true. The description adds no additional behavioral context (e.g., permissions, rate limits) beyond what is obvious from the verb 'get'.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single clear sentence, front-loaded with the essential information. No unnecessary 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 read-only tool with one parameter and no output schema, the description covers all needed information. The schema handles parameter details adequately.
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 parameter 'device' is well-documented in the schema. The tool description does not add any extra meaning 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 the action ('get') and the resource ('current screen orientation'). This distinguishes it from sibling tools like mobile_set_orientation, which sets the orientation.
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 when to use it (to read orientation) but does not explicitly mention alternatives like mobile_set_orientation or provide when-not-to-use guidance. For a simple tool, this is adequate but lacks explicit direction.
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 indicate readOnlyHint=true, so the agent knows this is a safe read operation. The description adds no further behavioral context, such as what the return format is (e.g., width x height) or if any side effects occur. Given the annotation, a score of 3 is appropriate as the description doesn't contradict but also doesn't add 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 sentence of 11 words that directly states the purpose. No fluff, no repetition. It is concise and front-loaded.
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 simplicity (one parameter, no output schema), the description is mostly complete. However, it could mention that the return value is width and height in pixels to avoid ambiguity. Still, for a basic getter, this is sufficient.
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 covers the only parameter 'device' with a description that tells the user to use mobile_list_available_devices to find valid identifiers. Since schema description coverage is 100%, the description doesn't need to add more. It adds marginal value 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 clearly states the tool's purpose: retrieving the screen size of a mobile device in pixels. It uses a specific verb ('Get') and resource ('screen size'), and it distinguishes itself from sibling tools that perform actions like clicking, swiping, or getting orientation.
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. For instance, it doesn't mention that this tool might be a prerequisite for coordinate-based actions, nor does it explain when not to use it. There is no explicit context or exclusion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mobile_install_appInstall AppCDestructive
Install 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. | |
| 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 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description does not add any behavioral context beyond the 'destructiveHint' annotation (which already indicates a destructive operation). It omits information about permissions, potential failures, or 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?
The description is a single, front-loaded sentence with no wasted words. It is concise but could be more informative without sacrificing brevity.
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 has two well-documented parameters and no output schema. The description is minimal and does not explain return values, installation time, or post-installation behavior. It is adequate for a straightforward operation but lacks 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?
The input schema has 100% description coverage, detailing 'device' usage and 'path' file types. The description adds no extra meaning, so a baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a clear verb+resource structure: 'Install an app on mobile device'. It distinguishes from siblings like 'mobile_launch_app' (launch an installed app) and 'mobile_uninstall_app' (remove an app). However, it could be more specific about the installation process (e.g., from a file).
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, such as when the app is already installed or needs to be launched. No exclusions or prerequisites are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mobile_launch_appLaunch AppADestructive
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. | |
| packageName | Yes | The package name of the app to launch | |
| locale | No | Comma-separated BCP 47 locale tags to launch the app with (e.g., fr-FR,en-GB) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, indicating state change. Description does not add behavioral details (e.g., whether it brings app to foreground, or requires specific permissions). With annotations, this is adequate but not enhanced.
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 sentences, front-loaded, no wasted words. Every sentence adds value: purpose and usage guidance.
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?
Simple tool with destructiveHint annotation, but description lacks info on result (e.g., success/failure, returning control). No output schema, so some explanation of outcome would improve 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 coverage is 100% with descriptions for all 3 parameters. Tool description adds no extra meaning beyond the schema, so 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?
Clearly states 'Launch an app' with specific verb and resource. Distinguishes from siblings like mobile_open_url and mobile_install_app by focusing on opening an already-installed app.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'Use this to open a specific app' and provides a prerequisite (find package name via list_apps_on_device). No exclusions or direct alternatives, but context is sufficient.
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 declare readOnlyHint=true, so the description doesn't need to emphasize safety. It adds context that the tool lists installed apps, but doesn't disclose any potential side effects or permissions required, which is acceptable given the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, front-loaded with the core purpose, and contains no unnecessary words. It is efficient and direct.
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 one parameter and no output schema, the description adequately explains the purpose and parameter usage. However, it does not specify the format or content of the returned list, which would be beneficial for a read-only 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 coverage is 100% and the description adds no additional meaning beyond what the schema provides. The device parameter is documented clearly in the schema, referencing the sibling tool for device discovery.
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 lists installed apps on the device, using specific verb+resource. It distinguishes from siblings like mobile_install_app, mobile_uninstall_app, and mobile_launch_app.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use the tool, but lacks explicit exclusions or alternatives. The sibling tool mobile_list_available_devices is referenced for the device parameter, offering some guidance.
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.
| 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 tool's safety is known. The description adds value by detailing what is returned (physical and simulator/emulator devices, both OS types), which is helpful beyond the annotation.
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 that front-load the core action and add necessary details. 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?
The description covers what the tool returns (device types and OS), which is sufficient for a simple list tool. However, it could mention what fields (e.g., device ID or name) are in the output, but this is a minor 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?
The tool has no parameters and the input schema is empty (100% coverage). With 0 parameters, the baseline is 4, and no additional parameter info 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 verb 'List' and the resource 'available devices,' and specifies it includes physical and simulated/emulated devices of both Android and iOS. This distinguishes it from sibling tools which are action-oriented (e.g., click, install).
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 for discovering available devices before using other mobile tools. While no explicit when-not-to-use or alternatives are provided, the context from sibling tool names makes the tool's role clear.
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, so the description adds no essential behavioral detail beyond confirming it's a read operation. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence, no filler. Efficiently communicates the core purpose.
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 listing tool with good schema coverage and annotations, the description is nearly complete. Could mention output format, but not critical given 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 coverage is 100% and the description does not add meaning beyond what the schema already provides for the 'device' parameter. Baseline score applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('List') and the resource ('crash reports on the device'), with a specific verb+resource pattern that distinguishes it from siblings like mobile_get_crash.
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 explicit guidance on when to use this tool versus mobile_get_crash. The parameter description hints at using mobile_list_available_devices first, but no broader usage 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 indicate readOnlyHint=true, and the description adds the behavioral note about not caching results, which provides context beyond the annotation. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the purpose, followed by a crucial usage note. No extraneous information.
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 simple one-parameter input, the description covers the return values and provides a caching caveat. No output schema exists, but the description sufficiently indicates what is returned.
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 schema parameter descriptions are already clear (e.g., referencing mobile_list_available_devices). The description does not add additional parameter semantics 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 the verb 'list' and the resource 'elements on screen,' and specifies the returned information (coordinates, display text or accessibility label). It distinguishes itself from sibling tools like mobile_click_on_screen_at_coordinates.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description includes a note 'Do not cache this result,' which is a usage guideline, but it does not specify when to use this tool versus alternatives or provide explicit exclusions.
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 ScreenADestructive
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 |
|---|---|---|---|
| device | Yes | The device identifier to use. Use mobile_list_available_devices to find which devices are available to you. | |
| 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 | |
| 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 indicate destructiveHint=true, but description does not elaborate on potential effects. However, it adds useful context about coordinate-based action vs element-based. 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?
Two concise sentences deliver core purpose and a key usage tip. No 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?
Lacks explanation of result (e.g., what happens after long press) or edge cases, but for a simple action, the description suffices.
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 covers all parameters with descriptions. Description adds cross-reference to list_elements_on_screen for finding coordinates, which is helpful beyond 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?
Clearly states 'Long press on the screen at given x,y coordinates', specifying the verb and resource. Differentiates from siblings like mobile_click_on_screen_at_coordinates by explicitly mentioning long press.
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 advises using list_elements_on_screen tool to find coordinates when pressing on an element, providing clear when-to-use and when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mobile_open_urlOpen URLADestructive
Open a URL in browser 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. | |
| url | Yes | The URL to open |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide destructiveHint: true, which already signals potential side effects. The description adds no extra context about behavior beyond the obvious action. It does not mention whether a browser must be installed, if the URL will replace current content, or what happens on failure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single, front-loaded sentence of 8 words with no extraneous information. Every word earns its place, providing clarity without verbosity.
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?
While annotations and schema cover basic safety and parameter info, the description lacks details like required permissions (e.g., internet access), dependencies on installed browsers, or behavior if the device is locked. For a simple action, this may suffice but leaves gaps.
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 includes helpful descriptions: the device parameter explicitly directs to use mobile_list_available_devices, adding value beyond the parameter name. The url parameter description is basic but sufficient.
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 'Open', the resource 'URL', and the context 'in browser on device'. Among sibling tools, none other perform URL opening, making it immediately distinguishable.
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 on when to use this tool versus alternatives (e.g., using mobile_launch_app for a browser, or mobile_click to navigate). No prerequisites or exclusions are mentioned, leaving the agent to infer usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mobile_press_buttonPress ButtonBDestructive
Press a button 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. | |
| 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) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint: true, so the description does not need to repeat that. The description adds no further behavioral details (e.g., effect on app state, permissions required). It is consistent with annotations but provides no extra value beyond them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very concise (one short sentence) and front-loaded with the core action. It does not waste words, though it could be slightly expanded to include context without becoming verbose.
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 that there is no output schema and the tool is destructive (destructiveHint true), the description lacks details about return values, side effects, or prerequisites. For a simple tool with only two parameters, it is minimally adequate but leaves out important contextual information.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema provides 100% coverage with descriptions for both parameters. The tool description adds no additional meaning beyond the schema. Per guidelines, baseline is 3 when schema coverage is high.
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 'Press a button on device' clearly states the action and resource. It effectively distinguishes from sibling tools like mobile_click_on_screen_at_coordinates or mobile_type_keys by specifying a physical button press. However, it could be slightly more specific about the context (e.g., hardware vs software buttons).
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 on when to use this tool versus alternatives. The description does not mention prerequisites, conditions, or when not to use it. Given the sibling tools, explicit usage guidelines would help the agent decide correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mobile_save_screenshotSave ScreenshotADestructive
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 already declare destructiveHint=true, indicating the tool modifies state (likely overwrites files). The description does not elaborate on what exactly is destroyed (e.g., existing files at saveTo path) or any side effects beyond the annotation.
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 that is front-loaded with the key action and resource. Every word contributes meaning; no unnecessary content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter tool with full schema coverage and a destructive annotation, the description provides adequate context. However, it omits details about overwrite behavior, error conditions, or file format validation that would improve 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% with both parameters documented. The description adds no additional meaning beyond the schema, so 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 clearly states the action ('Save a screenshot') and the resource ('mobile device to a file'), distinguishing it from sibling tools like 'mobile_take_screenshot' which likely returns the image data rather than saving to file.
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 explicit guidance on when to use this tool versus alternatives like 'mobile_take_screenshot'. The schema hints to use 'mobile_list_available_devices' for the device parameter, but no context about prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mobile_set_orientationSet OrientationBDestructive
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 include destructiveHint=true, so the description should elaborate on potential side effects. It merely says 'change the screen orientation', which is accurate but lacks detail on consequences (e.g., app rotation, possible disruption). The description adds minimal value beyond the annotation.
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, well-structured sentence that efficiently conveys the tool's purpose without superfluous 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 two-parameter tool, the description provides basic functionality but lacks usage context. Given the many sibling tools, the agent would benefit from guidance on when to set orientation. The description is minimally complete but not comprehensive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both parameters having clear descriptions. The tool description does not provide additional semantic value beyond the schema, so 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 ('Change ... orientation') and the resource ('screen orientation'). While it doesn't explicitly differentiate from siblings like mobile_get_orientation, the verb 'set' versus 'get' is implied and the title reinforces it.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives (e.g., mobile_get_orientation) or any prerequisites (e.g., device state). This is a significant gap for an agent deciding between sibling tools.
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 RecordingADestructive
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 already set destructiveHint=true. The description adds behavioral details: recording runs in background, returns save path, and implies a persistent file. 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?
Three concise sentences with front-loaded purpose. Every sentence adds value: what it does, background behavior, stop instruction, and return value. 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 start-recording tool, the description covers all key aspects: action, background execution, stop counterpart, and return value. No output schema is needed given the 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 the baseline is 3. The description adds no additional parameter details beyond what the schema already 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 it starts screen recording on a mobile device, uses a specific verb ('Start recording'), and implicitly distinguishes from siblings like 'mobile_take_screenshot' (still image) and 'mobile_stop_screen_recording' (stop counterpart).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states the recording runs in the background until stopped by 'mobile_stop_screen_recording', providing clear usage context. It does not list explicit alternatives but the sibling set makes the differentiation clear.
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 RecordingADestructive
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 indicate destructiveness (destructiveHint=true). The description adds that it returns file path, size, and duration. It does not mention error handling if no recording is active, but the core behavior is clear.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two well-structured sentences: first sentence states action, second states return. No wasted words and information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description explains the return values (file path, size, duration) and parameter usage. However, it does not mention prerequisites (e.g., recording must be active) or error conditions, which would be helpful for 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?
The only parameter 'device' is described as referencing mobile_list_available_devices for available options. Schema coverage is 100%, but the description adds helpful cross-reference context.
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 ('active screen recording'), and the return values ('file path, size, and approximate duration'). It is specific and distinct from siblings 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 description implies it should be used after starting a recording, but does not explicitly state when to use or when not to use. No alternatives are mentioned, but the single tool for stopping recording makes it adequate.
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 ScreenCDestructive
Swipe on the screen
| Name | Required | Description | Default |
|---|---|---|---|
| device | Yes | The device identifier to use. Use mobile_list_available_devices to find which devices are available to you. | |
| direction | Yes | The direction to swipe | |
| 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 | |
| distance | No | The distance to swipe in pixels. Defaults to 400 pixels for iOS or 30% of screen dimension for Android |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description does not mention its destructive nature (annotations indicate destructiveHint: true), nor any behavioral details like system gestures (e.g., edge swipes), duration, or acceleration. The annotations partially cover safety, but the description adds no behavioral context beyond the bare action.
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 consists of a single short sentence, which is concise but overly sparse. It sacrifices useful detail for brevity, making it insufficient for an agent to fully understand the tool's behavior.
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 destructive hint, a more informative description is warranted to explain potential consequences (e.g., triggering system gestures, causing navigation). There is no output schema, so the description should clarify return values or side effects. The current text is inadequate.
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 has 100% description coverage, so the schema already documents each parameter well (e.g., device, direction, optional x/y/distance). The description adds no extra meaning; it is merely a short phrase that repeats the tool name.
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 'Swipe on the screen' is a near-tautology of the tool name and title, providing minimal insight. It does not specify the effect (e.g., scrolling, navigation) or distinguish from sibling tools like mobile_click_on_screen_at_coordinates or mobile_long_press_on_screen_at_coordinates.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description offers no guidance on when to use this tool versus alternatives. For example, it does not explain that swiping is for scrolling or gestures, while clicking or tapping is for selecting elements. The presence of many sibling tools makes this omission significant.
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?
The annotation already indicates readOnlyHint=true, which is consistent. The description adds a behavioral note ('Do not cache this result') that goes beyond the annotation. However, it does not detail any potential side effects or specifics about the screenshot capture (e.g., full screen vs. viewport, but given simplicity, a 4 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise with two sentences, both front-loaded with key information. Every sentence adds value 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?
For a simple tool with one required parameter, no output schema, and clear annotations, the description provides complete guidance on when to use, what it does, and a behavioral note. No further information is necessary.
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 has 100% coverage with a detailed description for the device parameter, so the description does not need to add more. It meets the baseline expectation.
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 ('Take a screenshot') and the resource ('mobile device'), and it distinguishes itself from sibling tools like 'mobile_list_elements_on_screen' by explicitly stating when to use that alternative instead.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear usage context: use to understand what's on screen, and explicitly states when not to use it (if you need to press an element from the view hierarchy) and what to use instead (list elements on screen).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mobile_terminate_appTerminate AppADestructive
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?
The destructiveHint annotation already signals mutation. The description 'Stop and terminate' aligns with this but adds no additional context (e.g., whether it kills the process, clears app state, or requires permissions). With the annotation, the description is minimally adequate.
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, clear sentence that directly states the tool's purpose without any unnecessary words. Appropriate length for a simple operation.
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 2 required parameters, full schema coverage, and presence of destructiveHint annotation, the description is functional but minimal. It could be improved by noting that the app is not uninstalled and that this is distinct from other operations.
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?
Input schema has 100% description coverage for both parameters (device, packageName). The description adds no extra meaning beyond the schema, so 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 'Stop and terminate an app on mobile device' uses a specific verb-resource pair (stop/terminate, app) and clearly distinguishes it from sibling tools like mobile_launch_app (launch) and mobile_uninstall_app (remove).
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 on when to use this tool versus alternatives (e.g., mobile_uninstall_app or simply closing the UI). There is no mention of prerequisites, side effects, 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_type_keysType TextADestructive
Type text into the focused element
| Name | Required | Description | Default |
|---|---|---|---|
| device | Yes | The device identifier to use. Use mobile_list_available_devices to find which devices are available to you. | |
| text | Yes | The text to type | |
| 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?
The description does not add behavioral context beyond the annotation destructiveHint=true. No mention of what happens with submit parameter or typing mechanics.
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?
Single, front-loaded sentence with no redundant information. Perfectly 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?
Minimal description lacks context about prerequisites (focused element), behavior when no element is focused, or typing mechanics. Adequate but with gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides full descriptions for all three parameters (device, text, submit). The description adds no additional semantic value.
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 'Type text into the focused element', specifying the action and target. It is distinct from sibling tools like mobile_press_button or mobile_click_on_screen_at_coordinates.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives, nor any prerequisites like ensuring an element is focused. Missing context for effective selection.
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?
The annotation already signals destructiveness via destructiveHint=true. The description adds no behavioral context beyond acknowledging the action, which is consistent. However, it could elaborate on effects (e.g., data removal) but is not required given the annotation.
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, front-loaded sentence that conveys the core purpose without extraneous 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 destructive tool with clear schema and annotations, the description is largely adequate. It could mention the absence of output schema, but the action's outcome is implied.
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 has 100% coverage with descriptions for both parameters. The tool description adds no additional detail beyond the schema, meeting the baseline.
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 'Uninstall' and the resource 'app from mobile device', distinguishing it from sibling tools like mobile_install_app.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use or not use this tool versus alternatives. The input schema hints at using mobile_list_available_devices but does not provide context for when uninstalling is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
7 tool updates
v0.0.53- Added
mobile_get_crash - Changed
mobile_launch_app1 field changed- added
Input schema / properties / localeAdded value: +{ + "description": "Comma-separated BCP 47 locale tags to launch the app with (e.g., fr-FR,en-GB)", + "type": "string" +}
- Changed
mobile_list_available_devices2 fields changed- removed
Input schema / properties / noParamsRemoved value: -{ - "properties": {}, - "type": "object" -} - removed
Input schema / requiredRemoved value: -[ - "noParams" -]
- Added
mobile_list_crashes - Changed
mobile_save_screenshot1 field changed- changed
Input schema / properties / saveTo / descriptionPrevious value: -"The path to save the screenshot to"New value: +"The path to save the screenshot to. Filename must end with .png, .jpg, or .jpeg"
- Added
mobile_start_screen_recording - Added
mobile_stop_screen_recording
22 tool updates
v1.0.0- Changed
mobile_click_on_screen_at_coordinates3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / deviceAdded value: +{ + "description": "The device identifier to use. Use mobile_list_available_devices to find which devices are available to you.", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "x", - "y" -]New value: +[ + "device", + "x", + "y" +]
- Added
mobile_double_tap_on_screen - Changed
mobile_get_orientation4 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / deviceAdded value: +{ + "description": "The device identifier to use. Use mobile_list_available_devices to find which devices are available to you.", + "type": "string" +} - removed
Input schema / properties / noParamsRemoved value: -{ - "additionalProperties": false, - "properties": {}, - "type": "object" -} - changed
Input schema / requiredPrevious value: -[ - "noParams" -]New value: +[ + "device" +]
- Changed
mobile_get_screen_size4 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / deviceAdded value: +{ + "description": "The device identifier to use. Use mobile_list_available_devices to find which devices are available to you.", + "type": "string" +} - removed
Input schema / properties / noParamsRemoved value: -{ - "additionalProperties": false, - "properties": {}, - "type": "object" -} - changed
Input schema / requiredPrevious value: -[ - "noParams" -]New value: +[ + "device" +]
- Added
mobile_install_app - Changed
mobile_launch_app3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / deviceAdded value: +{ + "description": "The device identifier to use. Use mobile_list_available_devices to find which devices are available to you.", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "packageName" -]New value: +[ + "device", + "packageName" +]
- Changed
mobile_list_apps4 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / deviceAdded value: +{ + "description": "The device identifier to use. Use mobile_list_available_devices to find which devices are available to you.", + "type": "string" +} - removed
Input schema / properties / noParamsRemoved value: -{ - "additionalProperties": false, - "properties": {}, - "type": "object" -} - changed
Input schema / requiredPrevious value: -[ - "noParams" -]New value: +[ + "device" +]
- Changed
mobile_list_available_devices2 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - removed
Input schema / properties / noParams / additionalPropertiesRemoved value: -false
- Changed
mobile_list_elements_on_screen4 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / deviceAdded value: +{ + "description": "The device identifier to use. Use mobile_list_available_devices to find which devices are available to you.", + "type": "string" +} - removed
Input schema / properties / noParamsRemoved value: -{ - "additionalProperties": false, - "properties": {}, - "type": "object" -} - changed
Input schema / requiredPrevious value: -[ - "noParams" -]New value: +[ + "device" +]
- Added
mobile_long_press_on_screen_at_coordinates - Changed
mobile_open_url3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / deviceAdded value: +{ + "description": "The device identifier to use. Use mobile_list_available_devices to find which devices are available to you.", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "url" -]New value: +[ + "device", + "url" +]
- Changed
mobile_press_button3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / deviceAdded value: +{ + "description": "The device identifier to use. Use mobile_list_available_devices to find which devices are available to you.", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "button" -]New value: +[ + "device", + "button" +]
- Changed
mobile_save_screenshot3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / deviceAdded value: +{ + "description": "The device identifier to use. Use mobile_list_available_devices to find which devices are available to you.", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "saveTo" -]New value: +[ + "device", + "saveTo" +]
- Changed
mobile_set_orientation3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / deviceAdded value: +{ + "description": "The device identifier to use. Use mobile_list_available_devices to find which devices are available to you.", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "orientation" -]New value: +[ + "device", + "orientation" +]
- Added
mobile_swipe_on_screen - Changed
mobile_take_screenshot4 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / deviceAdded value: +{ + "description": "The device identifier to use. Use mobile_list_available_devices to find which devices are available to you.", + "type": "string" +} - removed
Input schema / properties / noParamsRemoved value: -{ - "additionalProperties": false, - "properties": {}, - "type": "object" -} - changed
Input schema / requiredPrevious value: -[ - "noParams" -]New value: +[ + "device" +]
- Changed
mobile_terminate_app3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / deviceAdded value: +{ + "description": "The device identifier to use. Use mobile_list_available_devices to find which devices are available to you.", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "packageName" -]New value: +[ + "device", + "packageName" +]
- Changed
mobile_type_keys3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / deviceAdded value: +{ + "description": "The device identifier to use. Use mobile_list_available_devices to find which devices are available to you.", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "text", - "submit" -]New value: +[ + "device", + "text", + "submit" +]
- Added
mobile_uninstall_app - Removed
mobile_use_default_device - Removed
mobile_use_device - Removed
swipe_on_screen
17 tool updates
- First observed
mobile_click_on_screen_at_coordinates - First observed
mobile_get_orientation - First observed
mobile_get_screen_size - First observed
mobile_launch_app - First observed
mobile_list_apps - First observed
mobile_list_available_devices - First observed
mobile_list_elements_on_screen - First observed
mobile_open_url - First observed
mobile_press_button - First observed
mobile_save_screenshot - First observed
mobile_set_orientation - First observed
mobile_take_screenshot - First observed
mobile_terminate_app - First observed
mobile_type_keys - First observed
mobile_use_default_device - First observed
mobile_use_device - First observed
swipe_on_screen
TDQS
Most tools have clearly distinct purposes. The only potential confusion is between mobile_take_screenshot and mobile_save_screenshot, as both involve capturing the screen but differ in output (file vs. return). Otherwise, each tool targets a specific action (e.g., click, swipe, install, crash handling) without overlap.
All tools follow the consistent pattern 'mobile_verb_noun' using snake_case. The naming is predictable and descriptive, making it easy for an agent to infer functionality from the tool name.
With 23 tools, the set is well-scoped for a mobile device interaction server. Each tool feels necessary for common mobile testing workflows, covering device management, app control, UI interaction, screenshots, recording, and crash analysis.
The tool surface covers core mobile testing operations: device discovery, app lifecycle, UI element interaction, gestures, screenshots, recording, and crash handling. Minor gaps exist (e.g., no tool for fetching element attributes or handling network conditions), but the set is largely complete for typical agent-driven testing.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
A Model Context Protocol server for Wix AI tools
The Telnyx MCP server is an official implementation of the Model Context Protocol that enables AI clients (like Claude Desktop, Cursor, and OpenAI Agents) to interact with Telnyx's telephony, messaging, and AI assistant APIs. It provides comprehensive capabilities including making and managing phone calls, sending SMS/MMS messages, purchasing and configuring phone numbers, creating AI assistants with custom instructions, managing cloud storage buckets, scraping and embedding website content, and handling integration secrets. The server exists as both a local implementation and a remotely hosted version, allowing developers to integrate real-world communication infrastructure directly into AI applications.
MCP server for building and testing AI agents with multi-model experimentation and insights.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceA Model Context Protocol server that enables AI agents to control and automate Android devices through natural language, supporting actions like app management, UI interactions, and device monitoring.59MIT
- AlicenseAqualityDmaintenanceA Model Context Protocol server that enables scalable mobile automation for iOS and Android through a platform-agnostic interface, allowing LLMs to interact with mobile applications via accessibility snapshots or screenshot-based inputs.1915,8282Apache 2.0
- AlicenseNot gradedqualityDmaintenanceA Model Context Protocol server that enables AI assistants to interact with iOS simulators, perform accessibility testing, manage apps, and automate complex iOS workflows.32Apache 2.0
- AlicenseAqualityAmaintenanceA Model Context Protocol server for ad-hoc UI testing of Android and iOS apps, enabling LLM agents to interact with mobile app UIs and react to observations.40132MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/mobile-next/mobile-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server