agent-device
OfficialThe agent-device server enables AI agents to automate real mobile, TV, and desktop apps through inspection, interaction, evidence capture, and workflow replay across iOS, Android, macOS, tvOS, and Linux platforms.
Device & App Management
List devices (
devices), boot devices (boot), list/install/reinstall apps (apps,install,reinstall,install-from-source), open apps/deep links/URLs (open), close apps or sessions (close), manage sessions (session), and check foreground app state (appstate).
UI Inspection
Capture accessibility snapshots (
snapshot), diff snapshots (diff), find elements by text/label/role/id (find), get element text/attributes (get), and assert UI state (is).
UI Interaction
Tap/click (
click,press), long press (longpress), fill text fields (fill), type into focused fields (type), focus inputs (focus), scroll (scroll), swipe (swipe), run structured gestures like pan/fling/pinch/rotate (gesture), navigate back (back), go home (home), open app switcher (app-switcher), rotate orientation (rotate), handle alerts (alert), manage keyboard (keyboard), read/write clipboard (clipboard), wait for conditions (wait), change OS settings/permissions (settings), push notifications (push), and trigger app-defined events (trigger-app-event).
Evidence & Diagnostics
Capture screenshots (
screenshot), record video (record), collect logs (logs), monitor network traffic (network), gather performance metrics (perf), and start/stop traces (trace).
Workflow Automation
Replay recorded
.adscripts (replay), run multiple scripts with retry and JUnit reporting (test), and batch multiple commands in a single request (batch).
React Native / Metro
Prepare Metro runtime, reload React Native apps (
metro), and dismiss React Native overlays (react-native).
Supports native, Expo, Flutter, and React Native apps on simulators, emulators, and physical devices.
Automates Android emulators and devices, enabling app opening, UI accessibility tree inspection, element interaction (fill, tap), and evidence collection (screenshots, videos, logs, CPU/memory/perf).
Enables testing of Expo apps on iOS and Android, including opening Expo Go or dev clients, UI snapshotting, element interaction, and gathering evidence such as screenshots, videos, logs, and performance traces.
Automates iOS simulators and devices, enabling app opening, UI accessibility tree inspection, element interaction, and evidence collection (screenshots, videos, logs, network, performance).
Automates Linux desktop applications, enabling UI inspection via accessibility snapshots, element interaction, and evidence collection (screenshots, logs, performance).
Automates macOS desktop applications, enabling UI inspection via accessibility snapshots, element interaction, and evidence collection (screenshots, logs, performance).
agent-device
Mobile app automation and verification for AI coding agents. Give coding agents a live app feedback loop through a CLI, built-in MCP server, or typed Node.js API.
Let your coding agent verify its changes in the running app. agent-device lets agents inspect, control, debug, and verify apps on iOS, Android, and HarmonyOS (simulators, emulators, and physical devices), plus tvOS, Android TV, Amazon Vega OS TV (Vega Virtual Device), web, macOS, and Linux. Agents read token-efficient accessibility snapshots instead of reasoning over screenshots alone, act through refs and selectors, and save evidence for review. It also coordinates device access across parallel agent worktrees and connects to remote device clouds.
Works with Claude Code, Codex, Cursor, Windsurf, Cline, Goose, and any agent that can run a CLI or connect over MCP, or as the runtime under agents you build with the AI SDK or Eve. Developers at Expensify, Shopify, and others use it to verify their apps.
Quick start
Install the CLI and check setup. It requires Node.js 22.12 or newer; web automation requires Node.js 24 or newer. See Installation for target requirements.
npm install -g agent-device@latest
agent-device doctor
agent-device help workflowRun doctor yourself before handing the CLI to an agent; help workflow links to the guides for debugging, replay, and profiling, and the installed help always matches the installed version.
Drive an app from the CLI
Add a contact in the built-in iOS Contacts app:
# Start a session.
agent-device open Contacts --platform ios
# Inspect the screen. The example below shows the output; refs vary.
agent-device snapshot -i
# @e2 [button] "Add"
# Use the ref and wait for the UI to settle.
agent-device press @e2 --settle
# The diff includes:
# + @e7 [text-field] "First name"
agent-device fill @e7 "Ada" --settle
# The next diff shows changed values and current refs:
# - @e7 [text-field] "First name"
# + @e14 [text-field] "Ada"
# = @e15 [text-field] "Last name"
# Capture evidence and close the session.
agent-device screenshot ./contact-form.png
agent-device closeRefs are only valid from the latest output: after a --settle command, use the refs in its diff, and take a new snapshot only if the diff omits what you need. Snapshots come from the app's accessibility tree, so clear labels, roles, and test IDs make agent runs more reliable; use screenshots and video as evidence or when accessibility data is poor.

Add MCP tools to your agent
agent-device mcp starts the official stdio MCP server, exposing the installed commands as structured tools over the same execution path as the CLI:
{
"mcpServers": {
"agent-device": {
"command": "agent-device",
"args": ["mcp"]
}
}
}See AI Agent Setup for per-client setup and when to prefer plain CLI over MCP.
Script it from Node.js
createAgentDeviceClient() gives Node.js code typed access to the same commands, as model tools in your own agent or from orchestration code:
import { createAgentDeviceClient } from 'agent-device';
const client = createAgentDeviceClient({ session: 'qa-run' });
try {
await client.apps.open({ app: 'com.apple.Preferences', platform: 'ios' });
const snapshot = await client.capture.snapshot({ interactiveOnly: true });
const button = snapshot.nodes.find((node) => node.role === 'button');
if (button) await client.interactions.press({ ref: button.ref });
} finally {
await client.sessions.close();
}See the Node.js API, the runnable examples, and the AI SDK and Eve integration guides.
Related MCP server: spala-public-mcp
What agents can do
Inspect app state through accessibility snapshots, refs, selectors, and React Native component trees.
Act on visible UI by tapping or pressing elements, filling fields, scrolling, making gestures, waiting, asserting state, and handling alerts.
Diagnose failures with screenshots, video, logs, traces, network data, performance samples, crash details, and React profiles.
Repeat workflows by saving working steps as
.adscripts for local use or CI. Export strict Maestro YAML when needed.
See Commands for the commands and evidence each target supports.
What to ask your agent
With the CLI installed, prompts like these work end to end:
"Implement the onboarding screen, run it on the iOS simulator and Android emulator, and attach screenshots."
"Reproduce this crash and capture the logs that lead up to it."
"Check whether this change causes unnecessary React Native re-renders."
"Explore the checkout flow once, save it as a replay script, and run it in CI."
"Verify this pull request on a physical device and attach reviewable evidence."
Next steps
AI Agent Setup: skills, project rules, and per-client setup for Cursor, Codex, Claude Code, Windsurf, and others.
Quick Start: a guided run on the bundled Expo test app with screenshots, replay, and performance data.
Replay & E2E and Debugging & Profiling: repeatable tests and bug hunting.
Where to run agent-device
The same session and evidence model works at every step: the agent explores the app, captures evidence, saves a replay, runs it in CI, and moves onto remote devices.
Path | Best for | Start with |
Local | Trying commands and debugging apps on simulators, emulators, physical devices, macOS, and Linux. | Follow the Quick Start. |
CI/CD | Automated pull request and merge validation with replay scripts and captured artifacts. | Try the EAS workflow template. |
Cloud / remote | Linux runners, managed devices, and remote jobs. | Set up a remote proxy, connect a device cloud (BrowserStack, AWS Device Farm, Limrun), or contact Callstack for team QA. |
How it works
agent-device keeps device state in sessions. It sends commands to XCTest on iOS and tvOS, ADB and the snapshot helper on Android, HDC and ArkUI uitest on HarmonyOS, Vega CLI/VDA on the Vega Virtual Device, a local helper on macOS, and AT-SPI on Linux.
Support depth varies by target. Newer backends such as HarmonyOS and Vega OS cover a subset of commands; run agent-device capabilities --platform <platform> to see what a target supports.
Sessions are scoped to the caller's git worktree, and host-local device claims stop parallel agents from taking over each other's simulators and emulators. Inspect ownership without a daemon via agent-device device status, and settle provably dead owners with agent-device device release --stale. The same commands drive hosted devices on BrowserStack, AWS Device Farm, and Limrun.
agent-device uses the inspect-act-verify process from Vercel's agent-browser for mobile, TV, and desktop apps. Basic --platform web support runs agent-browser in the same session and replay system.
FAQ
What is agent-device?
agent-device is a command-line tool and MCP server that lets AI coding agents inspect, control, and verify mobile apps and save evidence for review. It supports iOS, Android, HarmonyOS, TV, web, macOS, and Linux.
Is there an MCP server for mobile app automation?
Yes. agent-device mcp starts the official stdio MCP server. The Quick start above has the client config, and AI Agent Setup covers per-client details.
Does it work with React Native, Expo, Flutter, and native apps?
Yes. agent-device supports native iOS and Android apps, plus React Native, Expo, and Flutter apps on supported targets. The commands and evidence vary by target.
How is it different from mobile MCP servers?
The MCP server is one entry point to the same runtime used by the CLI and typed Node.js API. Sessions, device ownership, selectors, evidence, replay, CI workflows, and cloud routing stay consistent across all three.
Can I build my own agent or QA product on agent-device?
Yes. The typed Node.js client is a public surface over that same runtime, so an agent you build inherits everything above. Start from the Node.js API, AI SDK, or Eve guides.
How is it different from Appium, Detox, or Maestro?
With agent-device, an agent reads app state and chooses each command at run time. Teams use Appium, Detox, and Maestro to write and maintain test suites. agent-device can complement them by saving its runs as .ad scripts or exporting them as strict Maestro YAML.
Can agent-device run in CI?
Yes. Record a run as an .ad script, replay it in CI, and keep the screenshots and logs as artifacts; the EAS workflow template is a working example.
Articles and videos
Articles
Videos
Who uses agent-device?
Teams and developers at Callstack, JPMorgan Chase, Expensify, Shopify, Kindred, Total Wine & More, LegendList, HerLyfe, App & Flow, and others use agent-device.
Documentation
Contributing
See CONTRIBUTING.md.
Made at Callstack
agent-device is open source under the MIT license. Visit agent-device.dev or contact Callstack.
Available Tools
57 toolsalertA
Inspect, wait for, accept, or dismiss a platform alert. Use get before acting when the alert content matters; accept and dismiss change the active alert state. Times out after 90s.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | No | iOS device UDID selector. | |
| debug | No | Enable debug diagnostics. | |
| runId | No | Lease run identifier. | |
| action | No | ||
| device | No | Device name selector. | |
| serial | No | Android device or Vega VVD serial selector. | |
| target | No | Alias for deviceTarget on commands without a UI target field. Interaction commands reserve target for the UI element. | |
| tenant | No | Remote tenant identifier. | |
| leaseId | No | Existing lease identifier. | |
| session | No | Agent-device session name. | |
| noRecord | No | Do not record this action. | |
| platform | No | Platform selector used to resolve a device. | |
| timeoutMs | No | ||
| includeCost | No | Include per-command agent-cost (cost.wallClockMs, …) in structuredContent. Defaults to off; the default response shape is unchanged. | |
| deviceTarget | No | Device target form. Maps to the CLI --target flag. | |
| responseLevel | No | Response verbosity: token-cheap digest / default (today) / full. Defaults to default; the default response shape is unchanged. | |
| mcpOutputFormat | No | MCP text content format. Defaults to optimized agent-friendly text; use json for JSON text. Structured content is always returned separately. | |
| androidDeviceAllowlist | No | Android serial allowlist used for device resolution. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description is the only source of behavioral information. It discloses the 90-second timeout and that accept/dismiss mutate the active alert state, which is useful safety-relevant context. It does not describe behavior when no alert is present or other side effects, but the core behavioral traits are present.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences with no filler. The action-resource statement is front-loaded, followed by usage guidance and a timeout warning. Every sentence contributes information that is not already present in the structured fields.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 18 parameters, four actions, and no output schema, the description omits return-value and outcome behavior: what get returns, what happens on timeout, and whether wait yields the alert text are left unstated. The timeout and mutation warnings help, but an agent still has to infer important response semantics.
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 high at 89%, so the baseline is 3. The description adds meaning beyond the schema by mapping the action enum values to concrete verbs (inspect/wait/accept/dismiss) and by advising get before state-changing actions. Selector parameters are left to the schema, which is acceptable given their existing descriptions.
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 names a specific resource (platform alert) and a set of verbs (inspect, wait for, accept, dismiss) that map directly to the action enum. It does not explicitly contrast itself with sibling tools such as get or wait, and 'Use get before acting' could be slightly ambiguous about whether it means the alert tool's own get action or a sibling tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit internal sequencing guidance: call get before acting when alert content matters, and warns that accept and dismiss change the active alert state. It does not discuss when to prefer sibling tools over alert, but for a specialized alert command the situational guidance is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
appsA
List the apps installed on the selected device. Include system or OEM apps only when they are needed as automation targets. Times out after 90s.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | No | iOS device UDID selector. | |
| debug | No | Enable debug diagnostics. | |
| runId | No | Lease run identifier. | |
| device | No | Device name selector. | |
| serial | No | Android device or Vega VVD serial selector. | |
| target | No | Alias for deviceTarget on commands without a UI target field. Interaction commands reserve target for the UI element. | |
| tenant | No | Remote tenant identifier. | |
| leaseId | No | Existing lease identifier. | |
| session | No | Agent-device session name. | |
| platform | No | Platform selector used to resolve a device. | |
| appsFilter | No | Restrict the listing to user-installed apps, or include system and OEM apps. | |
| includeCost | No | Include per-command agent-cost (cost.wallClockMs, …) in structuredContent. Defaults to off; the default response shape is unchanged. | |
| deviceTarget | No | Device target form. Maps to the CLI --target flag. | |
| responseLevel | No | Response verbosity: token-cheap digest / default (today) / full. Defaults to default; the default response shape is unchanged. | |
| mcpOutputFormat | No | MCP text content format. Defaults to optimized agent-friendly text; use json for JSON text. Structured content is always returned separately. | |
| androidDeviceAllowlist | No | Android serial allowlist used for device resolution. |
Output Schema
| Name | Required | Description |
|---|---|---|
| apps | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the behavioral transparency burden. It usefully discloses the 90-second timeout and frames the operation as read-only. However, it leaves the default appsFilter behavior and device-selection prerequisites implicit, so it only partially covers the behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with no filler: the purpose comes first, followed by the filter guidance and timeout constraint. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only listing tool with a full output schema and fully documented parameters, the description covers the core task, the filtering policy, and the timeout. Some cross-tool guidance is left implicit, but nothing essential for a correct call is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema description coverage, the baseline is 3. The description adds actionable meaning beyond the schema by telling the agent when to include system/OEM apps, which maps directly to the appsFilter parameter choice. This extra guidance justifies the above-baseline score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('List') with a clear resource ('apps installed on the selected device') and scope, making it easy to distinguish from sibling tools like install, reinstall, or appstate. The phrase 'apps installed' clearly identifies this as an enumeration tool.
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—list installed apps for the selected device—and an explicit filtering rule: include system or OEM apps only when needed as automation targets. It does not explicitly name alternative tools or exclusions, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
appstateB
Show foreground app/activity Times out after 90s.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | No | iOS device UDID selector. | |
| debug | No | Enable debug diagnostics. | |
| runId | No | Lease run identifier. | |
| device | No | Device name selector. | |
| serial | No | Android device or Vega VVD serial selector. | |
| target | No | Alias for deviceTarget on commands without a UI target field. Interaction commands reserve target for the UI element. | |
| tenant | No | Remote tenant identifier. | |
| leaseId | No | Existing lease identifier. | |
| session | No | Agent-device session name. | |
| platform | No | Platform selector used to resolve a device. | |
| includeCost | No | Include per-command agent-cost (cost.wallClockMs, …) in structuredContent. Defaults to off; the default response shape is unchanged. | |
| deviceTarget | No | Device target form. Maps to the CLI --target flag. | |
| responseLevel | No | Response verbosity: token-cheap digest / default (today) / full. Defaults to default; the default response shape is unchanged. | |
| mcpOutputFormat | No | MCP text content format. Defaults to optimized agent-friendly text; use json for JSON text. Structured content is always returned separately. | |
| androidDeviceAllowlist | No | Android serial allowlist used for device resolution. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry behavioral disclosure. It does disclose the 90-second timeout, which is useful operational context, but it does not state whether the operation is read-only, what happens on failure, or whether any state changes occur.
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 and front-loaded: it states the purpose first, then the notable timeout behavior. There is no filler or redundant 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?
The output schema exists and the schema covers parameters, so call construction is well supported. However, the description lacks usage guidance and behavioral context beyond the timeout, leaving the agent to infer when and how this tool differs from related commands.
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?
All 15 parameters are documented in the input schema, so the description does not need to repeat them. The description adds no parameter-level meaning, matching the baseline for full schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool shows the foreground app/activity, which is a specific verb and resource. It implicitly distinguishes from siblings like apps or app-switcher by focusing on foreground state, but it does not explicitly name or contrast against those alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided about when to use this tool versus alternatives such as apps, snapshot, or events. The description implies a use case but gives no exclusions, prerequisites, or routing to sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
app-switcherA
Open the device app switcher to inspect or change foreground apps. This changes the visible system UI and may move focus away from the current app. Times out after 90s.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | No | iOS device UDID selector. | |
| debug | No | Enable debug diagnostics. | |
| runId | No | Lease run identifier. | |
| device | No | Device name selector. | |
| serial | No | Android device or Vega VVD serial selector. | |
| target | No | Alias for deviceTarget on commands without a UI target field. Interaction commands reserve target for the UI element. | |
| tenant | No | Remote tenant identifier. | |
| leaseId | No | Existing lease identifier. | |
| session | No | Agent-device session name. | |
| noRecord | No | Do not record this action. | |
| platform | No | Platform selector used to resolve a device. | |
| includeCost | No | Include per-command agent-cost (cost.wallClockMs, …) in structuredContent. Defaults to off; the default response shape is unchanged. | |
| deviceTarget | No | Device target form. Maps to the CLI --target flag. | |
| responseLevel | No | Response verbosity: token-cheap digest / default (today) / full. Defaults to default; the default response shape is unchanged. | |
| mcpOutputFormat | No | MCP text content format. Defaults to optimized agent-friendly text; use json for JSON text. Structured content is always returned separately. | |
| androidDeviceAllowlist | No | Android serial allowlist used for device resolution. |
Output Schema
| Name | Required | Description |
|---|---|---|
| action | Yes | |
| message | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral disclosure burden. It does well by flagging that the visible system UI changes, focus may move away from the current app, and the operation times out after 90 seconds. These are meaningful side-effects and constraints beyond a bare action statement.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, each earning its place: the primary action and purpose, the disruptive UI side-effect, and the timeout constraint. The most important 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?
Given the 100% schema coverage, an output schema, and no nested objects, the description is sufficiently complete. It adds the non-obvious behavioral context and timeout. It could mention platform-specific switcher behavior, but that is not essential for most uses.
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 parameter semantics are already fully documented in the input schema. The description adds no extra parameter context, which is acceptable given the baseline for high schema coverage is 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific action ('Open the device app switcher') and its purpose ('to inspect or change foreground apps'), distinguishing this tool from a generic app launcher or app-state query. It does not explicitly name sibling tools, but the unique system-UI resource is implied strongly enough.
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 the tool: when the agent needs to inspect or change foreground apps via the system app switcher. However, it does not explicitly contrast this with alternatives like `open`, `apps`, or `appstate`, nor does it say when to avoid this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
artifactsB
List daemon or cloud provider artifacts for an active or completed session. Times out after 90s.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | No | iOS device UDID selector. | |
| debug | No | Enable debug diagnostics. | |
| runId | No | Lease run identifier. | |
| device | No | Device name selector. | |
| serial | No | Android device or Vega VVD serial selector. | |
| target | No | Alias for deviceTarget on commands without a UI target field. Interaction commands reserve target for the UI element. | |
| tenant | No | Remote tenant identifier. | |
| leaseId | No | Existing lease identifier. | |
| session | No | Agent-device session name. | |
| platform | No | Platform selector used to resolve a device. | |
| provider | No | Cloud provider name, for example browserstack or aws-device-farm. | |
| includeCost | No | Include per-command agent-cost (cost.wallClockMs, …) in structuredContent. Defaults to off; the default response shape is unchanged. | |
| deviceTarget | No | Device target form. Maps to the CLI --target flag. | |
| responseLevel | No | Response verbosity: token-cheap digest / default (today) / full. Defaults to default; the default response shape is unchanged. | |
| mcpOutputFormat | No | MCP text content format. Defaults to optimized agent-friendly text; use json for JSON text. Structured content is always returned separately. | |
| providerSessionId | No | Cloud provider session id or ARN. | |
| androidDeviceAllowlist | No | Android serial allowlist used for device resolution. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure and does add a concrete trait: 'Times out after 90s.' It also constrains usage to active or completed sessions. However, it does not disclose timeout failure behavior, authentication needs, or whether results are partial, so transparency remains moderate.
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, and the timeout warning is a valuable second sentence. There is no redundant phrasing or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 17 optional parameters and no output schema, the description is thin: it does not describe the shape of the returned artifact list, how a session is identified among the many selectors, or the effect of choosing daemon vs cloud provider. The timeout is mentioned but not the failure mode, leaving an agent to guess about invocation and output.
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?
All 17 parameters have schema descriptions (100% coverage), so the baseline of 3 is appropriate. The tool description adds no parameter-level detail and does not link 'session' to a specific field, but the schema already documents each selector.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('List') and resource ('daemon or cloud provider artifacts') with a session scope, which makes the tool's purpose reasonably clear. It does not define what counts as an artifact or explicitly differentiate from sibling tools like logs or trace, but the 'daemon or cloud provider' qualifier provides some separation.
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 indicates the tool applies to 'active or completed session' and warns about a 90s timeout, which gives some usage context. It does not name alternative tools or exclusion conditions, so an agent must infer when to choose this over logs, trace, or snapshot.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
audioA
Measure browser or host-rendered simulator/emulator audio as compact dBFS buckets. Start a probe before requesting its status or stopping it. Times out after 90s.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | No | iOS device UDID selector. | |
| debug | No | Enable debug diagnostics. | |
| runId | No | Lease run identifier. | |
| action | No | ||
| device | No | Device name selector. | |
| serial | No | Android device or Vega VVD serial selector. | |
| target | No | Alias for deviceTarget on commands without a UI target field. Interaction commands reserve target for the UI element. | |
| tenant | No | Remote tenant identifier. | |
| leaseId | No | Existing lease identifier. | |
| session | No | Agent-device session name. | |
| bucketMs | No | Audio level bucket size in milliseconds. | |
| platform | No | Platform selector used to resolve a device. | |
| durationMs | No | Probe duration in milliseconds. | |
| includeCost | No | Include per-command agent-cost (cost.wallClockMs, …) in structuredContent. Defaults to off; the default response shape is unchanged. | |
| probeAction | No | ||
| deviceTarget | No | Device target form. Maps to the CLI --target flag. | |
| responseLevel | No | Response verbosity: token-cheap digest / default (today) / full. Defaults to default; the default response shape is unchanged. | |
| mcpOutputFormat | No | MCP text content format. Defaults to optimized agent-friendly text; use json for JSON text. Structured content is always returned separately. | |
| androidDeviceAllowlist | No | Android serial allowlist used for device resolution. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral disclosure burden. It covers the probe lifecycle, timeout behavior, and the dBFS-bucket output shape. It does not describe response details or potential side effects, but it is reasonably transparent for a measurement tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three short sentences with no filler. The purpose is front-loaded, followed by the key usage rule and a critical timeout constraint. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 19-parameter tool with no output schema and no annotations, the description is minimally viable but leaves gaps: it does not indicate which parameters matter for start vs status vs stop, nor what the probe result looks like. The core usage sequence is covered, but an agent would still need to infer much of the invocation context from parameter names.
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 89%, so the schema already documents most parameters. The description adds value by explaining the relationship between start/status/stop through the probe lifecycle, which is not fully apparent from the schema enums alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Measure'), resource ('audio'), and output format ('compact dBFS buckets'), making the core purpose clear. It does not explicitly distinguish itself from sibling tools like 'record', so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives concrete operational guidance: start a probe before requesting status or stopping, and expects a 90-second timeout. It does not explain when to choose this tool over alternatives, but the sequencing advice is clear and useful.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
backA
Navigate back in the app or through system navigation. Use in-app for the app navigation stack and system when the platform back behavior is required. Times out after 90s; a caller-supplied budget extends it.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | ||
| udid | No | iOS device UDID selector. | |
| debug | No | Enable debug diagnostics. | |
| runId | No | Lease run identifier. | |
| device | No | Device name selector. | |
| serial | No | Android device or Vega VVD serial selector. | |
| settle | No | After the action, wait for the UI to go quiet and return the settled diff vs the pre-action tree in the same response. Best-effort; never fails the action. | |
| target | No | Alias for deviceTarget on commands without a UI target field. Interaction commands reserve target for the UI element. | |
| tenant | No | Remote tenant identifier. | |
| leaseId | No | Existing lease identifier. | |
| session | No | Agent-device session name. | |
| noRecord | No | Do not record this action. | |
| platform | No | Platform selector used to resolve a device. | |
| timeoutMs | No | Settle: wait deadline in milliseconds (default 10000). | |
| includeCost | No | Include per-command agent-cost (cost.wallClockMs, …) in structuredContent. Defaults to off; the default response shape is unchanged. | |
| deviceTarget | No | Device target form. Maps to the CLI --target flag. | |
| responseLevel | No | Response verbosity: token-cheap digest / default (today) / full. Defaults to default; the default response shape is unchanged. | |
| settleQuietMs | No | Settle: quiet window in milliseconds (default 500). | |
| mcpOutputFormat | No | MCP text content format. Defaults to optimized agent-friendly text; use json for JSON text. Structured content is always returned separately. | |
| androidDeviceAllowlist | No | Android serial allowlist used for device resolution. |
Output Schema
| Name | Required | Description |
|---|---|---|
| mode | Yes | |
| action | Yes | |
| settle | No | |
| message | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does disclose a notable behavioral trait: the 90-second timeout and extension via caller-supplied budget. It also clarifies that system mode triggers platform-native back behavior. It could mention side effects like exiting the app, but the provided details are meaningful.
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 tight sentences, each earning its place: the action, the mode-selection guidance, and the timeout behavior. The most important information is front-loaded and there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a navigation command with a rich schema and an output schema, the description covers the core decision (mode choice) and a key behavioral constraint (timeout). It does not discuss device-resolution details or potential exit behavior, but those are less critical for correct invocation given the schema's high coverage.
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 95%, so the baseline is 3, but the description adds real semantic value by explaining the mode parameter's two values: in-app for the app navigation stack and system for platform back behavior. This goes beyond the raw enum and helps the agent pick correctly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action—'Navigate back in the app or through system navigation'—and clearly distinguishes the two modes it supports. This separates it from sibling navigation tools like home and app-switcher without ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit guidance on when to use each mode: in-app for the app navigation stack and system for platform back behavior. It does not name alternative tools like gesture or swipe, but the mode-level guidance is clear and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
batchB
Execute multiple commands in one daemon request Times out after 90s.
| Name | Required | Description | Default |
|---|---|---|---|
| out | No | Optional output path for command artifacts. | |
| udid | No | iOS device UDID selector. | |
| debug | No | Enable debug diagnostics. | |
| runId | No | Lease run identifier. | |
| steps | Yes | Structured batch steps. Each step uses a command name and the same input object as that command tool. | |
| device | No | Device name selector. | |
| serial | No | Android device or Vega VVD serial selector. | |
| target | No | Alias for deviceTarget on commands without a UI target field. Interaction commands reserve target for the UI element. | |
| tenant | No | Remote tenant identifier. | |
| leaseId | No | Existing lease identifier. | |
| onError | No | Batch failure policy. | |
| session | No | Agent-device session name. | |
| maxSteps | No | Maximum number of steps accepted for this batch. | |
| platform | No | Platform selector used to resolve a device. | |
| includeCost | No | Include per-command agent-cost (cost.wallClockMs, …) in structuredContent. Defaults to off; the default response shape is unchanged. | |
| deviceTarget | No | Device target form. Maps to the CLI --target flag. | |
| responseLevel | No | Response verbosity: token-cheap digest / default (today) / full. Defaults to default; the default response shape is unchanged. | |
| mcpOutputFormat | No | MCP text content format. Defaults to optimized agent-friendly text; use json for JSON text. Structured content is always returned separately. | |
| androidDeviceAllowlist | No | Android serial allowlist used for device resolution. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It does usefully disclose the 90-second timeout, but it says nothing about whether steps run sequentially, what happens on partial failure, how output from multiple steps is aggregated, or whether the batch request has side effects beyond the nested commands. This is a significant gap for a tool that can execute arbitrary combinations of mutating commands.
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 short and every part earns its place: it states the core purpose and the critical timeout constraint. The lack of punctuation and the abrupt sentence break slightly hurt readability, but there is no wasted 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?
Given that this is a complex orchestrator with 19 parameters, no output schema, no annotations, and 55 sibling tools, the description is not complete enough. It omits operational context such as batch execution semantics, failure policy behavior, cost implications, and response shape expectations. The schema documents parameters, but the description does not provide the high-level behavior needed to fully understand the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the input schema already documents all parameters thoroughly, including steps, selectors, responseLevel, and mcpOutputFormat. The description adds no parameter-level detail, but the schema does the heavy lifting, making the baseline score of 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb and resource: 'Execute multiple commands in one daemon request.' It conveys that this is a batching/orchestration tool rather than a single command, which distinguishes it from the many sibling command tools like click, screenshot, or install. However, 'daemon request' is somewhat jargon-heavy and the exact relationship to the sibling tools is only implied.
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?
Usage is implied: use this tool when you need to execute multiple commands in one request. There is no explicit statement about when not to use it, no guidance on choosing it over individual command tools, and no discussion of failure handling beyond the schema's onError parameter. A brief mention of preferring individual tools for single commands would have made this clearer.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bootA
Boot or prepare the selected device or simulator so later commands can target it. The device is chosen through the device-selection inputs, not by naming it here. Times out after 90s.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | No | iOS device UDID selector. | |
| debug | No | Enable debug diagnostics. | |
| runId | No | Lease run identifier. | |
| device | No | Device name selector. | |
| serial | No | Android device or Vega VVD serial selector. | |
| target | No | Alias for deviceTarget on commands without a UI target field. Interaction commands reserve target for the UI element. | |
| tenant | No | Remote tenant identifier. | |
| leaseId | No | Existing lease identifier. | |
| session | No | Agent-device session name. | |
| headless | No | Boot without showing simulator UI when supported. | |
| platform | No | Platform selector used to resolve a device. | |
| includeCost | No | Include per-command agent-cost (cost.wallClockMs, …) in structuredContent. Defaults to off; the default response shape is unchanged. | |
| deviceTarget | No | Device target form. Maps to the CLI --target flag. | |
| responseLevel | No | Response verbosity: token-cheap digest / default (today) / full. Defaults to default; the default response shape is unchanged. | |
| mcpOutputFormat | No | MCP text content format. Defaults to optimized agent-friendly text; use json for JSON text. Structured content is always returned separately. | |
| androidDeviceAllowlist | No | Android serial allowlist used for device resolution. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | Stable device id. |
| kind | Yes | |
| booted | Yes | |
| device | Yes | Human-readable device name. |
| target | Yes | |
| platform | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must carry the behavioral burden. It usefully discloses the 90-second timeout and notes that the device is selected via separate inputs. It does not disclose whether the command blocks until boot completes, whether it is idempotent, or what failure/return behavior to expect.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences with no filler. The main purpose is front-loaded, the selection caveat is second, and the timeout is a useful standalone detail. Every sentence contributes value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is adequate for a simple boot operation, especially with a 100%-covered schema and an output schema present. However, the tool has 16 parameters and no annotations, and the description does not clarify which selectors apply to which platform, whether the command waits for boot completion, or what 'prepare' entails beyond booting, leaving meaningful gaps for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all 16 parameters. The description adds a small amount of conceptual guidance by referring to 'device-selection inputs' and clarifying that the device is not named here, but it does not map which of the many parameters count as device-selection inputs or add syntax-level detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Boot or prepare') applied to a clear resource ('the selected device or simulator') and explains the intent ('so later commands can target it'). It does not explicitly differentiate from sibling tools, but the scope is specific enough that an agent can understand what the tool is for.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description conveys when to use the tool: before later commands that target the device, and it clarifies that device selection happens through device-selection inputs rather than by naming the device here. However, it does not state when not to use it or mention any alternative tools, leaving some usage guidance to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
capabilitiesA
List the commands supported by the selected device or active session. Use device-selection inputs when checking support before a session is open. Times out after 90s.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | No | iOS device UDID selector. | |
| debug | No | Enable debug diagnostics. | |
| runId | No | Lease run identifier. | |
| device | No | Device name selector. | |
| serial | No | Android device or Vega VVD serial selector. | |
| target | No | Alias for deviceTarget on commands without a UI target field. Interaction commands reserve target for the UI element. | |
| tenant | No | Remote tenant identifier. | |
| leaseId | No | Existing lease identifier. | |
| session | No | Agent-device session name. | |
| platform | No | Platform selector used to resolve a device. | |
| includeCost | No | Include per-command agent-cost (cost.wallClockMs, …) in structuredContent. Defaults to off; the default response shape is unchanged. | |
| deviceTarget | No | Device target form. Maps to the CLI --target flag. | |
| responseLevel | No | Response verbosity: token-cheap digest / default (today) / full. Defaults to default; the default response shape is unchanged. | |
| mcpOutputFormat | No | MCP text content format. Defaults to optimized agent-friendly text; use json for JSON text. Structured content is always returned separately. | |
| androidDeviceAllowlist | No | Android serial allowlist used for device resolution. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden. It discloses a 90-second timeout, which is a valuable operational trait, but does not mention whether the operation is read-only, how the command list is returned, or behavior on timeout.
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 with no filler: the core action is front-loaded, followed by a targeted usage tip and a timeout warning. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has 15 optional parameters and no output schema. The description states the purpose and timeout but does not describe the shape of the returned command list or any default behavior. This is adequate for a discovery tool, though more response context would help.
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 only adds a generic hint about device-selection inputs and does not elaborate on any specific parameter beyond what the schema already documents.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'List the commands supported by the selected device or active session', giving a specific verb and resource. It clearly distinguishes this from sibling tools that manage devices or sessions, though it does not explicitly name an alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Use device-selection inputs when checking support before a session is open' provides explicit guidance for a common scenario, implying that after a session is open the active-session path should be used. It gives clear context but does not state exclusions or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
clickA
Activate a UI target by snapshot ref, selector, or coordinates. Prefer a ref or selector after a snapshot; use coordinates only when semantic targeting is unavailable. This can change app state; use settle or verify to confirm the result without a follow-up snapshot. Times out after 90s; a caller-supplied budget extends it.
| Name | Required | Description | Default |
|---|---|---|---|
| raw | No | Use raw snapshot data during selector resolution. | |
| udid | No | iOS device UDID selector. | |
| count | No | Number of press/click repetitions. | |
| debug | No | Enable debug diagnostics. | |
| depth | No | Snapshot traversal depth. | |
| runId | No | Lease run identifier. | |
| scope | No | Snapshot scope selector used before resolution. | |
| button | No | Pointer button for platforms that support mouse buttons. | |
| device | No | Device name selector. | |
| holdMs | No | Hold duration for each action. | |
| serial | No | Android device or Vega VVD serial selector. | |
| settle | No | After the action, wait for the UI to go quiet and return the settled diff vs the pre-action tree in the same response. Best-effort; never fails the action. | |
| target | Yes | UI target. This is separate from deviceTarget, which selects the device form. | |
| tenant | No | Remote tenant identifier. | |
| verify | No | Capture cheap post-action evidence (AX digest, node counts, changedFromBefore) instead of a follow-up snapshot. | |
| leaseId | No | Existing lease identifier. | |
| session | No | Agent-device session name. | |
| jitterPx | No | Randomization radius in pixels. | |
| noRecord | No | Do not record this action. | |
| platform | No | Platform selector used to resolve a device. | |
| doubleTap | No | Request a double-tap action. | |
| timeoutMs | No | Settle: wait deadline in milliseconds (default 10000). | |
| intervalMs | No | Delay between repeated press/click actions. | |
| includeCost | No | Include per-command agent-cost (cost.wallClockMs, …) in structuredContent. Defaults to off; the default response shape is unchanged. | |
| deviceTarget | No | Device target form. Maps to the CLI --target flag. | |
| responseLevel | No | Response verbosity: token-cheap digest / default (today) / full. Defaults to default; the default response shape is unchanged. | |
| settleQuietMs | No | Settle: quiet window in milliseconds (default 500). | |
| mcpOutputFormat | No | MCP text content format. Defaults to optimized agent-friendly text; use json for JSON text. Structured content is always returned separately. | |
| androidDeviceAllowlist | No | Android serial allowlist used for device resolution. |
Output Schema
| Name | Required | Description |
|---|---|---|
| x | No | Resolved interaction x coordinate when available. |
| y | No | Resolved interaction y coordinate when available. |
| ref | No | Snapshot ref without the @ prefix when the target was an @ref. |
| cost | No | |
| hint | No | |
| count | No | Number of press/click repetitions. |
| button | No | |
| holdMs | No | Hold duration for each action. |
| settle | No | |
| message | No | |
| warning | No | |
| evidence | No | |
| jitterPx | No | Randomization radius in pixels. |
| refLabel | No | |
| selector | No | Selector expression when the target was a selector. |
| doubleTap | No | Whether the command requested a double-tap action. |
| intervalMs | No | Delay between repeated press/click actions. |
| resolution | No | Pre-action disclosure of how the acting path resolved its target. Absent when resolutionDisclosure is inapplicable for the path. |
| targetKind | Yes | Resolved interaction target kind. |
| selectorChain | No | |
| referenceWidth | No | Reference frame width for visualizing the interaction point. |
| targetHittable | No | |
| referenceHeight | No | Reference frame height for visualizing the interaction point. |
| maestroFallbackReason | No | |
| maestroNonHittableCoordinateFallbackUsed | No | Whether the direct iOS Maestro coordinate fallback was actually used. |
| maestroNonHittableCoordinateFallbackAllowed | No | Whether the direct iOS Maestro coordinate fallback was allowed for this selector. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations available, the description carries the full transparency burden. It explicitly warns 'This can change app state' and discloses the 90s timeout plus caller-budget extension, which are material behavioral facts. It also explains the confirmation strategy without a follow-up snapshot. It does not cover failure modes or reversibility, but the core side effects are well disclosed.
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?
Four short sentences, each carrying distinct value: what the tool does, how to choose the target, what side effect to expect and how to confirm, and how long it may run. No filler, no repetition of schema content, and the most important usage rule 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?
Given the tool's complexity—29 parameters, many device and platform selectors, and a union target schema—the description covers the critical agent-facing concerns: state mutation risk, snapshot-preferred targeting, and timeout behavior. The output schema exists, so return values do not need elaboration. A small gap is the lack of explicit differentiation from sibling input tools like press, but this is not a blocker.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already documents all 29 parameters with 100% coverage, so the baseline is 3. The description adds real meaning beyond the schema by prioritizing the target union variants, telling the agent that ref/selector should be preferred and coordinates are a fallback. This is directly useful for choosing the correct target shape, justifying a 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb-resource pair, 'Activate a UI target', and immediately enumerates the three supported addressing modes: snapshot ref, selector, or coordinates. This clearly distinguishes the tool's mechanism from raw gesture tools and leaves no ambiguity about what 'click' does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit, actionable guidance on targeting: prefer ref/selector after a snapshot, and fall back to coordinates only when semantic targeting is impossible. It also recommends settle or verify over a follow-up snapshot after the action. It does not explicitly compare click with sibling action tools like press or longpress, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
clipboardA
Read the current device clipboard text, or replace its contents with the given text. Times out after 90s.
| Name | Required | Description | Default |
|---|---|---|---|
| text | No | ||
| udid | No | iOS device UDID selector. | |
| debug | No | Enable debug diagnostics. | |
| runId | No | Lease run identifier. | |
| action | Yes | ||
| device | No | Device name selector. | |
| serial | No | Android device or Vega VVD serial selector. | |
| target | No | Alias for deviceTarget on commands without a UI target field. Interaction commands reserve target for the UI element. | |
| tenant | No | Remote tenant identifier. | |
| leaseId | No | Existing lease identifier. | |
| session | No | Agent-device session name. | |
| noRecord | No | Do not record this action. | |
| platform | No | Platform selector used to resolve a device. | |
| includeCost | No | Include per-command agent-cost (cost.wallClockMs, …) in structuredContent. Defaults to off; the default response shape is unchanged. | |
| deviceTarget | No | Device target form. Maps to the CLI --target flag. | |
| responseLevel | No | Response verbosity: token-cheap digest / default (today) / full. Defaults to default; the default response shape is unchanged. | |
| mcpOutputFormat | No | MCP text content format. Defaults to optimized agent-friendly text; use json for JSON text. Structured content is always returned separately. | |
| androidDeviceAllowlist | No | Android serial allowlist used for device resolution. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral disclosure burden. It usefully discloses the 90-second timeout and the mutating write mode, but it does not mention side effects of overwriting clipboard contents or any platform-specific restrictions.
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, front-loaded with the core operation and a single high-value timeout constraint. Every sentence earns its place and there is no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a straightforward read/write tool with an output schema and a well-covered parameter schema, the description captures the essential behavior and timeout. It could clarify that write expects text, but the schema and enums already cover most of the context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 89%, so the baseline is 3. The description only hints at the text parameter with 'given text' and restates the action modes, adding little meaning beyond what the schema already documents.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description pairs two distinct verbs, 'Read' and 'replace', with a specific resource ('device clipboard text') and explicitly covers both action enum values. An agent can tell exactly what the tool does without opening the schema, and it is clearly distinct from sibling tools like type or click.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The intended use for read vs write is obvious, but there is no explicit guidance about when to prefer this tool over alternatives or any exclusions. The agent must infer that read is for retrieving clipboard content and write is for setting it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
closeA
Close the named app, or close the active session app when app is omitted. Use shutdown only when the selected simulator or emulator should also stop. Times out after 90s.
| Name | Required | Description | Default |
|---|---|---|---|
| app | No | Optional app to close. | |
| udid | No | iOS device UDID selector. | |
| debug | No | Enable debug diagnostics. | |
| force | No | Overwrite an existing --save-script target instead of refusing (alias: --overwrite). | |
| runId | No | Lease run identifier. | |
| device | No | Device name selector. | |
| serial | No | Android device or Vega VVD serial selector. | |
| target | No | Alias for deviceTarget on commands without a UI target field. Interaction commands reserve target for the UI element. | |
| tenant | No | Remote tenant identifier. | |
| leaseId | No | Existing lease identifier. | |
| session | No | Agent-device session name. | |
| noRecord | No | Do not record this action. | |
| platform | No | Platform selector used to resolve a device. | |
| shutdown | No | Shutdown the session/device where supported. | |
| saveScript | No | ||
| includeCost | No | Include per-command agent-cost (cost.wallClockMs, …) in structuredContent. Defaults to off; the default response shape is unchanged. | |
| deviceTarget | No | Device target form. Maps to the CLI --target flag. | |
| responseLevel | No | Response verbosity: token-cheap digest / default (today) / full. Defaults to default; the default response shape is unchanged. | |
| mcpOutputFormat | No | MCP text content format. Defaults to optimized agent-friendly text; use json for JSON text. Structured content is always returned separately. | |
| androidDeviceAllowlist | No | Android serial allowlist used for device resolution. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden of disclosing behavior. It adds the 90s timeout, the fallback to the active session app, and the scope boundary between closing an app and shutting down a simulator/emulator. It does not describe failure behavior or side effects in detail, but the core behavior is transparent enough.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, each doing useful work: the main action and fallback, the shutdown alternative, and the timeout. There is no filler or redundant restating of the tool name or schema.
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 20-parameter tool with no annotations and no output schema, the description covers the core invocation decisions: which app to close, what happens when app is omitted, when to prefer shutdown, and the timeout. The generic selector parameters are well documented in the schema, so the description does not need to repeat them. Minor gaps remain around response shape and failure 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 description coverage is about 95%, so the baseline is 3 and the schema already documents most parameters. The description adds value by clarifying that app is optional and defaults to the active session app, and by framing shutdown as a separate operation rather than repeating schema text.
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 names the verb and resource precisely: close an app, or close the active session app when app is omitted. It also separates itself from the shutdown sibling by noting when shutdown should be used instead, so an agent can distinguish close from nearby tools like open, apps, and shutdown.
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 second sentence gives explicit routing guidance: use shutdown only when the selected simulator or emulator should also stop. This directly addresses the most likely alternative to close and tells the agent exactly when to choose it, with no inference required.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
debugA
Symbolicate Apple crash artifacts with matching dSYM UUIDs. This debug namespace is intentionally narrow: use logs for app logs, network for HTTP evidence, perf for performance samples, record/trace for media and traces, and react-devtools for React Native profiles. Times out after 90s.
| Name | Required | Description | Default |
|---|---|---|---|
| out | No | Output path for the symbolicated artifact. | |
| dsym | No | Path to a matching .dSYM bundle. | |
| udid | No | iOS device UDID selector. | |
| debug | No | Enable debug diagnostics. | |
| runId | No | Lease run identifier. | |
| action | Yes | ||
| device | No | Device name selector. | |
| serial | No | Android device or Vega VVD serial selector. | |
| target | No | Alias for deviceTarget on commands without a UI target field. Interaction commands reserve target for the UI element. | |
| tenant | No | Remote tenant identifier. | |
| leaseId | No | Existing lease identifier. | |
| session | No | Agent-device session name. | |
| artifact | Yes | Apple crash artifact path (.ips, .crash, or .log). | |
| platform | No | Platform selector used to resolve a device. | |
| searchPath | No | Directory to scan for matching .dSYM bundles. | |
| includeCost | No | Include per-command agent-cost (cost.wallClockMs, …) in structuredContent. Defaults to off; the default response shape is unchanged. | |
| deviceTarget | No | Device target form. Maps to the CLI --target flag. | |
| responseLevel | No | Response verbosity: token-cheap digest / default (today) / full. Defaults to default; the default response shape is unchanged. | |
| mcpOutputFormat | No | MCP text content format. Defaults to optimized agent-friendly text; use json for JSON text. Structured content is always returned separately. | |
| androidDeviceAllowlist | No | Android serial allowlist used for device resolution. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden. It does disclose a 90-second timeout and the intentionally narrow scope, which is useful. However, it does not mention side effects such as writing an output file, return behavior, or any permissions/lease requirements, so transparency is adequate but incomplete.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with no waste: purpose is front-loaded, sibling routing follows, and the timeout is stated last. Every sentence earns its place and the structure allows an agent to quickly determine applicability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 20 parameters, the schema is rich enough to carry parameter detail, and the description covers purpose, boundaries, and timeout. The main missing piece is the lack of any description of return values or output behavior, and there is no output schema to compensate, so it is nearly complete but not fully.
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 95%, so the schema already documents most parameters clearly. The description adds meaningful semantic context beyond the schema by explaining the 'matching dSYM UUIDs' requirement, which clarifies how dsym and searchPath relate to the crash artifact.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Symbolicate Apple crash artifacts with matching dSYM UUIDs.' It also distinguishes itself from sibling tools by explicitly listing logs, network, perf, record/trace, and react-devtools as the correct tools for other artifact types.
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?
Usage guidance is explicit: 'This debug namespace is intentionally narrow' and the description names exactly which sibling tools should be used for app logs, HTTP evidence, performance samples, media/traces, and React Native profiles. This gives clear when-to-use and when-not-to-use direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
devicesA
List available devices and simulators that can be selected for automation. Use platform, device, udid, or serial inputs on later commands to target one result. Times out after 90s.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | No | iOS device UDID selector. | |
| debug | No | Enable debug diagnostics. | |
| runId | No | Lease run identifier. | |
| device | No | Device name selector. | |
| serial | No | Android device or Vega VVD serial selector. | |
| target | No | Alias for deviceTarget on commands without a UI target field. Interaction commands reserve target for the UI element. | |
| tenant | No | Remote tenant identifier. | |
| leaseId | No | Existing lease identifier. | |
| session | No | Agent-device session name. | |
| platform | No | Platform selector used to resolve a device. | |
| includeCost | No | Include per-command agent-cost (cost.wallClockMs, …) in structuredContent. Defaults to off; the default response shape is unchanged. | |
| deviceTarget | No | Device target form. Maps to the CLI --target flag. | |
| responseLevel | No | Response verbosity: token-cheap digest / default (today) / full. Defaults to default; the default response shape is unchanged. | |
| mcpOutputFormat | No | MCP text content format. Defaults to optimized agent-friendly text; use json for JSON text. Structured content is always returned separately. | |
| androidDeviceAllowlist | No | Android serial allowlist used for device resolution. |
Output Schema
| Name | Required | Description |
|---|---|---|
| devices | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry behavioral disclosure; it adds a concrete 90s timeout, which is useful. The read-only nature is only implied by the verb 'List', and no side effects, permission, or failure-mode details are stated.
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 purpose, followed by a usage hint and a timeout warning. Every sentence carries distinct information and there is 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 list-style tool with a full output schema and 100% parameter documentation, the description covers the core use case, cross-command selector guidance, and a key operational constraint. It is not exhaustive about alternatives, but nothing critical is missing for an agent to invoke this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds value beyond the schema by explaining that platform, device, udid, and serial are meant to target one result on later commands, giving workflow meaning to those parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'List available devices and simulators' for automation selection. It clearly conveys what the tool returns, though it does not explicitly name a sibling tool to distinguish itself from.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear usage context: this is the discovery step before targeting a device, and it tells the agent to use platform, device, udid, or serial on subsequent commands. It stops short of naming alternative tools or explicit when-not-to-use conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
diffB
Compare accessibility snapshots or screenshots to identify UI changes. Use snapshot comparisons for semantic tree changes and screenshot comparisons for pixel differences. Times out after 90s.
| Name | Required | Description | Default |
|---|---|---|---|
| out | No | ||
| raw | No | ||
| kind | Yes | ||
| udid | No | iOS device UDID selector. | |
| debug | No | Enable debug diagnostics. | |
| depth | No | ||
| runId | No | Lease run identifier. | |
| scope | No | ||
| device | No | Device name selector. | |
| serial | No | Android device or Vega VVD serial selector. | |
| target | No | Alias for deviceTarget on commands without a UI target field. Interaction commands reserve target for the UI element. | |
| tenant | No | Remote tenant identifier. | |
| leaseId | No | Existing lease identifier. | |
| session | No | Agent-device session name. | |
| noRecord | No | Do not record this action. | |
| platform | No | Platform selector used to resolve a device. | |
| includeCost | No | Include per-command agent-cost (cost.wallClockMs, …) in structuredContent. Defaults to off; the default response shape is unchanged. | |
| deviceTarget | No | Device target form. Maps to the CLI --target flag. | |
| responseLevel | No | Response verbosity: token-cheap digest / default (today) / full. Defaults to default; the default response shape is unchanged. | |
| interactiveOnly | No | ||
| mcpOutputFormat | No | MCP text content format. Defaults to optimized agent-friendly text; use json for JSON text. Structured content is always returned separately. | |
| androidDeviceAllowlist | No | Android serial allowlist used for device resolution. |
Output Schema
| Name | Required | Description |
|---|---|---|
| mode | Yes | |
| lines | Yes | |
| summary | Yes | |
| warnings | No | |
| baselineInitialized | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does disclose at least one useful operational trait: a 90-second timeout. However, it does not explicitly state whether the operation is read-only, what pre-existing artifacts are required, or whether any device/state is modified during comparison.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three short sentences with no filler. The purpose is front-loaded, the mode guidance is immediately actionable, and the timeout is an extra worthwhile operational fact.
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 complex tool with 22 parameters and no annotations, this description is too thin. It does not explain which selectors/identifiers are needed to perform a meaningful diff, how the screenshot mode is requested when the schema only allows 'snapshot', or what operational prerequisites exist. The output schema covers return values, but the invocation context remains under-specified.
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?
For a tool with 22 parameters, the description adds very little parameter-level guidance and never explains how the two snapshots or screenshots to compare are selected. The mention of snapshot vs screenshot does not map cleanly to the schema because 'kind' only permits 'snapshot', and the many common selectors documented in the schema are not tied to any invocation pattern.
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 names a concrete action ('Compare... snapshots or screenshots') and an explicit outcome ('identify UI changes'), which distinguishes it from capture-oriented siblings like snapshot and screenshot. However, the advertised screenshot mode is not backed by the schema: the required 'kind' parameter is constrained to 'snapshot' only, so the description is slightly inconsistent with the input schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives actionable mode-selection guidance: use snapshot comparisons for semantic tree changes and screenshot comparisons for pixel differences. It does not state when to prefer sibling tools or when not to diff, but the primary mode decision is clearly explained.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
doctorA
Diagnose device, app, development-server, and React Native or Expo readiness issues. Returns compact evidence for local inventory, sessions, optional app discovery, toolchains, and server reachability. On iOS simulators it also warms the XCTest runner build cache in the background when missing, so run it before the first Apple snapshot or interaction of a session. Times out after 90s.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | No | iOS device UDID selector. | |
| debug | No | Enable debug diagnostics. | |
| runId | No | Lease run identifier. | |
| device | No | Device name selector. | |
| remote | No | Check remote connection setup instead of local device inventory. | |
| serial | No | Android device or Vega VVD serial selector. | |
| target | No | Alias for deviceTarget on commands without a UI target field. Interaction commands reserve target for the UI element. | |
| tenant | No | Remote tenant identifier. | |
| leaseId | No | Existing lease identifier. | |
| session | No | Agent-device session name. | |
| platform | No | Platform selector used to resolve a device. | |
| targetApp | No | Installed app package/bundle id or app name to verify without opening a session. | |
| includeCost | No | Include per-command agent-cost (cost.wallClockMs, …) in structuredContent. Defaults to off; the default response shape is unchanged. | |
| deviceTarget | No | Device target form. Maps to the CLI --target flag. | |
| responseLevel | No | Response verbosity: token-cheap digest / default (today) / full. Defaults to default; the default response shape is unchanged. | |
| mcpOutputFormat | No | MCP text content format. Defaults to optimized agent-friendly text; use json for JSON text. Structured content is always returned separately. | |
| androidDeviceAllowlist | No | Android serial allowlist used for device resolution. |
Output Schema
| Name | Required | Description |
|---|---|---|
| kind | Yes | |
| metro | No | |
| checks | Yes | |
| status | Yes | |
| target | No | |
| summary | Yes | |
| platform | No | |
| targetApp | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure, and it does well: it reveals a non-obvious side effect (warming the XCTest runner build cache in the background on iOS simulators), a hard constraint ('Times out after 90s'), and the nature of the output (compact evidence). Minor gaps remain, such as whether the tool opens sessions or performs network calls beyond 'server reachability,' but the critical behaviors are disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with zero filler: purpose and return shape in the first, the critical iOS cache-warming caveat and usage timing in the second, and the timeout in the third. Each sentence carries distinct, necessary information, and the primary purpose is front-loaded. For a 17-parameter tool, this is an exemplary length.
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 output schema exists, so return-value details are already covered outside the description. For a complex tool with no annotations, the description covers the essential workflow: what it diagnoses, what it returns, the iOS-specific prerequisite behavior, and the 90s timeout. It is slightly incomplete in not addressing how local-vs-remote (the remote parameter) or platform selection changes the diagnostic scope, but the core orientation is solid.
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 even without parameter details in the description itself. The description does not map its terms (e.g., 'server reachability', 'optional app discovery') to specific selectors like remote or targetApp, which would have added value. It adds no parameter-level meaning beyond the schema, so the 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 uses a specific verb (Diagnose) with an explicit resource scope: device, app, development-server, and React Native or Expo readiness issues. It also specifies what evidence is returned (local inventory, sessions, app discovery, toolchains, server reachability), making the purpose concrete. However, it does not explicitly differentiate from diagnostic siblings like devices, capabilities, network, or perf, which overlap in the diagnostic space.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit, actionable timing guidance: 'run it before the first Apple snapshot or interaction of a session' in connection with the XCTest cache-warming behavior. It also implies the tool's diagnostic role in a session workflow. It names no alternatives or when-not-to-use conditions, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
eventsB
Read the daemon-owned session event timeline as paged JSON-friendly entries Times out after 90s.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | No | iOS device UDID selector. | |
| debug | No | Enable debug diagnostics. | |
| limit | No | ||
| runId | No | Lease run identifier. | |
| cursor | No | ||
| device | No | Device name selector. | |
| serial | No | Android device or Vega VVD serial selector. | |
| target | No | Alias for deviceTarget on commands without a UI target field. Interaction commands reserve target for the UI element. | |
| tenant | No | Remote tenant identifier. | |
| leaseId | No | Existing lease identifier. | |
| session | No | Agent-device session name. | |
| platform | No | Platform selector used to resolve a device. | |
| includeCost | No | Include per-command agent-cost (cost.wallClockMs, …) in structuredContent. Defaults to off; the default response shape is unchanged. | |
| deviceTarget | No | Device target form. Maps to the CLI --target flag. | |
| responseLevel | No | Response verbosity: token-cheap digest / default (today) / full. Defaults to default; the default response shape is unchanged. | |
| mcpOutputFormat | No | MCP text content format. Defaults to optimized agent-friendly text; use json for JSON text. Structured content is always returned separately. | |
| androidDeviceAllowlist | No | Android serial allowlist used for device resolution. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It usefully discloses that the operation is read-only, returns paged data, and times out after 90 seconds. However, it does not describe pagination mechanics, error behavior, or how the timeout manifests, leaving meaningful gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one compact sentence with the core purpose front-loaded and only one extra behavioral fact (90-second timeout). Every word earns its place, despite the minor punctuation issue in the second clause.
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?
This tool has 17 parameters, no required fields, no output schema, and no annotations, so the single-sentence description is insufficient. Missing context includes how to page through results, what the default response shape is, which selector (session, udid, leaseId, runId) should be preferred, and what 'daemon-owned session event timeline' implies operationally.
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 high at 88%, so the schema already documents most parameters and the baseline is 3. The description adds the 'paged' hint, which gives some context for the undocumented limit and cursor parameters, but it does not explain how to use them for pagination.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Read') and names a distinct resource ('daemon-owned session event timeline'), with 'paged JSON-friendly entries' clarifying the output style. It is clear about the tool's basic function, though it does not explicitly differentiate it from sibling tools like logs or session.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance about when to use this tool versus alternatives such as logs, session, or get. The description says what the tool reads but gives no context about selecting a session, lease, or run versus relying on defaults.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fillA
Replace text in a UI input selected by snapshot ref, selector, or coordinates. Prefer refs or selectors after snapshot; use recordAs to keep sensitive text out of a recorded replay while sending it to the live app. Times out after 90s; a caller-supplied budget extends it.
| Name | Required | Description | Default |
|---|---|---|---|
| raw | No | Use raw snapshot data during selector resolution. | |
| text | Yes | Text to enter into the target. | |
| udid | No | iOS device UDID selector. | |
| debug | No | Enable debug diagnostics. | |
| depth | No | Snapshot traversal depth. | |
| runId | No | Lease run identifier. | |
| scope | No | Snapshot scope selector used before resolution. | |
| device | No | Device name selector. | |
| serial | No | Android device or Vega VVD serial selector. | |
| settle | No | After the action, wait for the UI to go quiet and return the settled diff vs the pre-action tree in the same response. Best-effort; never fails the action. | |
| target | Yes | UI target. This is separate from deviceTarget, which selects the device form. | |
| tenant | No | Remote tenant identifier. | |
| verify | No | Capture cheap post-action evidence (AX digest, node counts, changedFromBefore) instead of a follow-up snapshot. | |
| delayMs | No | Delay between typed characters. | |
| leaseId | No | Existing lease identifier. | |
| session | No | Agent-device session name. | |
| noRecord | No | Do not record this action. | |
| platform | No | Platform selector used to resolve a device. | |
| recordAs | No | When script recording is armed, send text to the live app but publish it as ${VAR}. Use an uppercase replay variable name such as PASSWORD. | |
| timeoutMs | No | Settle: wait deadline in milliseconds (default 10000). | |
| includeCost | No | Include per-command agent-cost (cost.wallClockMs, …) in structuredContent. Defaults to off; the default response shape is unchanged. | |
| deviceTarget | No | Device target form. Maps to the CLI --target flag. | |
| responseLevel | No | Response verbosity: token-cheap digest / default (today) / full. Defaults to default; the default response shape is unchanged. | |
| settleQuietMs | No | Settle: quiet window in milliseconds (default 500). | |
| mcpOutputFormat | No | MCP text content format. Defaults to optimized agent-friendly text; use json for JSON text. Structured content is always returned separately. | |
| androidDeviceAllowlist | No | Android serial allowlist used for device resolution. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It does well by disclosing that the action replaces text, that recordAs prevents sensitive text from entering a recorded replay while still sending it to the live app, and that the operation times out after 90s unless a caller budget extends it. These are meaningful behavioral details, though it does not cover error behavior or side effects beyond the action itself.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences with no filler: purpose, targeting/recording guidance, and timeout behavior. Every sentence earns its place, and the most important information is front-loaded in the first sentence.
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 high parameter count (26) and the presence of an output schema, the description plus parameter descriptions provide a fairly complete picture. It gives the key operational context: prefer snapshot-based targets, handle sensitive text carefully, and expect a 90s upper bound. It does not explain the relationship to sibling `type`, which would make the contextual picture fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all 26 parameters in detail. The description adds value around targeting modes and recordAs, but these are also represented in the schema. Baseline 3 is appropriate because the description does not need to compensate for undocumented parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb (replace), the resource (text in a UI input), and the three targeting modes (snapshot ref, selector, coordinates). It is specific enough that an agent can understand the core function, but it does not explicitly differentiate this from the sibling tool `type`, which is a likely alternative for entering text.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives useful contextual guidance: prefer refs or selectors after a snapshot, use recordAs for sensitive text, and be aware of the 90s timeout. It does not, however, provide explicit when-not-to-use guidance or name alternatives such as `type`, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
findC
Find by text/label/value/role/id and run action Times out after 90s.
| Name | Required | Description | Default |
|---|---|---|---|
| raw | No | ||
| last | No | ||
| udid | No | iOS device UDID selector. | |
| debug | No | Enable debug diagnostics. | |
| depth | No | ||
| first | No | ||
| query | Yes | ||
| runId | No | Lease run identifier. | |
| value | No | ||
| action | No | ||
| device | No | Device name selector. | |
| record | No | Force-record this out-of-band observation into a repair-armed heal (mutually exclusive with noRecord). Authored replay steps are recorded automatically and never need this. On find, valid only for a read-only action. | |
| serial | No | Android device or Vega VVD serial selector. | |
| target | No | Alias for deviceTarget on commands without a UI target field. Interaction commands reserve target for the UI element. | |
| tenant | No | Remote tenant identifier. | |
| leaseId | No | Existing lease identifier. | |
| locator | No | ||
| session | No | Agent-device session name. | |
| noRecord | No | Do not record this action. | |
| platform | No | Platform selector used to resolve a device. | |
| timeoutMs | No | ||
| includeCost | No | Include per-command agent-cost (cost.wallClockMs, …) in structuredContent. Defaults to off; the default response shape is unchanged. | |
| deviceTarget | No | Device target form. Maps to the CLI --target flag. | |
| responseLevel | No | Response verbosity: token-cheap digest / default (today) / full. Defaults to default; the default response shape is unchanged. | |
| mcpOutputFormat | No | MCP text content format. Defaults to optimized agent-friendly text; use json for JSON text. Structured content is always returned separately. | |
| androidDeviceAllowlist | No | Android serial allowlist used for device resolution. |
Output Schema
| Name | Required | Description |
|---|---|---|
| x | No | Resolved x coordinate for mutating find actions. |
| y | No | Resolved y coordinate for mutating find actions. |
| ref | No | Snapshot ref without the @ prefix when the find action returns one. |
| cost | No | |
| node | No | Snapshot node for find get_attrs/get_text. |
| text | No | Text value returned by find get_text. |
| found | No | Whether a wait/exists/read-only find satisfied its condition. |
| query | No | Query argument used for the find action. |
| locator | No | Locator kind used for the find action. |
| matches | No | Every match for the read-only find list action (#1625): { ref, node } each. |
| message | No | Diagnostic message for mutating find actions. |
| waitedMs | No | Milliseconds waited for a read-only find condition. |
| refsGeneration | No | ADR 0014 ref frame epoch for read-only find actions. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of disclosing side effects and behavioral traits. It only reveals the 90-second timeout, and says nothing about whether the action mutates state, what happens when no element is found, how recording/repair flags behave, or whether this is safe to run repeatedly. This is insufficient for a tool that can run click, fill, type, and similar actions.
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 compact and every phrase earns its place, but it reads as a fragmented note rather than a well-structured definition. The timeout information is tacked on without context. For a tool with 26 parameters, the description is underwhelming despite being 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?
Given 26 parameters, no annotations, and a required 'query' parameter, this one-sentence description is far from complete. The output schema may describe return shape, but the description still omits essential operational context: how the find+action flow works, which actions are side-effecting, what 'Times out after 90s' means for the agent, and when to prefer sibling tools. The agent would need to infer or probe too much.
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 description adds some meaning by mapping the locator dimensions (text/label/value/role/id) to the tool's search capability and indicating an action can be run. However, schema coverage is 65% and the description does not explain the central required parameter 'query', how locator and action interact, or what the default behavior is. It adds partial value beyond the schema but does not compensate for the gaps.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action: find UI elements by text/label/value/role/id and run an action. This clearly identifies the tool's resource and compound behavior, and is not a tautology. It stops short of naming sibling tools to differentiate itself, such as get or click, but the purpose is still legible.
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 like click, fill, focus, type, wait, or get. It does not state prerequisites, typical scenarios, or exclusions. The only contextual note is the 90s timeout, which is a constraint, not a usage guideline.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
focusA
Move input focus to explicit screen coordinates without entering text. Prefer semantic interactions when a snapshot ref or selector is available; use type or fill after focus. Times out after 90s.
| Name | Required | Description | Default |
|---|---|---|---|
| x | Yes | X coordinate. | |
| y | Yes | Y coordinate. | |
| udid | No | iOS device UDID selector. | |
| debug | No | Enable debug diagnostics. | |
| runId | No | Lease run identifier. | |
| device | No | Device name selector. | |
| serial | No | Android device or Vega VVD serial selector. | |
| target | No | Alias for deviceTarget on commands without a UI target field. Interaction commands reserve target for the UI element. | |
| tenant | No | Remote tenant identifier. | |
| leaseId | No | Existing lease identifier. | |
| session | No | Agent-device session name. | |
| noRecord | No | Do not record this action. | |
| platform | No | Platform selector used to resolve a device. | |
| includeCost | No | Include per-command agent-cost (cost.wallClockMs, …) in structuredContent. Defaults to off; the default response shape is unchanged. | |
| deviceTarget | No | Device target form. Maps to the CLI --target flag. | |
| responseLevel | No | Response verbosity: token-cheap digest / default (today) / full. Defaults to default; the default response shape is unchanged. | |
| mcpOutputFormat | No | MCP text content format. Defaults to optimized agent-friendly text; use json for JSON text. Structured content is always returned separately. | |
| androidDeviceAllowlist | No | Android serial allowlist used for device resolution. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the behavioral disclosure burden. It does disclose a few non-obvious traits: coordinate-based focus, no text entry, and a 90-second timeout. However, it does not explain side effects, whether the action is effectively a tap/click, prerequisites such as element visibility, or what a successful invocation returns.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, each earning its place: the first defines the core action, the second gives routing guidance, and the third states the timeout. The description is front-loaded with the most important information and contains no redundant filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a low-complexity command with only two required parameters, the description covers the core invocation context: coordinates, non-text behavior, semantic-preference guidance, and timeout. It omits details about return values and failure behavior, but no output schema exists and the tool is simple enough that the description is reasonably complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already documents all 18 parameters with 100% coverage, including x and y coordinates. The description adds only the implicit context that coordinates are explicit screen coordinates. Since the schema carries the parameter meaning, the description does not need to compensate further.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action, 'Move input focus to explicit screen coordinates', with a clear resource and mechanism. The clause 'without entering text' directly distinguishes it from text-input siblings like type and fill. It is specific enough for an agent to know what the tool does even without inspecting the schema.
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: prefer semantic interactions when a snapshot ref or selector is available, and use type or fill after focusing. This gives the agent direction on when not to use the tool. It stops short of naming every alternative sibling, but the guidance is actionable and useful.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gestureB
Perform a structured pan, fling, swipe, pinch, rotate, transform, or drag gesture. Select the gesture kind, then provide only the inputs that apply to that kind. Times out after 90s.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | Yes | Gesture variant. | |
| udid | No | iOS device UDID selector. | |
| debug | No | Enable debug diagnostics. | |
| delta | No | Movement delta for pan or transform gestures. | |
| runId | No | Lease run identifier. | |
| scale | No | Pinch or transform scale. | |
| device | No | Device name selector. | |
| moveMs | No | Drag movement duration. | |
| origin | No | Gesture origin point. | |
| preset | No | Swipe preset. | |
| serial | No | Android device or Vega VVD serial selector. | |
| source | No | Drag source @ref or selector. | |
| target | No | Alias for deviceTarget on commands without a UI target field. Interaction commands reserve target for the UI element. | |
| tenant | No | Remote tenant identifier. | |
| degrees | No | Rotation in degrees. | |
| leaseId | No | Existing lease identifier. | |
| session | No | Agent-device session name. | |
| distance | No | Fling distance. | |
| noRecord | No | Do not record this action. | |
| platform | No | Platform selector used to resolve a device. | |
| direction | No | Fling direction. | |
| durationMs | No | Pan/transform duration. | |
| destination | No | Drag destination @ref or selector. | |
| includeCost | No | Include per-command agent-cost (cost.wallClockMs, …) in structuredContent. Defaults to off; the default response shape is unchanged. | |
| deviceTarget | No | Device target form. Maps to the CLI --target flag. | |
| pointerCount | No | Pan touch pointer count (1 or 2). | |
| sourceHoldMs | No | Drag activation hold duration. | |
| responseLevel | No | Response verbosity: token-cheap digest / default (today) / full. Defaults to default; the default response shape is unchanged. | |
| mcpOutputFormat | No | MCP text content format. Defaults to optimized agent-friendly text; use json for JSON text. Structured content is always returned separately. | |
| destinationHoldMs | No | Hold before releasing at the destination. | |
| androidDeviceAllowlist | No | Android serial allowlist used for device resolution. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It mentions that the gesture is 'structured' and that it times out after 90 seconds, but it does not describe the actual effects on the device UI, whether the gesture is recorded or replayable, what response the caller can expect, or what happens on failure. This is a significant transparency gap for a tool that performs physical user interactions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler. The first sentence front-loads the tool's capabilities, and the second sentence delivers the essential selection rule and a timeout constraint that the schema cannot express.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is high-complexity with 31 parameters, multiple device selectors, and several overlapping gesture types. The rich schema descriptions compensate for much of the missing kind-to-parameter mapping, but the description itself leaves that mapping implicit and does not address when to choose this tool over the dedicated 'swipe' sibling. This is adequate but not complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already documents all 31 parameters, so the baseline is 3. The description adds meaning beyond the schema by instructing the agent to provide only the inputs that apply to the selected gesture kind, which is critical conditional knowledge given the large number of gesture-specific parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a clear verb ('Perform') and lists the specific gesture kinds: pan, fling, swipe, pinch, rotate, transform, and drag. It does not fully distinguish the tool from the sibling 'swipe' tool, which creates some ambiguity about whether 'gesture' with kind=swipe or the dedicated 'swipe' tool should be used.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a clear usage pattern: select the gesture kind, then provide only the inputs that apply to that kind. However, it does not explain when to prefer this tool over specialized siblings like swipe, scroll, click, or longpress, nor does it state any exclusions or preconditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getA
Read text or accessibility attributes from a snapshot ref or selector without changing the app. Use format text for visible content or attrs for the element attribute map. Times out after 90s.
| Name | Required | Description | Default |
|---|---|---|---|
| raw | No | Use raw snapshot data during selector resolution. | |
| udid | No | iOS device UDID selector. | |
| debug | No | Enable debug diagnostics. | |
| depth | No | Snapshot traversal depth. | |
| runId | No | Lease run identifier. | |
| scope | No | Snapshot scope selector used before resolution. | |
| device | No | Device name selector. | |
| format | Yes | ||
| record | No | Force-record this out-of-band observation into a repair-armed heal (mutually exclusive with noRecord). Authored replay steps are recorded automatically and never need this. On find, valid only for a read-only action. | |
| serial | No | Android device or Vega VVD serial selector. | |
| target | Yes | UI element target by snapshot ref or selector expression. | |
| tenant | No | Remote tenant identifier. | |
| leaseId | No | Existing lease identifier. | |
| session | No | Agent-device session name. | |
| noRecord | No | Do not record this action. | |
| platform | No | Platform selector used to resolve a device. | |
| includeCost | No | Include per-command agent-cost (cost.wallClockMs, …) in structuredContent. Defaults to off; the default response shape is unchanged. | |
| deviceTarget | No | Device target form. Maps to the CLI --target flag. | |
| responseLevel | No | Response verbosity: token-cheap digest / default (today) / full. Defaults to default; the default response shape is unchanged. | |
| mcpOutputFormat | No | MCP text content format. Defaults to optimized agent-friendly text; use json for JSON text. Structured content is always returned separately. | |
| androidDeviceAllowlist | No | Android serial allowlist used for device resolution. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden of behavioral disclosure. It usefully states that the operation is read-only ('without changing the app') and that it times out after 90s. It does not describe return shape, failure behavior, or side effects of options like record/noRecord, but the core safety and timeout traits are disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences front-load the purpose, then cover format selection and timeout. There is no filler or repetition of schema content. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 21 parameters and no output schema or annotations, the description is minimal but the schema covers the optional parameters well. It omits return value expectations and guidance for choosing among related sibling tools, which leaves an agent to infer some usage context. It is adequate but has clear 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 description coverage is about 95%, so the schema already documents most parameters. The description adds real semantic value for the required format parameter by explaining that 'text' gives visible content and 'attrs' gives the element attribute map. This goes beyond the bare enum in 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 opens with a specific verb and resource: 'Read text or accessibility attributes from a snapshot ref or selector.' It also explicitly states the operation does not change the app, which distinguishes it from mutation-oriented siblings like click, type, and swipe. The two formats (text vs attrs) further clarify what the tool returns.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear direction on choosing between 'text' and 'attrs' formats, which is useful usage guidance. However, it does not name sibling tools such as find or snapshot, nor does it state when to prefer this tool over those alternatives. Usage context is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
helpA
Usage guides. No topic: the full workflow card. topic = one of commands, manual-qa, maestro, workflow, scripting, gestures, tv, debugging, react-devtools, cdp, react-native, physical-device, ios-system-ui, remote, macos, web, dogfood, validate for that guide, or a tool name for its complete flag reference. For specialized work or an unclear command shape only; not a startup step, not needed after an error that carries a hint.
| Name | Required | Description | Default |
|---|---|---|---|
| topic | No | Guide topic or tool name; omit for the card. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It fully discloses the behavioral modes (full card vs. specific guide, flag reference) and enumerates valid topics. It doesn't explicitly state non-mutating behavior, but that is inherent for a help tool, so it's sufficient.
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 content is dense but well-organized: it starts with a clear summary, then explains the no-topic case, then the topic list, then usage restrictions. Every phrase adds value, but it's a single long sentence that could be split for readability.
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 help tool with one optional parameter, the description is complete: it covers the default behavior, all valid inputs, alternative usage, and when to avoid the tool. No output schema is needed because the tool's return is self-evident.
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 description significantly enriches the schema's parameter description by listing all valid topics and explaining the two usage modes (omit for card, tool name for flag reference). This goes well beyond the schema's 'Guide topic or tool name; omit for the card.'
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 provides usage guides and distinguishes between the full workflow card (no topic) and specific guides/flag references (with topic). It is specific and stands apart from sibling tools.
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?
Explicit when-to-use guidance is given: 'For specialized work or an unclear command shape only; not a startup step, not needed after an error that carries a hint.' However, it does not name alternative tools for these cases, so I deduct one point.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
homeA
Send the selected device to its home screen. This leaves the app session open but moves the foreground away from the app. Times out after 90s.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | No | iOS device UDID selector. | |
| debug | No | Enable debug diagnostics. | |
| runId | No | Lease run identifier. | |
| device | No | Device name selector. | |
| serial | No | Android device or Vega VVD serial selector. | |
| target | No | Alias for deviceTarget on commands without a UI target field. Interaction commands reserve target for the UI element. | |
| tenant | No | Remote tenant identifier. | |
| leaseId | No | Existing lease identifier. | |
| session | No | Agent-device session name. | |
| noRecord | No | Do not record this action. | |
| platform | No | Platform selector used to resolve a device. | |
| includeCost | No | Include per-command agent-cost (cost.wallClockMs, …) in structuredContent. Defaults to off; the default response shape is unchanged. | |
| deviceTarget | No | Device target form. Maps to the CLI --target flag. | |
| responseLevel | No | Response verbosity: token-cheap digest / default (today) / full. Defaults to default; the default response shape is unchanged. | |
| mcpOutputFormat | No | MCP text content format. Defaults to optimized agent-friendly text; use json for JSON text. Structured content is always returned separately. | |
| androidDeviceAllowlist | No | Android serial allowlist used for device resolution. |
Output Schema
| Name | Required | Description |
|---|---|---|
| action | Yes | |
| message | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description carries the full burden, and it does add meaningful behavioral facts: the app session is preserved, the foreground is moved away, and the operation times out after 90 seconds. This goes well beyond a generic 'go home' statement, though it does not cover permissions or failure behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences front-load the primary action and then add the two most important qualifiers (session-preserving behavior and 90s timeout). There is no filler or repetition of schema 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 one-action device command, the description plus the fully documented 16-parameter schema and existing output schema provide enough to invoke it correctly. It is slightly abstract about platform-specific behavior (tv/desktop home semantics), but that 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?
Schema description coverage is 100%, so the schema already documents all 16 parameters. The description adds no tool-specific parameter meaning, which matches the baseline 3 for full schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb plus resource ('Send the selected device to its home screen') and adds a differentiating behavioral detail: the app session stays open while the foreground moves away. This distinguishes it from ambiguous navigation siblings like back or app-switcher.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'leaves the app session open but moves the foreground away' implies a use case—backgrounding the current app without closing it. However, it never explicitly names alternatives such as back or app-switcher nor gives a when-not-to-use condition, so guidance remains implied rather than direct.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hoverA
Move the pointer over a UI target by snapshot ref, selector, or coordinates without pressing, to reveal hover-gated UI such as row toolbars or menus. Web only; touch platforms have no hover state. Use settle to observe what the hover revealed without a follow-up snapshot. Times out after 90s; a caller-supplied budget extends it.
| Name | Required | Description | Default |
|---|---|---|---|
| raw | No | Use raw snapshot data during selector resolution. | |
| udid | No | iOS device UDID selector. | |
| debug | No | Enable debug diagnostics. | |
| depth | No | Snapshot traversal depth. | |
| runId | No | Lease run identifier. | |
| scope | No | Snapshot scope selector used before resolution. | |
| device | No | Device name selector. | |
| serial | No | Android device or Vega VVD serial selector. | |
| settle | No | After the action, wait for the UI to go quiet and return the settled diff vs the pre-action tree in the same response. Best-effort; never fails the action. | |
| target | Yes | UI target. This is separate from deviceTarget, which selects the device form. | |
| tenant | No | Remote tenant identifier. | |
| leaseId | No | Existing lease identifier. | |
| session | No | Agent-device session name. | |
| noRecord | No | Do not record this action. | |
| platform | No | Platform selector used to resolve a device. | |
| timeoutMs | No | Settle: wait deadline in milliseconds (default 10000). | |
| includeCost | No | Include per-command agent-cost (cost.wallClockMs, …) in structuredContent. Defaults to off; the default response shape is unchanged. | |
| deviceTarget | No | Device target form. Maps to the CLI --target flag. | |
| responseLevel | No | Response verbosity: token-cheap digest / default (today) / full. Defaults to default; the default response shape is unchanged. | |
| settleQuietMs | No | Settle: quiet window in milliseconds (default 500). | |
| mcpOutputFormat | No | MCP text content format. Defaults to optimized agent-friendly text; use json for JSON text. Structured content is always returned separately. | |
| androidDeviceAllowlist | No | Android serial allowlist used for device resolution. |
Output Schema
| Name | Required | Description |
|---|---|---|
| x | No | Resolved interaction x coordinate when available. |
| y | No | Resolved interaction y coordinate when available. |
| ref | No | Snapshot ref without the @ prefix when the target was an @ref. |
| cost | No | |
| hint | No | |
| settle | No | |
| gesture | No | |
| message | No | |
| warning | No | |
| evidence | No | |
| refLabel | No | |
| selector | No | Selector expression when the target was a selector. |
| resolution | No | Pre-action disclosure of how the acting path resolved its target. Absent when resolutionDisclosure is inapplicable for the path. |
| targetKind | Yes | Resolved interaction target kind. |
| selectorChain | No | |
| referenceWidth | No | Reference frame width for visualizing the interaction point. |
| targetHittable | No | |
| referenceHeight | No | Reference frame height for visualizing the interaction point. |
| maestroFallbackReason | No | |
| maestroNonHittableCoordinateFallbackUsed | No | Whether the direct iOS Maestro coordinate fallback was actually used. |
| maestroNonHittableCoordinateFallbackAllowed | No | Whether the direct iOS Maestro coordinate fallback was allowed for this selector. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and it uses the space well: it clarifies that the pointer moves 'without pressing', that the behavior is Web-only, that the operation times out after 90s, and that a caller-supplied budget can extend it. It also explains the settle behavior as best-effort observation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with no filler; the core action and purpose are front-loaded, followed by the essential platform constraint, workflow hint, and timeout behavior. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite 22 parameters and no annotations, the description covers the key operational facts an agent needs: how to target the element, why to use hover, when it is unavailable, how to observe the result, and the timeout bound. The rich schema and output schema cover the remaining details, so nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with all 22 parameters described, so the baseline is 3. The description adds a high-level mapping to target modes and mentions settle and timeout, but it does not add parameter-level detail beyond what the input 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 names a specific verb and resource ('Move the pointer over a UI target') and exactly how targeting can be supplied ('snapshot ref, selector, or coordinates'). It also states the reason for the action ('reveal hover-gated UI') and the platform limit ('Web only'), which distinguishes hover from click/press siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear when-to-use context: reveal hover-gated UI such as row toolbars or menus, and it excludes non-web/touch platforms ('touch platforms have no hover state'). It also suggests using settle to observe the result without a follow-up snapshot, but it does not explicitly name sibling alternatives such as click or press as the alternative for actual activation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
installA
Install an app binary from a local path. Provide an app identifier with the path when the target needs explicit app selection; use reinstall to replace an already installed app. Times out after 180s.
| Name | Required | Description | Default |
|---|---|---|---|
| app | No | Optional app identifier hint. | |
| udid | No | iOS device UDID selector. | |
| debug | No | Enable debug diagnostics. | |
| runId | No | Lease run identifier. | |
| device | No | Device name selector. | |
| serial | No | Android device or Vega VVD serial selector. | |
| target | No | Alias for deviceTarget on commands without a UI target field. Interaction commands reserve target for the UI element. | |
| tenant | No | Remote tenant identifier. | |
| appPath | Yes | Path to app binary. | |
| leaseId | No | Existing lease identifier. | |
| session | No | Agent-device session name. | |
| noRecord | No | Do not record this action. | |
| platform | No | Platform selector used to resolve a device. | |
| includeCost | No | Include per-command agent-cost (cost.wallClockMs, …) in structuredContent. Defaults to off; the default response shape is unchanged. | |
| deviceTarget | No | Device target form. Maps to the CLI --target flag. | |
| responseLevel | No | Response verbosity: token-cheap digest / default (today) / full. Defaults to default; the default response shape is unchanged. | |
| mcpOutputFormat | No | MCP text content format. Defaults to optimized agent-friendly text; use json for JSON text. Structured content is always returned separately. | |
| androidDeviceAllowlist | No | Android serial allowlist used for device resolution. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are not provided, so the description carries the burden of behavioral disclosure. It discloses a 180-second timeout but does not mention whether the operation is destructive or reversible, what side effects occur (e.g., overwriting), or what the response includes. The description adds some value with the timeout but is not rich on behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no wasted words, front-loaded with the core action and then the key exception (reinstall) and timeout. Each sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is complete enough for basic usage but lacks context about behavioral side effects, return values, or resolution semantics across the many platforms/selectors. With 18 parameters and no output schema or annotations, a bit more context about expected behavior or failure modes would help. Still, the core operation is simply stated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all 18 parameters. The description adds the note about providing an app identifier for explicit app selection, which is useful, but it doesn't go beyond that. 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 states a specific verb and resource ('Install an app binary from a local path') and distinguishes itself from the sibling tool reinstall ('use reinstall to replace an already installed app'). It also mentions explicit app selection, which helps an agent identify the tool's purpose clearly.
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 guidance on when the app identifier is needed and explicitly routes to reinstall for replacing an installed app. It does not discuss other alternatives like install-from-source or broader platform/device selection context, but the core usage context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
install-from-sourceA
Install app builds from URLs, remote source specs, or CI artifacts resolved by a remote daemon. Times out after 90s.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | No | iOS device UDID selector. | |
| debug | No | Enable debug diagnostics. | |
| runId | No | Lease run identifier. | |
| device | No | Device name selector. | |
| serial | No | Android device or Vega VVD serial selector. | |
| source | Yes | Install source object. | |
| target | No | Alias for deviceTarget on commands without a UI target field. Interaction commands reserve target for the UI element. | |
| tenant | No | Remote tenant identifier. | |
| leaseId | No | Existing lease identifier. | |
| session | No | Agent-device session name. | |
| noRecord | No | Do not record this action. | |
| platform | No | Platform selector used to resolve a device. | |
| includeCost | No | Include per-command agent-cost (cost.wallClockMs, …) in structuredContent. Defaults to off; the default response shape is unchanged. | |
| retainPaths | No | ||
| retentionMs | No | ||
| deviceTarget | No | Device target form. Maps to the CLI --target flag. | |
| responseLevel | No | Response verbosity: token-cheap digest / default (today) / full. Defaults to default; the default response shape is unchanged. | |
| mcpOutputFormat | No | MCP text content format. Defaults to optimized agent-friendly text; use json for JSON text. Structured content is always returned separately. | |
| androidDeviceAllowlist | No | Android serial allowlist used for device resolution. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It does add useful context by stating the 90-second timeout and the remote daemon resolution behavior. However, it does not disclose side effects of installation (e.g., replacing an existing app), prerequisite lease/session requirements, or failure behavior on timeout.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no filler, starting with the action verb and resource, then enumerating source types and ending with the timeout. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (19 parameters, nested source object, no output schema), the description covers the core purpose and timeout but leaves device-resolution semantics, return values, and post-install behavior entirely to the schema. This is adequate but not fully complete for an agent invoking the tool independently.
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 89%, so the baseline is 3. The description adds concrete meaning to the generic 'source' object parameter by spelling out that it can be a URL, remote source spec, or CI artifact. This is valuable beyond the schema's generic 'Install source object' description.
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 names a specific verb ('install'), a resource ('app builds'), and the source domain ('URLs, remote source specs, or CI artifacts resolved by a remote daemon'). This is specific enough to distinguish it from the sibling 'install' tool without needing to open the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly indicates when to use this tool: when the build source is a URL, remote spec, or CI artifact resolved by a remote daemon. This provides clear context, though it does not explicitly name the alternative 'install' tool or state exclusions, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
isA
Check whether a selector satisfies a UI predicate such as visible, hidden, editable, selected, focused, or text. Use wait when the condition may appear asynchronously. Times out after 90s.
| Name | Required | Description | Default |
|---|---|---|---|
| raw | No | Use raw snapshot data during selector resolution. | |
| udid | No | iOS device UDID selector. | |
| debug | No | Enable debug diagnostics. | |
| depth | No | Snapshot traversal depth. | |
| runId | No | Lease run identifier. | |
| scope | No | Snapshot scope selector used before resolution. | |
| value | No | ||
| device | No | Device name selector. | |
| record | No | Force-record this out-of-band observation into a repair-armed heal (mutually exclusive with noRecord). Authored replay steps are recorded automatically and never need this. On find, valid only for a read-only action. | |
| serial | No | Android device or Vega VVD serial selector. | |
| target | No | Alias for deviceTarget on commands without a UI target field. Interaction commands reserve target for the UI element. | |
| tenant | No | Remote tenant identifier. | |
| leaseId | No | Existing lease identifier. | |
| session | No | Agent-device session name. | |
| noRecord | No | Do not record this action. | |
| platform | No | Platform selector used to resolve a device. | |
| selector | Yes | ||
| predicate | Yes | ||
| includeCost | No | Include per-command agent-cost (cost.wallClockMs, …) in structuredContent. Defaults to off; the default response shape is unchanged. | |
| deviceTarget | No | Device target form. Maps to the CLI --target flag. | |
| responseLevel | No | Response verbosity: token-cheap digest / default (today) / full. Defaults to default; the default response shape is unchanged. | |
| mcpOutputFormat | No | MCP text content format. Defaults to optimized agent-friendly text; use json for JSON text. Structured content is always returned separately. | |
| androidDeviceAllowlist | No | Android serial allowlist used for device resolution. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Since no annotations are provided, the description carries the full burden of behavioral disclosure. It adds a useful timeout detail (90s) and implies a read-only predicate check, but it does not disclose what happens on failure, whether the check waits/retries before returning, or what the response shape looks like.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler. It front-loads the core purpose, then immediately provides the key usage alternative and the timeout constraint. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 23 parameters, no annotations, and no output schema, the description covers the essential core behavior and timeout but leaves gaps around return values, failure semantics, and how the many optional parameters affect resolution. The 87% schema coverage mitigates this, but the description is not fully complete on its own.
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 87%, so the optional parameters are mostly self-documenting. The description adds meaning to the two required parameters, `selector` and `predicate`, by explaining the relationship between them and listing example predicate values. This is helpful but does not go significantly beyond the schema's existing enum and structure.
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 function: checking whether a selector satisfies a UI predicate, with concrete examples such as visible, hidden, editable, selected, focused, or text. It also distinguishes itself from the wait sibling by explicitly naming when wait should be used 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 gives actionable guidance: use wait when the condition may appear asynchronously. This provides a clear alternative and condition for choosing between `is` and `wait`. However, it does not explicitly compare against other related siblings like `find` or `snapshot`, so usage context is good but not fully exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
keyboardA
Inspect Android keyboard visibility/type or press/dismiss the device keyboard. To hide the keyboard, use keyboard dismiss. It taps the keyboard dismiss/hide key when one is exposed, verifies the keyboard closed, and reports UNSUPPORTED_OPERATION when no dismiss key exists — background taps are never attempted. Times out after 90s.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | No | iOS device UDID selector. | |
| debug | No | Enable debug diagnostics. | |
| runId | No | Lease run identifier. | |
| action | No | ||
| device | No | Device name selector. | |
| serial | No | Android device or Vega VVD serial selector. | |
| target | No | Alias for deviceTarget on commands without a UI target field. Interaction commands reserve target for the UI element. | |
| tenant | No | Remote tenant identifier. | |
| leaseId | No | Existing lease identifier. | |
| session | No | Agent-device session name. | |
| noRecord | No | Do not record this action. | |
| platform | No | Platform selector used to resolve a device. | |
| includeCost | No | Include per-command agent-cost (cost.wallClockMs, …) in structuredContent. Defaults to off; the default response shape is unchanged. | |
| deviceTarget | No | Device target form. Maps to the CLI --target flag. | |
| responseLevel | No | Response verbosity: token-cheap digest / default (today) / full. Defaults to default; the default response shape is unchanged. | |
| mcpOutputFormat | No | MCP text content format. Defaults to optimized agent-friendly text; use json for JSON text. Structured content is always returned separately. | |
| androidDeviceAllowlist | No | Android serial allowlist used for device resolution. |
Output Schema
| Name | Required | Description |
|---|---|---|
| type | No | |
| action | Yes | |
| message | No | |
| visible | No | |
| attempts | No | |
| platform | Yes | |
| dismissed | No | |
| inputType | No | |
| inputOwner | No | |
| wasVisible | No | |
| focusedPackage | No | |
| focusedResourceId | No | |
| inputMethodPackage | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and does so well: it taps the dismiss/hide key, verifies the keyboard closed, reports UNSUPPORTED_OPERATION when no dismiss key exists, never background-taps, and times out after 90s. Behavior for status, enter, and return actions is not covered, but the dismiss workflow is thoroughly disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three front-loaded sentences covering purpose, usage, edge cases, and timeout with no filler. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The dismiss workflow is fully described, inspection is mentioned, and output schema handles return values. Minor gaps remain: enter/return semantics are not explicit, and the Android-specific phrasing may not fully align with the broader platform selectors in the schema.
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 94%, so the baseline is 3 and the description need not repeat parameter docs. It does add action-level meaning for dismiss and status, but enter and return are left to inference from their enum names.
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 identifies the keyboard as the resource and names specific actions: inspect visibility/type, press, and dismiss. It does not explicitly differentiate from sibling tools like type or press, so it stops short of full distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit usage context for the dismiss path: 'To hide the keyboard, use keyboard dismiss.' It lacks when-not-to-use guidance and does not name alternative tools, so there is clear context but no exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
logsC
Session app log info, start/stop streaming, diagnostics, and markers Times out after 90s.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | No | iOS device UDID selector. | |
| debug | No | Enable debug diagnostics. | |
| runId | No | Lease run identifier. | |
| action | No | ||
| device | No | Device name selector. | |
| serial | No | Android device or Vega VVD serial selector. | |
| target | No | Alias for deviceTarget on commands without a UI target field. Interaction commands reserve target for the UI element. | |
| tenant | No | Remote tenant identifier. | |
| leaseId | No | Existing lease identifier. | |
| message | No | ||
| restart | No | ||
| session | No | Agent-device session name. | |
| platform | No | Platform selector used to resolve a device. | |
| includeCost | No | Include per-command agent-cost (cost.wallClockMs, …) in structuredContent. Defaults to off; the default response shape is unchanged. | |
| deviceTarget | No | Device target form. Maps to the CLI --target flag. | |
| responseLevel | No | Response verbosity: token-cheap digest / default (today) / full. Defaults to default; the default response shape is unchanged. | |
| mcpOutputFormat | No | MCP text content format. Defaults to optimized agent-friendly text; use json for JSON text. Structured content is always returned separately. | |
| androidDeviceAllowlist | No | Android serial allowlist used for device resolution. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the full behavioral burden. It discloses the timeout ('Times out after 90s') but does not explain side effects of actions such as clear, whether streaming requires explicit cleanup, what diagnostics or markers do, or what the response contains. For a tool with mutating actions, this is a significant transparency gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and packs key information into a compact form. However, it is poorly structured: the final clause runs together as '...markers Times out after 90s,' which reads ambiguously and lacks clean sentence separation. It is concise but not well formatted.
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 18 parameters, 6 enums, no required fields, no output schema, and no annotations, the description is incomplete. It does not explain how actions relate to the many selectors, what combinations are valid, what the output looks like, or what the distinction is among path, start, stop, doctor, mark, and clear. An agent cannot reliably know how to invoke this tool correctly from the description alone.
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 high at 83%, so the baseline is 3. The description only loosely aligns with parameters: 'start/stop streaming' maps to start/stop actions, 'diagnostics' to doctor, and 'markers' to mark/clear. It adds no parameter-level detail 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 names the resource and main capabilities: 'Session app log info, start/stop streaming, diagnostics, and markers.' However, it lacks a main verb and is a noun-phrase list, so the agent must infer the actual operation. It also doesn't differentiate from sibling tools like events, trace, or perf, which could overlap with log/streaming functionality.
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 the tool: for session app log info, streaming, diagnostics, and markers. It also gives a useful constraint with 'Times out after 90s.' However, it never explicitly states when not to use it or which sibling tool to choose instead, leaving the agent to infer applicability.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
longpressA
Hold a UI target by snapshot ref, selector, or coordinates to open a context menu or perform another hold gesture. Set durationMs when the default hold duration is unsuitable. Times out after 210s; a caller-supplied budget extends it.
| Name | Required | Description | Default |
|---|---|---|---|
| raw | No | Use raw snapshot data during selector resolution. | |
| udid | No | iOS device UDID selector. | |
| debug | No | Enable debug diagnostics. | |
| depth | No | Snapshot traversal depth. | |
| runId | No | Lease run identifier. | |
| scope | No | Snapshot scope selector used before resolution. | |
| device | No | Device name selector. | |
| serial | No | Android device or Vega VVD serial selector. | |
| settle | No | After the action, wait for the UI to go quiet and return the settled diff vs the pre-action tree in the same response. Best-effort; never fails the action. | |
| target | Yes | UI target. This is separate from deviceTarget, which selects the device form. | |
| tenant | No | Remote tenant identifier. | |
| leaseId | No | Existing lease identifier. | |
| session | No | Agent-device session name. | |
| noRecord | No | Do not record this action. | |
| platform | No | Platform selector used to resolve a device. | |
| timeoutMs | No | Settle: wait deadline in milliseconds (default 10000). | |
| durationMs | No | Long press duration in milliseconds. | |
| includeCost | No | Include per-command agent-cost (cost.wallClockMs, …) in structuredContent. Defaults to off; the default response shape is unchanged. | |
| deviceTarget | No | Device target form. Maps to the CLI --target flag. | |
| responseLevel | No | Response verbosity: token-cheap digest / default (today) / full. Defaults to default; the default response shape is unchanged. | |
| settleQuietMs | No | Settle: quiet window in milliseconds (default 500). | |
| mcpOutputFormat | No | MCP text content format. Defaults to optimized agent-friendly text; use json for JSON text. Structured content is always returned separately. | |
| androidDeviceAllowlist | No | Android serial allowlist used for device resolution. |
Output Schema
| Name | Required | Description |
|---|---|---|
| x | No | Resolved interaction x coordinate when available. |
| y | No | Resolved interaction y coordinate when available. |
| ref | No | Snapshot ref without the @ prefix when the target was an @ref. |
| cost | No | |
| hint | No | |
| settle | No | |
| gesture | No | |
| message | No | |
| warning | No | |
| evidence | No | |
| refLabel | No | |
| selector | No | Selector expression when the target was a selector. |
| durationMs | No | |
| resolution | No | Pre-action disclosure of how the acting path resolved its target. Absent when resolutionDisclosure is inapplicable for the path. |
| targetKind | Yes | Resolved interaction target kind. |
| selectorChain | No | |
| referenceWidth | No | Reference frame width for visualizing the interaction point. |
| targetHittable | No | |
| referenceHeight | No | Reference frame height for visualizing the interaction point. |
| maestroFallbackReason | No | |
| maestroNonHittableCoordinateFallbackUsed | No | Whether the direct iOS Maestro coordinate fallback was actually used. |
| maestroNonHittableCoordinateFallbackAllowed | No | Whether the direct iOS Maestro coordinate fallback was allowed for this selector. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral burden. It discloses the 210s timeout, the existence of a caller-supplied budget to extend it, and the default hold duration behavior around durationMs—all beyond what the schema states. It does not detail failure modes or side effects, but the output schema helps cover response shape.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the action and resource, then purpose, optional override, and timeout. Every sentence earns its place with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 23 parameters and no annotations, the description covers the most critical aspects: what the tool does, how to specify the target, the duration override, and the timeout behavior. The extensive schema and output schema document the remaining parameters and return shape, making this adequately complete without being verbose.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds genuine meaning by clarifying that durationMs overrides an unsuitable default, and by summarizing the three target variants (ref, selector, coordinates) in plain language. This goes beyond the schema's raw descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with the specific verb 'Hold' and identifies the resource (a UI target) along with the three accepted target forms: snapshot ref, selector, and coordinates. It also states the intended outcome ('open a context menu or perform another hold gesture'), which clearly separates it from sibling tools like click or 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?
The description gives clear usage context by stating the purpose (context menu or hold gesture) and offers a conditional parameter guidance ('Set durationMs when the default hold duration is unsuitable'). It does not explicitly name alternatives or when-not-to-use, so it stops short of a 5, but the context is clear enough for an agent to select it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
metroA
Prepare a React Native development server or ask connected apps to reload, using the development server this session is bound to. Provide explicit runtime inputs only to override that binding for one call. The binding is cleared when the session closes, and a fresh open without runtime hints also clears any leftover binding from a previous same-name session. Times out after 90s.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | ||
| port | No | ||
| udid | No | iOS device UDID selector. | |
| debug | No | Enable debug diagnostics. | |
| runId | No | Lease run identifier. | |
| action | Yes | ||
| device | No | Device name selector. | |
| serial | No | Android device or Vega VVD serial selector. | |
| target | No | Alias for deviceTarget on commands without a UI target field. Interaction commands reserve target for the UI element. | |
| tenant | No | Remote tenant identifier. | |
| leaseId | No | Existing lease identifier. | |
| logPath | No | ||
| session | No | Agent-device session name. | |
| platform | No | Platform selector used to resolve a device. | |
| bundleUrl | No | ||
| launchUrl | No | ||
| metroHost | No | ||
| metroPort | No | ||
| timeoutMs | No | ||
| listenHost | No | ||
| statusHost | No | ||
| bridgeScope | No | ||
| includeCost | No | Include per-command agent-cost (cost.wallClockMs, …) in structuredContent. Defaults to off; the default response shape is unchanged. | |
| projectRoot | No | ||
| deviceTarget | No | Device target form. Maps to the CLI --target flag. | |
| publicBaseUrl | No | ||
| responseLevel | No | Response verbosity: token-cheap digest / default (today) / full. Defaults to default; the default response shape is unchanged. | |
| reuseExisting | No | ||
| probeTimeoutMs | No | ||
| mcpOutputFormat | No | MCP text content format. Defaults to optimized agent-friendly text; use json for JSON text. Structured content is always returned separately. | |
| runtimeFilePath | No | ||
| startupTimeoutMs | No | ||
| androidDeviceAllowlist | No | Android serial allowlist used for device resolution. | |
| installDependenciesIfNeeded | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden of behavioral disclosure. It explains the session binding lifecycle, override semantics, clearing behavior on session close, and the 90-second timeout. It does not mention side effects or return values, but the disclosed behaviors are meaningful for an agent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences with no filler, front-loading the core action and resource. It packs binding behavior and timeout into a compact structure that is easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a high-complexity tool with 34 parameters, no output schema, and no annotations. The description covers key operational behavior like binding, override, and timeout, but it omits output shape, prerequisite conditions, and any guidance for resolving devices or selecting among the many parameters.
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 only 44%, so the description should compensate for undocumented parameters, but it does not. The only parameter-related guidance is the general 'runtime inputs' override statement, which does not clarify the many selectors, timeouts, hosts, or flags in 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: preparing a React Native development server or asking connected apps to reload. It names the resource (the session-bound Metro dev server), but it does not explicitly distinguish itself from siblings like react-native or open.
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: the tool uses a session-bound development server, and runtime inputs can override that binding for one call. It does not explicitly name alternatives or states when not to use the tool, but the binding and override behavior are practical and specific.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
networkB
Dump recent HTTP(s) traffic parsed from the session app log Times out after 90s.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | No | iOS device UDID selector. | |
| debug | No | Enable debug diagnostics. | |
| limit | No | ||
| runId | No | Lease run identifier. | |
| action | No | ||
| device | No | Device name selector. | |
| serial | No | Android device or Vega VVD serial selector. | |
| target | No | Alias for deviceTarget on commands without a UI target field. Interaction commands reserve target for the UI element. | |
| tenant | No | Remote tenant identifier. | |
| include | No | ||
| leaseId | No | Existing lease identifier. | |
| session | No | Agent-device session name. | |
| platform | No | Platform selector used to resolve a device. | |
| includeCost | No | Include per-command agent-cost (cost.wallClockMs, …) in structuredContent. Defaults to off; the default response shape is unchanged. | |
| deviceTarget | No | Device target form. Maps to the CLI --target flag. | |
| responseLevel | No | Response verbosity: token-cheap digest / default (today) / full. Defaults to default; the default response shape is unchanged. | |
| mcpOutputFormat | No | MCP text content format. Defaults to optimized agent-friendly text; use json for JSON text. Structured content is always returned separately. | |
| androidDeviceAllowlist | No | Android serial allowlist used for device resolution. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses two useful behaviors: traffic is parsed from the app log rather than captured live, and the operation times out after 90 seconds. However, with no annotations, it does not state whether the operation is read-only, what happens on timeout, or whether an existing session/lease is required.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence with the action front-loaded and the timeout constraint appended; there is no filler or redundant restatement. The missing period between 'log' and 'Times' is a minor formatting slip, but the structure is otherwise efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An 18-parameter tool with no output schema and no annotations requires more behavioral and selection context than this. The description leaves device resolution, action semantics, include levels, and return shape almost entirely to the schema, which itself has undocumented enums.
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 83%, so most parameter documentation is already in the schema. The description adds no parameter-level meaning; notably, the action enum (dump/log) and include enum (summary/headers/body/all) lack explanations in the schema and are not clarified here.
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?
Identifies a specific action (dump), resource (HTTP(s) traffic), and source (session app log). It does not explicitly contrast with siblings like logs or trace, but the HTTP(s) traffic specificity narrows the purpose enough to be useful.
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 when-to-use guidance is provided, and no alternatives or exclusions are mentioned. The phrase 'from the session app log' implies context but does not explain prerequisites, session selection, or how this differs from sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
openA
Boot the selected device when needed, then open an app, deep link, or URL in a session. Use the app or URL inputs to choose what becomes the foreground automation target. Metro and debug runtime hints given here are recorded as the session's dev-server binding, so a later reload reuses them; a fresh open without them clears any binding left by a previous same-name session. Times out after 90s.
| Name | Required | Description | Default |
|---|---|---|---|
| app | No | App name, bundle id, package, or URL. | |
| url | No | Optional URL passed with an app shell. | |
| udid | No | iOS device UDID selector. | |
| debug | No | Enable debug diagnostics. | |
| force | No | Overwrite an existing --save-script target instead of refusing (alias: --overwrite). | |
| runId | No | Lease run identifier. | |
| device | No | Device name selector. | |
| serial | No | Android device or Vega VVD serial selector. | |
| target | No | Alias for deviceTarget on commands without a UI target field. Interaction commands reserve target for the UI element. | |
| tenant | No | Remote tenant identifier. | |
| leaseId | No | Existing lease identifier. | |
| session | No | Agent-device session name. | |
| surface | No | macOS presentation surface to open: the app itself, the frontmost app, the desktop, or the menu bar. | |
| testIme | No | Activate the headless Android test IME for deterministic Unicode text entry (default on for emulators; opt-in on real devices). | |
| activity | No | Android activity name. | |
| noRecord | No | Do not record this action. | |
| platform | No | Platform selector used to resolve a device. | |
| relaunch | No | Force relaunch. | |
| bundleUrl | No | Session-scoped bundle URL hint applied to the opened app. | |
| deviceHub | No | Use Xcode Device Hub when surfacing Apple simulators. | |
| launchUrl | No | Session-scoped launch URL hint applied to the opened app. | |
| metroHost | No | Session-scoped Metro/debug host hint applied to the opened app. | |
| metroPort | No | Session-scoped Metro/debug port hint applied to the opened app. On an emulator/simulator the host defaults to the loopback alias (Android 10.0.2.2, iOS 127.0.0.1) when --metro-host is omitted; physical devices still require an explicit --metro-host. | |
| foreground | No | Include an initial interactive snapshot in a fresh open response. With no app argument, discover the sole running app on the sole booted iOS simulator; ambiguous environments fail closed. | |
| launchArgs | No | Launch arguments forwarded verbatim to the platform launch command. | |
| saveScript | No | ||
| includeCost | No | Include per-command agent-cost (cost.wallClockMs, …) in structuredContent. Defaults to off; the default response shape is unchanged. | |
| deviceTarget | No | Device target form. Maps to the CLI --target flag. | |
| launchConsole | No | Launch console mode. | |
| responseLevel | No | Response verbosity: token-cheap digest / default (today) / full. Defaults to default; the default response shape is unchanged. | |
| mcpOutputFormat | No | MCP text content format. Defaults to optimized agent-friendly text; use json for JSON text. Structured content is always returned separately. | |
| androidDeviceAllowlist | No | Android serial allowlist used for device resolution. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the disclosure burden and does a solid job: it reveals the boot side effect, the session-bound Metro/debug hint persistence and clearing behavior, and the 90-second timeout. It could also mention response or failure behavior, but the most decision-relevant side effects are disclosed.
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?
Four dense sentences, no filler; core purpose is front-loaded, followed by selection guidance, binding behavior, and timeout. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 32-parameter tool with no annotations and no output schema, the description covers the core workflow, session binding semantics, and timeout, which are the main non-obvious facts an agent needs. It does not enumerate output/response behavior or advanced flags, but the rich schema descriptions cover the parameter space, so the description is reasonably complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 97%, so the schema already documents most parameters; the description adds meaning beyond the schema by explaining the relationship between app/URL inputs and the foreground automation target, and by describing how Metro/debug hints become reusable session bindings. That extra context maps to parameters like metroHost and metroPort in a way the schema alone does not.
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 identifies a specific action—boot the selected device when needed, then open an app, deep link, or URL in a session—and adds the foreground-target qualifier, which differentiates it from generic actions like boot or apps. It does not explicitly name sibling alternatives, so it stops just short of the highest bar.
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?
It provides clear context for when to use the tool ('when needed', 'use app or URL inputs') and explains how the session binding behaves on repeated opens. It does not state exclusions or name alternatives, but the guidance is enough to select it appropriately among the sibling list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
orientationB
Set device orientation on iOS and Android Times out after 90s.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | No | iOS device UDID selector. | |
| debug | No | Enable debug diagnostics. | |
| runId | No | Lease run identifier. | |
| device | No | Device name selector. | |
| serial | No | Android device or Vega VVD serial selector. | |
| target | No | Alias for deviceTarget on commands without a UI target field. Interaction commands reserve target for the UI element. | |
| tenant | No | Remote tenant identifier. | |
| leaseId | No | Existing lease identifier. | |
| session | No | Agent-device session name. | |
| noRecord | No | Do not record this action. | |
| platform | No | Platform selector used to resolve a device. | |
| includeCost | No | Include per-command agent-cost (cost.wallClockMs, …) in structuredContent. Defaults to off; the default response shape is unchanged. | |
| orientation | Yes | ||
| deviceTarget | No | Device target form. Maps to the CLI --target flag. | |
| responseLevel | No | Response verbosity: token-cheap digest / default (today) / full. Defaults to default; the default response shape is unchanged. | |
| mcpOutputFormat | No | MCP text content format. Defaults to optimized agent-friendly text; use json for JSON text. Structured content is always returned separately. | |
| androidDeviceAllowlist | No | Android serial allowlist used for device resolution. |
Output Schema
| Name | Required | Description |
|---|---|---|
| action | Yes | |
| message | Yes | |
| orientation | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral burden. It does disclose one useful operational trait: the command times out after 90 seconds. However, it does not mention side effects, session requirements, failure modes, or what happens to current device state, so transparency is only partial.
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 and front-loads the action verb. The only structural issue is the missing punctuation/space between 'Android' and 'Times', which slightly harms readability, but every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The output schema exists and parameter schema coverage is strong, so return values and most parameters are already handled. Still, for a 17-parameter tool with no annotations, the description lacks usage guidance and behavioral context beyond the timeout, making it only minimally complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is high at 94%, so the baseline is 3. The description adds the high-level intent of the required 'orientation' parameter, which lacks a schema description, but it does not explain orientation value semantics or how device selectors resolve, leaving the schema to carry most parameter meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific action and resource: 'Set device orientation', and narrows scope to iOS and Android. It is distinct from every sibling tool because orientation is the only rotation-related command, but it does not explicitly differentiate itself from a similar sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance about when to use this tool versus any alternative, nor any exclusion criteria. The only implied usage context is 'iOS and Android', but no explicit when-to-use or when-not-to-use instructions are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
perfA
Collect frame health, memory diagnostics, and platform profiling artifacts with compact agent-readable summaries. For CPU profiles, start and stop write the raw artifact while report writes a compact summary; request the report when the task needs readable native CPU evidence. Profiling output is evidence only: compact state, artifact path, and size. Times out after 90s.
| Name | Required | Description | Default |
|---|---|---|---|
| out | No | Output artifact path. | |
| area | Yes | ||
| kind | No | ||
| udid | No | iOS device UDID selector. | |
| debug | No | Enable debug diagnostics. | |
| runId | No | Lease run identifier. | |
| action | No | ||
| device | No | Device name selector. | |
| serial | No | Android device or Vega VVD serial selector. | |
| target | No | Alias for deviceTarget on commands without a UI target field. Interaction commands reserve target for the UI element. | |
| tenant | No | Remote tenant identifier. | |
| leaseId | No | Existing lease identifier. | |
| session | No | Agent-device session name. | |
| subject | No | ||
| noRecord | No | Do not record this action. | |
| platform | No | Platform selector used to resolve a device. | |
| template | No | xctrace template name, for example Time Profiler. | |
| tracePath | No | Existing .trace path to report, defaults to the latest session trace. | |
| includeCost | No | Include per-command agent-cost (cost.wallClockMs, …) in structuredContent. Defaults to off; the default response shape is unchanged. | |
| deviceTarget | No | Device target form. Maps to the CLI --target flag. | |
| responseLevel | No | Response verbosity: token-cheap digest / default (today) / full. Defaults to default; the default response shape is unchanged. | |
| mcpOutputFormat | No | MCP text content format. Defaults to optimized agent-friendly text; use json for JSON text. Structured content is always returned separately. | |
| androidDeviceAllowlist | No | Android serial allowlist used for device resolution. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral disclosure burden. It states that profiling output is evidence only with compact state, artifact path, and size, and discloses the 90-second timeout. It also clarifies the raw-artifact vs. summary behavior for CPU profiling, though it leaves sample/snapshot specifics and any side effects of starting a profile somewhat implicit.
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 compact and front-loaded: it opens with the tool's core purpose, then adds action guidance, output expectations, and the timeout. Every sentence contributes useful information with minimal 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?
The description covers output shape and timeout, which is important since there is no output schema. However, this tool has 23 parameters and no annotations, and the description does not cover area/kind/action interactions, default behavior, or device/tenant resolution context. It is adequate for common CPU profiling use but leaves notable gaps for memory, frame, and trace workflows.
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 high at 83%, so the baseline is 3. The description adds meaning beyond the schema by explaining how action values start, stop, and report behave for CPU profiles, and by tying output to artifact paths and compact summaries. It does not fully explain all action variants like sample or snapshot, but the added action semantics are valuable.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'Collect frame health, memory diagnostics, and platform profiling artifacts.' It clearly identifies the tool's domain and distinguishes it from generic UI or device tools like screenshot, click, and trace by focusing on profiling evidence and compact summaries.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives concrete guidance for CPU profiles: start and stop write the raw artifact while report writes a compact summary, and the report should be requested when readable native CPU evidence is needed. It does not name alternative tools explicitly, but it provides clear in-tool action selection guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pressA
Short-press a UI target by snapshot ref, selector, or coordinates. Use longpress instead when the target requires a context-menu or hold gesture. Times out after 90s; a caller-supplied budget extends it.
| Name | Required | Description | Default |
|---|---|---|---|
| raw | No | Use raw snapshot data during selector resolution. | |
| udid | No | iOS device UDID selector. | |
| count | No | Number of press/click repetitions. | |
| debug | No | Enable debug diagnostics. | |
| depth | No | Snapshot traversal depth. | |
| runId | No | Lease run identifier. | |
| scope | No | Snapshot scope selector used before resolution. | |
| device | No | Device name selector. | |
| holdMs | No | Hold duration for each action. | |
| serial | No | Android device or Vega VVD serial selector. | |
| settle | No | After the action, wait for the UI to go quiet and return the settled diff vs the pre-action tree in the same response. Best-effort; never fails the action. | |
| target | Yes | UI target. This is separate from deviceTarget, which selects the device form. | |
| tenant | No | Remote tenant identifier. | |
| verify | No | Capture cheap post-action evidence (AX digest, node counts, changedFromBefore) instead of a follow-up snapshot. | |
| leaseId | No | Existing lease identifier. | |
| session | No | Agent-device session name. | |
| jitterPx | No | Randomization radius in pixels. | |
| noRecord | No | Do not record this action. | |
| platform | No | Platform selector used to resolve a device. | |
| doubleTap | No | Request a double-tap action. | |
| timeoutMs | No | Settle: wait deadline in milliseconds (default 10000). | |
| intervalMs | No | Delay between repeated press/click actions. | |
| includeCost | No | Include per-command agent-cost (cost.wallClockMs, …) in structuredContent. Defaults to off; the default response shape is unchanged. | |
| deviceTarget | No | Device target form. Maps to the CLI --target flag. | |
| responseLevel | No | Response verbosity: token-cheap digest / default (today) / full. Defaults to default; the default response shape is unchanged. | |
| settleQuietMs | No | Settle: quiet window in milliseconds (default 500). | |
| mcpOutputFormat | No | MCP text content format. Defaults to optimized agent-friendly text; use json for JSON text. Structured content is always returned separately. | |
| androidDeviceAllowlist | No | Android serial allowlist used for device resolution. |
Output Schema
| Name | Required | Description |
|---|---|---|
| x | No | Resolved interaction x coordinate when available. |
| y | No | Resolved interaction y coordinate when available. |
| ref | No | Snapshot ref without the @ prefix when the target was an @ref. |
| cost | No | |
| hint | No | |
| count | No | Number of press/click repetitions. |
| button | No | |
| holdMs | No | Hold duration for each action. |
| settle | No | |
| message | No | |
| warning | No | |
| evidence | No | |
| jitterPx | No | Randomization radius in pixels. |
| refLabel | No | |
| selector | No | Selector expression when the target was a selector. |
| doubleTap | No | Whether the command requested a double-tap action. |
| intervalMs | No | Delay between repeated press/click actions. |
| resolution | No | Pre-action disclosure of how the acting path resolved its target. Absent when resolutionDisclosure is inapplicable for the path. |
| targetKind | Yes | Resolved interaction target kind. |
| selectorChain | No | |
| referenceWidth | No | Reference frame width for visualizing the interaction point. |
| targetHittable | No | |
| referenceHeight | No | Reference frame height for visualizing the interaction point. |
| maestroFallbackReason | No | |
| maestroNonHittableCoordinateFallbackUsed | No | Whether the direct iOS Maestro coordinate fallback was actually used. |
| maestroNonHittableCoordinateFallbackAllowed | No | Whether the direct iOS Maestro coordinate fallback was allowed for this selector. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden of behavioral disclosure. It adds a useful timeout behavior and the existence of a caller-supplied budget, but it does not describe expected side effects, safety implications of pressing arbitrary UI elements, or whether this is a low-level input injection vs. a semantic click. That leaves a notable transparency gap for an interaction tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with no filler: purpose first, alternative second, timeout behavior third. Every sentence earns its place and the most decision-relevant 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?
Given a complex 28-parameter schema but full schema coverage and an output schema, the description provides the core invocation contract: short-press action, target forms, key alternative, and timeout behavior. It could add more orientation about device resolution or optional verification modes, but the schema already supplies those details sufficiently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 100% description coverage, so the description is not obligated to re-explain parameters. It does restate the three target forms, but those are already encoded in the target oneOf schema, so it adds little beyond the structured definitions.
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 names a specific verb ('Short-press'), the resource ('UI target'), and the three supported targeting mechanisms ('snapshot ref, selector, or coordinates'), which map directly to the schema. It also distinguishes this tool from the sibling longpress by clarifying this is the short-press variant.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to prefer longpress instead: when the target 'requires a context-menu or hold gesture.' This is a direct, actionable when-not/alternative rule that helps an agent choose between two closely related tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pushB
Deliver push notification payloads to an installed app. Times out after 90s.
| Name | Required | Description | Default |
|---|---|---|---|
| app | Yes | ||
| udid | No | iOS device UDID selector. | |
| debug | No | Enable debug diagnostics. | |
| runId | No | Lease run identifier. | |
| device | No | Device name selector. | |
| serial | No | Android device or Vega VVD serial selector. | |
| target | No | Alias for deviceTarget on commands without a UI target field. Interaction commands reserve target for the UI element. | |
| tenant | No | Remote tenant identifier. | |
| leaseId | No | Existing lease identifier. | |
| payload | Yes | ||
| session | No | Agent-device session name. | |
| noRecord | No | Do not record this action. | |
| platform | No | Platform selector used to resolve a device. | |
| includeCost | No | Include per-command agent-cost (cost.wallClockMs, …) in structuredContent. Defaults to off; the default response shape is unchanged. | |
| deviceTarget | No | Device target form. Maps to the CLI --target flag. | |
| responseLevel | No | Response verbosity: token-cheap digest / default (today) / full. Defaults to default; the default response shape is unchanged. | |
| mcpOutputFormat | No | MCP text content format. Defaults to optimized agent-friendly text; use json for JSON text. Structured content is always returned separately. | |
| androidDeviceAllowlist | No | Android serial allowlist used for device resolution. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral disclosure burden. It does add one useful non-schema fact — a 90-second timeout — but it does not mention side effects on the app/device, delivery guarantees, failure modes, or whether the notification can wake or alter app state.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences: the first states the action, the second adds a concrete timeout constraint. There is no filler, and the most important 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?
Despite the output schema covering return values, this is a complex 18-parameter tool with no annotations. A single-line description does not explain how to choose among platform/device/target selectors, what payload forms are acceptable, what prerequisites must hold, or what happens after the push is delivered. The schema helps, but operational context remains largely missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is approximately 89%, so the parameter schema already documents most fields well. The description adds no parameter-level meaning; it does not elaborate on payload shape, device selection, or how the various selectors interact.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb ('Deliver'), a specific resource ('push notification payloads'), and the target context ('an installed app'). This makes it easy to distinguish from siblings like click, type, or install, even without naming an alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this tool versus alternatives, no prerequisites, and no conditions or exclusions. Usage must be inferred entirely from the one-line purpose, which is insufficient for a command with 18 parameters and many sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
react-nativeA
Run supported React Native automation helpers. Use dismiss-overlay to close a visible development error overlay before continuing normal UI automation. Times out after 90s.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | No | iOS device UDID selector. | |
| debug | No | Enable debug diagnostics. | |
| runId | No | Lease run identifier. | |
| action | Yes | ||
| device | No | Device name selector. | |
| serial | No | Android device or Vega VVD serial selector. | |
| target | No | Alias for deviceTarget on commands without a UI target field. Interaction commands reserve target for the UI element. | |
| tenant | No | Remote tenant identifier. | |
| leaseId | No | Existing lease identifier. | |
| session | No | Agent-device session name. | |
| noRecord | No | Do not record this action. | |
| platform | No | Platform selector used to resolve a device. | |
| includeCost | No | Include per-command agent-cost (cost.wallClockMs, …) in structuredContent. Defaults to off; the default response shape is unchanged. | |
| deviceTarget | No | Device target form. Maps to the CLI --target flag. | |
| responseLevel | No | Response verbosity: token-cheap digest / default (today) / full. Defaults to default; the default response shape is unchanged. | |
| mcpOutputFormat | No | MCP text content format. Defaults to optimized agent-friendly text; use json for JSON text. Structured content is always returned separately. | |
| androidDeviceAllowlist | No | Android serial allowlist used for device resolution. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the behavioral burden. It adds a 90s timeout and identifies the action as dismissing the RN dev overlay, which is useful. It does not disclose what happens when no overlay is present, whether the action is disruptive, or what a successful result looks like.
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 convey the tool's scope, the concrete action, the condition for using it, and a timeout. It is front-loaded with the general purpose and specific use, with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-action automation tool with a generous schema, the description covers the key trigger and the timeout. However, there is no output schema and no mention of return format, error conditions, or behavior when the overlay is absent, leaving an agent to guess at success/failure semantics.
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 94%, and the schema documents all 17 common parameters with descriptions and enums. The description adds no parameter-specific meaning, but the schema already provides the needed detail for the only action and selectors; 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?
Description identifies the tool as handling React Native automation helpers and specifically names the dismiss-overlay action with its purpose: closing a visible development error overlay. Without inspecting the schema, an agent can infer what invocation achieves. It is not fully distinguished from sibling tools, but its specific use case is clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Description states when to use it: after a development error overlay appears, before continuing normal UI automation. It does not name alternative tools or exclusions, but the tool's single action and targeted condition make the usage context reasonably unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
recordA
Start or stop a screen recording for the active app session or, where supported, the selected device. Long Android recordings can return multiple video artifacts; HarmonyOS supports whole-screen recording on physical devices. Times out after 90s.
| Name | Required | Description | Default |
|---|---|---|---|
| fps | No | ||
| path | No | ||
| udid | No | iOS device UDID selector. | |
| debug | No | Enable debug diagnostics. | |
| runId | No | Lease run identifier. | |
| action | Yes | ||
| device | No | Device name selector. | |
| serial | No | Android device or Vega VVD serial selector. | |
| target | No | Alias for deviceTarget on commands without a UI target field. Interaction commands reserve target for the UI element. | |
| tenant | No | Remote tenant identifier. | |
| leaseId | No | Existing lease identifier. | |
| quality | No | ||
| session | No | Agent-device session name. | |
| noRecord | No | Do not record this action. | |
| platform | No | Platform selector used to resolve a device. | |
| hideTouches | No | ||
| includeCost | No | Include per-command agent-cost (cost.wallClockMs, …) in structuredContent. Defaults to off; the default response shape is unchanged. | |
| deviceTarget | No | Device target form. Maps to the CLI --target flag. | |
| responseLevel | No | Response verbosity: token-cheap digest / default (today) / full. Defaults to default; the default response shape is unchanged. | |
| recordingScope | No | ||
| mcpOutputFormat | No | MCP text content format. Defaults to optimized agent-friendly text; use json for JSON text. Structured content is always returned separately. | |
| androidDeviceAllowlist | No | Android serial allowlist used for device resolution. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It reveals notable behaviors: long Android recordings may return multiple artifacts, HarmonyOS supports whole-screen recording on physical devices, and the operation times out after 90 seconds. It does not detail every side effect, but the disclosed traits go beyond the basic start/stop functionality.
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 compact, front-loaded with the primary action, and uses only three sentences to convey the core function plus key caveats. No filler or redundancy is present.
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 a 22-parameter tool with no annotations, the description is relatively brief and leaves some operational context unclear, such as how start/stop pairing is expected to work and what platform selector combinations are relevant. The output schema exists, so return values need not be explained, but the high parameter count and platform-specific behavior warrant a bit more operational guidance.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description loosely aligns with parameter semantics by mentioning 'active app session' and 'selected device', which relate to session/device selectors, and 'start or stop' maps to the action enum. However, it adds no meaning for important parameters like fps, path, quality, or recordingScope, and schema coverage is 73%, so the description does not substantially compensate for the undocumented parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb pair, 'Start or stop', and a clear resource, 'screen recording', which distinguishes it from sibling tools like screenshot. Stating the scope as 'active app session or, where supported, the selected device' further clarifies what the tool acts on.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives useful context about platform support and timeout behavior, but it does not explicitly state when to use this tool versus alternatives such as screenshot or replay. The usage is implied rather than spelled out with clear when-to-use/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.
reinstallA
Replace an installed app with a binary from a local path. Use this when preserving the same app identity while installing a new build on the selected device. Times out after 180s.
| Name | Required | Description | Default |
|---|---|---|---|
| app | Yes | ||
| udid | No | iOS device UDID selector. | |
| debug | No | Enable debug diagnostics. | |
| runId | No | Lease run identifier. | |
| device | No | Device name selector. | |
| serial | No | Android device or Vega VVD serial selector. | |
| target | No | Alias for deviceTarget on commands without a UI target field. Interaction commands reserve target for the UI element. | |
| tenant | No | Remote tenant identifier. | |
| appPath | Yes | Path to app binary. | |
| leaseId | No | Existing lease identifier. | |
| session | No | Agent-device session name. | |
| noRecord | No | Do not record this action. | |
| platform | No | Platform selector used to resolve a device. | |
| includeCost | No | Include per-command agent-cost (cost.wallClockMs, …) in structuredContent. Defaults to off; the default response shape is unchanged. | |
| deviceTarget | No | Device target form. Maps to the CLI --target flag. | |
| responseLevel | No | Response verbosity: token-cheap digest / default (today) / full. Defaults to default; the default response shape is unchanged. | |
| mcpOutputFormat | No | MCP text content format. Defaults to optimized agent-friendly text; use json for JSON text. Structured content is always returned separately. | |
| androidDeviceAllowlist | No | Android serial allowlist used for device resolution. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure. It discloses the timeout ('Times out after 180s') and the replacement semantics, but it does not mention potential data loss, whether app data is preserved, required preconditions, or failure behavior. It adds some useful behavioral context but remains incomplete.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences with no filler. The core action is front-loaded, followed by the usage condition and a practical timeout detail. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations and no output schema, the description provides the essential purpose, usage, and timeout. However, it does not mention what happens on success or failure, whether existing user data is preserved, or any response shape. The high schema coverage compensates for parameters, but behavioral context remains only partially complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is high (94%), so most parameters are already explained by the schema. The description itself does not add meaning to specific parameters like app or appPath beyond what is already documented. The baseline of 3 is appropriate because the schema handles the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Replace an installed app with a binary from a local path') and a specific resource (an installed app + local binary). It distinguishes reinstall from sibling tools like install or install-from-source by emphasizing 'preserving the same app identity.'
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 provides a condition for use: 'Use this when preserving the same app identity while installing a new build on the selected device.' It does not name alternative tools or state when not to use it, but the guidance is clear enough for an agent to select this over a fresh install.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
replayB
Run a recorded automation script, including compatible Maestro YAML flows. A script without a terminal close leaves its session active for subsequent automation. Times out after 90s; a caller-supplied budget extends it.
| Name | Required | Description | Default |
|---|---|---|---|
| env | No | ||
| path | Yes | ||
| udid | No | iOS device UDID selector. | |
| debug | No | Enable debug diagnostics. | |
| force | No | ||
| runId | No | Lease run identifier. | |
| device | No | Device name selector. | |
| serial | No | Android device or Vega VVD serial selector. | |
| target | No | Alias for deviceTarget on commands without a UI target field. Interaction commands reserve target for the UI element. | |
| tenant | No | Remote tenant identifier. | |
| update | No | ||
| backend | No | ||
| leaseId | No | Existing lease identifier. | |
| maestro | No | ||
| session | No | Agent-device session name. | |
| platform | No | Platform selector used to resolve a device. | |
| bundleUrl | No | Bundle URL hint inherited by replay-opened sessions. | |
| metroHost | No | Metro/debug host hint inherited by replay-opened sessions. | |
| metroPort | No | Metro/debug port hint inherited by replay-opened sessions. | |
| timeoutMs | No | Maximum wall-clock duration for the replay request. | |
| resumeFrom | No | ||
| saveScript | No | ||
| includeCost | No | Include per-command agent-cost (cost.wallClockMs, …) in structuredContent. Defaults to off; the default response shape is unchanged. | |
| keepSession | No | Leave the session active by suppressing exactly an authored terminal close in native .ad. | |
| deviceTarget | No | Device target form. Maps to the CLI --target flag. | |
| responseLevel | No | Response verbosity: token-cheap digest / default (today) / full. Defaults to default; the default response shape is unchanged. | |
| mcpOutputFormat | No | MCP text content format. Defaults to optimized agent-friendly text; use json for JSON text. Structured content is always returned separately. | |
| resumePlanDigest | No | ||
| androidDeviceAllowlist | No | Android serial allowlist used for device resolution. |
Output Schema
| Name | Required | Description |
|---|---|---|
| healed | Yes | |
| message | Yes | |
| session | Yes | |
| replayed | Yes | |
| artifactPaths | Yes | |
| sessionActive | Yes | True iff the session is still active — the script had no terminal close. |
| snapshotDiagnostics | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral burden. It discloses two non-obvious behaviors: a script without a terminal close leaves the session active, and the request times out after 90 seconds unless a caller-supplied budget extends it. These are genuinely useful. Still, for a tool that executes scripts and can have side effects on devices, it does not mention reversibility, permissions, failure modes, or what execution actually changes.
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 short, front-loaded with the main verb and resource, and every sentence carries relevant behavioral information. It is not bloated. It is slightly under-sized for a 29-parameter automation tool, but that is more a completeness concern than a conciseness flaw.
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 29 parameters, no annotations, and a complex automation/device domain, the description is incomplete. It says nothing about how to select a device or platform, how leases or sessions are established, what the required 'path' refers to, how environment variables are passed, or how the output schema relates to execution results. The timeout and session notes are helpful but far from sufficient for an agent to call this tool reliably across its many options.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers 69% of parameters, so the description does not need to compensate fully, but it does add useful meaning for two parameters: the 'caller-supplied budget' clarifies timeoutMs's default behavior, and the terminal-close statement clarifies session and keepSession semantics. It does not, however, add anything for the undocumented params like path, env, force, update, backend, maestro, resumeFrom, or saveScript.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action and resource: 'Run a recorded automation script', and further scopes it to 'compatible Maestro YAML flows'. This is clear and distinct from the sibling 'record', which creates scripts. However, it does not explicitly distinguish among other siblings like 'test' or 'batch', so it misses the top bar for sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for running previously recorded or Maestro-authored automation, but it never explicitly says when to use replay versus record, test, batch, or other automation-related siblings. It provides no exclusions, prerequisites, or alternative routing guidance. The session and timeout notes are behavioral, not usage-selection guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
screenshotC
Capture a screenshot of the active app or web session. Choose the capture scope, density, size, or annotations through the corresponding input fields when needed. Times out after 90s.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | Output path. | |
| udid | No | iOS device UDID selector. | |
| debug | No | Enable debug diagnostics. | |
| runId | No | Lease run identifier. | |
| scale | No | Screenshot scale factor. | |
| device | No | Device name selector. | |
| serial | No | Android device or Vega VVD serial selector. | |
| target | No | Alias for deviceTarget on commands without a UI target field. Interaction commands reserve target for the UI element. | |
| tenant | No | Remote tenant identifier. | |
| leaseId | No | Existing lease identifier. | |
| session | No | Agent-device session name. | |
| surface | No | ||
| noRecord | No | Do not record this action. | |
| platform | No | Platform selector used to resolve a device. | |
| stabilize | No | ||
| fullscreen | No | ||
| includeCost | No | Include per-command agent-cost (cost.wallClockMs, …) in structuredContent. Defaults to off; the default response shape is unchanged. | |
| overlayRefs | No | ||
| deviceTarget | No | Device target form. Maps to the CLI --target flag. | |
| pixelDensity | No | Output screenshot pixel density in pixels per logical point. | |
| responseLevel | No | Response verbosity: token-cheap digest / default (today) / full. Defaults to default; the default response shape is unchanged. | |
| mcpOutputFormat | No | MCP text content format. Defaults to optimized agent-friendly text; use json for JSON text. Structured content is always returned separately. | |
| normalizeStatusBar | No | ||
| androidDeviceAllowlist | No | Android serial allowlist used for device resolution. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations at all, the description must carry behavioral disclosure; it contributes only the 90-second timeout and a vague note that fields are available. It omits whether the screenshot is saved to path, what the response contains, and what 'active' means when multiple sessions exist.
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, with the core purpose first and the timeout as a practical constraint second. Every sentence earns its place, though 'when needed' is slightly vague.
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 24-parameter tool with no output schema and no annotations, this description is thin: it lacks guidance on device/platform resolution, side effects of path/output, and return shape. The individual schema descriptions compensate partly, but the tool-level picture is incomplete.
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 description maps high-level concerns ('scope, density, size, annotations') to the parameter space, which is helpful given the large 24-parameter surface. Schema coverage is already 79%, so the description adds only this organizational gloss rather than compensating for undocumented parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence states an unambiguous action ('Capture a screenshot') and a clearly delimited resource ('the active app or web session'), which is enough for an agent to know what the tool does. It does not explicitly differentiate from closely related sibling tools like snapshot or record, so it stops short of the top score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement about when to choose screenshot over siblings such as snapshot, trace, or record, and no 'use X instead' guidance. The phrase 'when needed' only gestures at optional parameters, not tool-selection conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scrollA
Scroll in a direction, or toward the top/bottom edge of scrollable content. The optional amount is the finger-path fraction of the viewport axis; app scroll physics determine the final content offset. Times out after 90s; a caller-supplied budget extends it.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | No | iOS device UDID selector. | |
| debug | No | Enable debug diagnostics. | |
| runId | No | Lease run identifier. | |
| amount | No | Platform scroll amount. | |
| device | No | Device name selector. | |
| pixels | No | Pixel scroll amount. | |
| serial | No | Android device or Vega VVD serial selector. | |
| settle | No | After the action, wait for the UI to go quiet and return the settled diff vs the pre-action tree in the same response. Best-effort; never fails the action. | |
| target | No | Alias for deviceTarget on commands without a UI target field. Interaction commands reserve target for the UI element. | |
| tenant | No | Remote tenant identifier. | |
| leaseId | No | Existing lease identifier. | |
| session | No | Agent-device session name. | |
| noRecord | No | Do not record this action. | |
| platform | No | Platform selector used to resolve a device. | |
| direction | Yes | ||
| timeoutMs | No | Settle: wait deadline in milliseconds (default 10000). | |
| durationMs | No | Scroll duration in milliseconds when the backend supports pacing. | |
| includeCost | No | Include per-command agent-cost (cost.wallClockMs, …) in structuredContent. Defaults to off; the default response shape is unchanged. | |
| deviceTarget | No | Device target form. Maps to the CLI --target flag. | |
| responseLevel | No | Response verbosity: token-cheap digest / default (today) / full. Defaults to default; the default response shape is unchanged. | |
| settleQuietMs | No | Settle: quiet window in milliseconds (default 500). | |
| mcpOutputFormat | No | MCP text content format. Defaults to optimized agent-friendly text; use json for JSON text. Structured content is always returned separately. | |
| androidDeviceAllowlist | No | Android serial allowlist used for device resolution. |
Output Schema
| Name | Required | Description |
|---|---|---|
| edge | No | |
| amount | No | |
| passes | No | Edge scrolls only: how many scroll-and-check passes ran. |
| pixels | No | |
| settle | No | |
| message | No | |
| direction | Yes | |
| durationMs | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral disclosure burden. It usefully reveals the 90-second timeout, the caller-supplied budget extension, and the fact that app scroll physics determine the final offset. It does not mention side effects like triggering navigation or lazy loading, but the core execution expectations are well covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler. It front-loads the core purpose, then adds amount semantics and timeout behavior in a compact, scannable way.
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 high schema coverage and presence of an output schema, this is a reasonably complete description for a 23-parameter interaction tool. The main gaps are the lack of sibling differentiation and the vague reference to a 'caller-supplied budget' that is not visible in the parameter schema, but neither prevents an agent from using the tool correctly in most cases.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers 96% of parameters, so the baseline is 3. The description adds meaningful semantic value for the key 'amount' parameter by defining it as a finger-path fraction of the viewport axis, and clarifies that top/bottom target edges of the scrollable content. This goes beyond the generic schema text.
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 names a specific action ('Scroll'), a clear resource ('scrollable content'), and the direction/edge semantics via the direction enum values. However, it does not explicitly differentiate this tool from closely related siblings like swipe or gesture, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use scroll versus alternatives such as swipe or gesture, and no exclusion conditions are stated. The amount semantics are explained, but that is a how-to detail rather than usage routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sessionC
List active sessions, print the effective daemon state directory, or publish an armed open-to-destination script without closing its session Times out after 90s.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | Optional .ad output path for save-script. | |
| udid | No | iOS device UDID selector. | |
| debug | No | Enable debug diagnostics. | |
| force | No | Atomically replace an existing save-script target. | |
| runId | No | Lease run identifier. | |
| action | No | list shows active sessions; state-dir prints the daemon state directory; save-script publishes an armed recording without teardown. | |
| device | No | Device name selector. | |
| serial | No | Android device or Vega VVD serial selector. | |
| target | No | Alias for deviceTarget on commands without a UI target field. Interaction commands reserve target for the UI element. | |
| tenant | No | Remote tenant identifier. | |
| leaseId | No | Existing lease identifier. | |
| session | No | Agent-device session name. | |
| platform | No | Platform selector used to resolve a device. | |
| includeCost | No | Include per-command agent-cost (cost.wallClockMs, …) in structuredContent. Defaults to off; the default response shape is unchanged. | |
| deviceTarget | No | Device target form. Maps to the CLI --target flag. | |
| responseLevel | No | Response verbosity: token-cheap digest / default (today) / full. Defaults to default; the default response shape is unchanged. | |
| mcpOutputFormat | No | MCP text content format. Defaults to optimized agent-friendly text; use json for JSON text. Structured content is always returned separately. | |
| androidDeviceAllowlist | No | Android serial allowlist used for device resolution. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden for behavioral disclosure. It does disclose a 90-second timeout and that save-script does not close the session, which is useful. However, it does not disclose side effects, permissions, or the read-only nature of list/state-dir, which matters for a mixed read/mutation tool.
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 short and action-oriented, but the three modes are run together and 'Times out after 90s' is awkwardly appended without a clear separator. Better punctuation or a bulleted structure would make it easier to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a complex three-action tool with 18 parameters and no output schema. The description does not explain per-action parameter requirements, return values, or how the various selectors resolve to a device/session. The timeout and non-teardown note help, but substantial contextual gaps remain.
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 all 18 parameters are already documented by the input schema. The description adds no additional parameter-level meaning, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names three concrete behaviors—list sessions, print the daemon state directory, and publish a save-script—with specific verbs and targets. It is reasonably distinguishable from sibling tools, though 'armed open-to-destination script' is jargon and the three modes are packed into one clause.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives or how to choose among list/state-dir/save-script. The action enum provides some descriptions of each mode, but the main description does not explain selection context, prerequisites, or when another tool would be more appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
settingsC
Change supported operating-system settings, animation scales, appearance, or app permissions on the selected target. Platform support varies by setting and action. Times out after 90s.
| Name | Required | Description | Default |
|---|---|---|---|
| app | No | ||
| mode | No | ||
| udid | No | iOS device UDID selector. | |
| debug | No | Enable debug diagnostics. | |
| runId | No | Lease run identifier. | |
| state | Yes | ||
| device | No | Device name selector. | |
| serial | No | Android device or Vega VVD serial selector. | |
| target | No | Alias for deviceTarget on commands without a UI target field. Interaction commands reserve target for the UI element. | |
| tenant | No | Remote tenant identifier. | |
| leaseId | No | Existing lease identifier. | |
| session | No | Agent-device session name. | |
| setting | Yes | ||
| latitude | No | ||
| noRecord | No | Do not record this action. | |
| platform | No | Platform selector used to resolve a device. | |
| longitude | No | ||
| permission | No | ||
| includeCost | No | Include per-command agent-cost (cost.wallClockMs, …) in structuredContent. Defaults to off; the default response shape is unchanged. | |
| deviceTarget | No | Device target form. Maps to the CLI --target flag. | |
| responseLevel | No | Response verbosity: token-cheap digest / default (today) / full. Defaults to default; the default response shape is unchanged. | |
| mcpOutputFormat | No | MCP text content format. Defaults to optimized agent-friendly text; use json for JSON text. Structured content is always returned separately. | |
| androidDeviceAllowlist | No | Android serial allowlist used for device resolution. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden. It usefully discloses a 90-second timeout and notes that platform support varies by setting, which is more than a bare mutation statement. However, it does not explain side effects, persistence, permission requirements, failure behavior, or whether changes are reversible.
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 brief and front-loaded with the primary action. Each sentence adds useful information: what changes, variability by platform, and timeout. It is not a 5 because the middle sentence is somewhat vague and could be more specific.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 23 parameters, 2 required parameters, and no output schema or annotations, this description is far too thin. It omits expected values for 'setting' and 'state', which the agent must provide, and gives no indication of response shape, error conditions, or how target/platform selectors are resolved.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 70% coverage, but the two required parameters, 'setting' and 'state', have no descriptions. The description adds some semantic categories for 'setting' (animation scales, appearance, permissions) but does not clarify allowed values for either required parameter or the relationship between them, so an agent still lacks essential information.
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 names a clear action ('Change') and a resource ('supported operating-system settings, animation scales, appearance, or app permissions'), which distinguishes it from read-oriented sibling tools like 'get' or 'is'. It is not a 5 because it never gives concrete examples of settings or permissions, leaving the exact scope somewhat open.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives, nor any mention of when not to use it. 'Platform support varies by setting and action' hints at limitations but does not direct the agent to a better tool or tell it how to pick an appropriate setting or target.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
shutdownA
Shutdown a selected simulator or emulator. Times out after 90s.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | No | iOS device UDID selector. | |
| debug | No | Enable debug diagnostics. | |
| runId | No | Lease run identifier. | |
| device | No | Device name selector. | |
| serial | No | Android device or Vega VVD serial selector. | |
| target | No | Alias for deviceTarget on commands without a UI target field. Interaction commands reserve target for the UI element. | |
| tenant | No | Remote tenant identifier. | |
| leaseId | No | Existing lease identifier. | |
| session | No | Agent-device session name. | |
| platform | No | Platform selector used to resolve a device. | |
| includeCost | No | Include per-command agent-cost (cost.wallClockMs, …) in structuredContent. Defaults to off; the default response shape is unchanged. | |
| deviceTarget | No | Device target form. Maps to the CLI --target flag. | |
| responseLevel | No | Response verbosity: token-cheap digest / default (today) / full. Defaults to default; the default response shape is unchanged. | |
| mcpOutputFormat | No | MCP text content format. Defaults to optimized agent-friendly text; use json for JSON text. Structured content is always returned separately. | |
| androidDeviceAllowlist | No | Android serial allowlist used for device resolution. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | Stable device id. |
| kind | Yes | |
| device | Yes | Human-readable device name. |
| target | Yes | |
| platform | Yes | |
| shutdown | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavior itself. It adds a useful operational detail (90s timeout) and the verb clearly indicates a power-off action, but it omits other behavioral context such as whether the shutdown is graceful, whether a running target is required, or what side effects occur on the device/session.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with no filler: the action is front-loaded and the timeout constraint is a separate, relevant operational note. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The presence of an output schema and full parameter descriptions reduce the need to explain return values or individual fields. Still, for a tool with 15 optional parameters and no required fields, the description leaves target selection ambiguous ('selected' is not mapped to the selectors).
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 all 15 parameters already have individual descriptions. The tool description adds no guidance about which selector fields (udid, serial, device, platform, session, etc.) are alternatives or how to construct a valid target, so it does not improve on the schema here.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Shutdown a selected simulator or emulator'), so the core function is clear. However, it does not explicitly distinguish itself from sibling tools like boot or close; it relies on the tool name to carry that differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The use case is implied: call this when a selected simulator or emulator needs to be powered off. It offers no explicit guidance about when not to use it, how it relates to boot/close, or which of the many optional selector parameters should be supplied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
snapshotA
Capture the accessibility tree or compare it with the previous session baseline. Use the returned refs for subsequent semantic interactions and the diff option to verify UI changes. Times out after 90s; a caller-supplied budget extends it.
| Name | Required | Description | Default |
|---|---|---|---|
| raw | No | ||
| udid | No | iOS device UDID selector. | |
| debug | No | Enable debug diagnostics. | |
| depth | No | ||
| runId | No | Lease run identifier. | |
| scope | No | ||
| device | No | Device name selector. | |
| record | No | Force-record this out-of-band observation into a repair-armed heal (mutually exclusive with noRecord). Authored replay steps are recorded automatically and never need this. | |
| serial | No | Android device or Vega VVD serial selector. | |
| target | No | Alias for deviceTarget on commands without a UI target field. Interaction commands reserve target for the UI element. | |
| tenant | No | Remote tenant identifier. | |
| leaseId | No | Existing lease identifier. | |
| session | No | Agent-device session name. | |
| noRecord | No | Do not record this action. | |
| platform | No | Platform selector used to resolve a device. | |
| forceFull | No | ||
| timeoutMs | No | Maximum wall-clock time for the snapshot command. | |
| includeCost | No | Include per-command agent-cost (cost.wallClockMs, …) in structuredContent. Defaults to off; the default response shape is unchanged. | |
| deviceTarget | No | Device target form. Maps to the CLI --target flag. | |
| customActions | No | Name the affordances an element merged away (iOS UIAccessibilityCustomAction, React Native accessibilityActions) — a card whose reply/options controls are not separate elements still lists them here. The names are for PLANNING, not invocation: there is no API to trigger them, so reach the affordance through the element detail screen, through the same control exposed as a labeled element elsewhere, or by coordinates from its rect. iOS simulator only; costs one accessibility round trip per merged element. | |
| responseLevel | No | Response verbosity: token-cheap digest / default (today) / full. Defaults to default; the default response shape is unchanged. | |
| interactiveOnly | No | ||
| mcpOutputFormat | No | MCP text content format. Defaults to optimized agent-friendly text; use json for JSON text. Structured content is always returned separately. | |
| androidDeviceAllowlist | No | Android serial allowlist used for device resolution. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It usefully discloses the 90-second timeout and the ability to extend it with a caller-supplied budget, and implies a read-only snapshot behavior. However, it does not mention possible side effects such as the optional 'record' behavior, or describe the response format, which matters given the absence of an output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three focused sentences: purpose, usage guidance, and a critical behavioral note. It is front-loaded with the main action, avoids fluff, 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?
Given 24 parameters, no annotations, no output schema, and 52 sibling tools, this three-sentence description is insufficient. It does not explain the return structure beyond 'refs', does not cover side effects, and does not provide enough differentiation or parameter guidance for correct invocation in a complex MCP environment.
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 79%, slightly below the high threshold, so the description should add some parameter meaning. It adds context for timeoutMs by stating the default 90-second timeout and that a caller-supplied budget extends it, but it does not describe the five undocumented parameters or clarify the ambiguous 'diff option'.
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 identifies the action: 'Capture the accessibility tree or compare it with the previous session baseline' and mentions returning refs for semantic interactions. However, the phrase 'diff option' is ambiguous because no diff parameter exists in the input schema and a sibling tool named diff is available, so it does not fully distinguish this tool from related siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives direct usage guidance: use the returned refs for subsequent semantic interactions and use the diff option to verify UI changes. This provides a clear context for when to invoke snapshot, though it does not explicitly state when not to use it or name alternatives beyond the vague 'diff option'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
swipeB
Quick coordinate fling with optional repeat pattern. Times out after 90s.
| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | Swipe end point. | |
| from | Yes | Swipe start point. | |
| udid | No | iOS device UDID selector. | |
| count | No | Number of swipe repetitions. | |
| debug | No | Enable debug diagnostics. | |
| runId | No | Lease run identifier. | |
| device | No | Device name selector. | |
| serial | No | Android device or Vega VVD serial selector. | |
| target | No | Alias for deviceTarget on commands without a UI target field. Interaction commands reserve target for the UI element. | |
| tenant | No | Remote tenant identifier. | |
| leaseId | No | Existing lease identifier. | |
| pattern | No | ||
| pauseMs | No | Pause between repeated swipes. | |
| session | No | Agent-device session name. | |
| noRecord | No | Do not record this action. | |
| platform | No | Platform selector used to resolve a device. | |
| includeCost | No | Include per-command agent-cost (cost.wallClockMs, …) in structuredContent. Defaults to off; the default response shape is unchanged. | |
| deviceTarget | No | Device target form. Maps to the CLI --target flag. | |
| responseLevel | No | Response verbosity: token-cheap digest / default (today) / full. Defaults to default; the default response shape is unchanged. | |
| mcpOutputFormat | No | MCP text content format. Defaults to optimized agent-friendly text; use json for JSON text. Structured content is always returned separately. | |
| androidDeviceAllowlist | No | Android serial allowlist used for device resolution. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description carries the behavioral disclosure burden. It adds useful facts: the action is quick, can repeat, and times out after 90s. However, it does not describe what happens on completion, whether the gesture mutates UI state, or how the repeat pattern behaves if interrupted.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with no filler. The core action is front-loaded, and the key behavioral constraint (90s timeout) is included without redundantly repeating schema details.
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?
Despite a rich schema, there are no annotations, no output schema, and many overlapping sibling tools. The description is too thin to fully guide an agent on tool selection and invocation, especially regarding when to use swipe over alternative gesture commands and what response to expect.
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 95%, so the schema already documents nearly all parameters. The description adds 'optional repeat pattern' and the concept of a quick fling, but does not meaningfully expand on from/to semantics or the pattern enum beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('coordinate fling') over a clear resource, and the required from/to coordinates in the schema make the operation concrete. It is distinct enough from click, longpress, and scroll, though it does not explicitly name siblings to disambiguate.
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 swipe versus related tools like gesture, scroll, or longpress. There is no context about UI state, prerequisites, or when a coordinate-based fling is preferred over an element-based interaction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
testB
Run one or more replay scripts as a serial test suite Streams progress; no fixed client timeout.
| Name | Required | Description | Default |
|---|---|---|---|
| env | No | ||
| udid | No | iOS device UDID selector. | |
| debug | No | Enable debug diagnostics. | |
| paths | Yes | ||
| runId | No | Lease run identifier. | |
| device | No | Device name selector. | |
| serial | No | Android device or Vega VVD serial selector. | |
| target | No | Alias for deviceTarget on commands without a UI target field. Interaction commands reserve target for the UI element. | |
| tenant | No | Remote tenant identifier. | |
| update | No | ||
| backend | No | ||
| leaseId | No | Existing lease identifier. | |
| maestro | No | ||
| retries | No | ||
| session | No | Agent-device session name. | |
| failFast | No | ||
| platform | No | Platform selector used to resolve a device. | |
| shardAll | No | ||
| bundleUrl | No | Bundle URL hint inherited by each test session. | |
| metroHost | No | Metro/debug host hint inherited by each test session. | |
| metroPort | No | Metro/debug port hint inherited by each test session. | |
| timeoutMs | No | ||
| shardSplit | No | ||
| includeCost | No | Include per-command agent-cost (cost.wallClockMs, …) in structuredContent. Defaults to off; the default response shape is unchanged. | |
| recordVideo | No | ||
| artifactsDir | No | ||
| deviceTarget | No | Device target form. Maps to the CLI --target flag. | |
| responseLevel | No | Response verbosity: token-cheap digest / default (today) / full. Defaults to default; the default response shape is unchanged. | |
| mcpOutputFormat | No | MCP text content format. Defaults to optimized agent-friendly text; use json for JSON text. Structured content is always returned separately. | |
| androidDeviceAllowlist | No | Android serial allowlist used for device resolution. |
Output Schema
| Name | Required | Description |
|---|---|---|
| tests | Yes | |
| total | Yes | |
| failed | Yes | |
| notRun | Yes | |
| passed | Yes | |
| skipped | Yes | |
| executed | Yes | |
| failures | Yes | |
| durationMs | Yes | |
| snapshotDiagnostics | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It discloses two useful behavioral traits: progress is streamed and there is no fixed client timeout. This goes beyond the schema and helps an agent understand the tool may be long-running. It does not address failure behavior or resource implications, but the core behavioral traits are present.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one sentence with no filler and front-loads the core action. The structure is slightly awkward—'suite Streams progress' reads like a missing sentence break—but it remains compact and information-dense.
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?
This is a high-complexity tool with 30 parameters, no annotations, and only partial schema coverage, yet the description provides only two behavioral facts: serial execution and streaming/no-timeout. Important context such as when to use this vs replay or batch, how sharding works, or what failure modes exist is missing. The output schema covers return shape, but invocation context is still under-specified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 30 parameters and only 60% schema description coverage, the description adds almost no parameter-level meaning. It only implies that 'paths' are the replay scripts via 'one or more replay scripts.' Many parameters such as retries, failFast, shardAll, shardSplit, timeoutMs, and recordVideo are left without description in either the schema or the tool description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Run one or more replay scripts as a serial test suite.' This makes the core purpose clear. However, it does not distinguish this tool from siblings like 'replay' or 'batch', so an agent must infer the differentiator from 'serial test suite.'
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'as a serial test suite' implies this tool is for running replay scripts in sequence, which gives some usage context. But there is no explicit guidance about when to choose this over 'replay' or 'batch', and no stated exclusions or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
traceA
Start or stop trace-log capture and return the resulting artifact when capture ends. Use the same artifact path for the matching start and stop requests when an explicit path is required. Times out after 90s.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | ||
| udid | No | iOS device UDID selector. | |
| debug | No | Enable debug diagnostics. | |
| runId | No | Lease run identifier. | |
| action | Yes | ||
| device | No | Device name selector. | |
| serial | No | Android device or Vega VVD serial selector. | |
| target | No | Alias for deviceTarget on commands without a UI target field. Interaction commands reserve target for the UI element. | |
| tenant | No | Remote tenant identifier. | |
| leaseId | No | Existing lease identifier. | |
| session | No | Agent-device session name. | |
| noRecord | No | Do not record this action. | |
| platform | No | Platform selector used to resolve a device. | |
| includeCost | No | Include per-command agent-cost (cost.wallClockMs, …) in structuredContent. Defaults to off; the default response shape is unchanged. | |
| deviceTarget | No | Device target form. Maps to the CLI --target flag. | |
| responseLevel | No | Response verbosity: token-cheap digest / default (today) / full. Defaults to default; the default response shape is unchanged. | |
| mcpOutputFormat | No | MCP text content format. Defaults to optimized agent-friendly text; use json for JSON text. Structured content is always returned separately. | |
| androidDeviceAllowlist | No | Android serial allowlist used for device resolution. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden and does disclose meaningful behavior: the start/stop state machine, artifact return at end of capture, artifact path pairing, and a 90-second timeout. It does not mention any side effects or permission requirements, but the self-contained behavior is well covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each carrying distinct information: the core capability, the path-pairing rule, and the timeout. The most important verb and resource are 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?
For a stateful capture tool, it covers the essential operational concerns (start/stop, artifact path, return timing, timeout) and an output schema exists. It could be more explicit about the start response versus the stop response, but nothing critical is missing for invoking correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 89%, so the schema already documents most parameters. The description adds value beyond that by explaining that path must be shared between matching start and stop requests, which is not evident from the schema alone.
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 identifies a specific action (start/stop trace-log capture) and a concrete outcome (returning the resulting artifact), so an agent knows what the tool does. It does not explicitly differentiate trace from sibling tools like record or perf, but the trace-log capture resource is distinctive enough to avoid most ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear operational context: start or stop capture, reuse the same artifact path across matching requests, and expect completion within 90s. It does not list alternative sibling tools or when-not conditions, which prevents a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
trigger-app-eventA
Ask the app to handle an app-defined automation or test event, with an optional structured payload. Call this only for event names and payload shapes the app documents. Times out after 90s.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | No | iOS device UDID selector. | |
| debug | No | Enable debug diagnostics. | |
| event | Yes | Name of an app-defined automation or test event the app documents. | |
| runId | No | Lease run identifier. | |
| device | No | Device name selector. | |
| serial | No | Android device or Vega VVD serial selector. | |
| target | No | Alias for deviceTarget on commands without a UI target field. Interaction commands reserve target for the UI element. | |
| tenant | No | Remote tenant identifier. | |
| leaseId | No | Existing lease identifier. | |
| payload | No | Structured payload passed to the event, in the shape the app documents for it. | |
| session | No | Agent-device session name. | |
| noRecord | No | Do not record this action. | |
| platform | No | Platform selector used to resolve a device. | |
| includeCost | No | Include per-command agent-cost (cost.wallClockMs, …) in structuredContent. Defaults to off; the default response shape is unchanged. | |
| deviceTarget | No | Device target form. Maps to the CLI --target flag. | |
| responseLevel | No | Response verbosity: token-cheap digest / default (today) / full. Defaults to default; the default response shape is unchanged. | |
| mcpOutputFormat | No | MCP text content format. Defaults to optimized agent-friendly text; use json for JSON text. Structured content is always returned separately. | |
| androidDeviceAllowlist | No | Android serial allowlist used for device resolution. |
Output Schema
| Name | Required | Description |
|---|---|---|
| event | Yes | |
| message | Yes | |
| eventUrl | Yes | |
| transport | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden. It adds useful operational context by stating a 90-second timeout and warning that event names/payloads must be app-documented. However, it does not disclose potential side effects, whether the call blocks until the app finishes handling the event, or error behavior—significant for a trigger-like 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 is three sentences with no redundancy: purpose, usage restriction, and timeout are each stated once. Every sentence earns its place, and the tool name is not merely echoed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is minimally viable for a complex 18-parameter tool, especially because the schema has full coverage and an output schema exists. Still, it omits side-effect guidance, alternative-tool differentiation, and detail about what happens after the event is triggered, which leaves an agent without a complete safety picture.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all 18 parameters. The description adds only general context—that the payload is optional and that event names/payload shapes must follow app documentation—which is marginal beyond the schema's own detailed descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear action—asking the app to handle an app-defined automation or test event—and mentions an optional structured payload. It conveys the target resource and distinguishes this from a generic event query, though it does not explicitly contrast it with sibling tools such as 'events'.
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 an explicit precondition: 'Call this only for event names and payload shapes the app documents.' This tells the agent not to invent or assume events. It does not name alternative tools or provide exhaustive when-not-to-use guidance, but the core usage constraint is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tv-remoteA
Press or long-press a TV remote or D-pad button on Android TV, tvOS, or Vega OS. Choose the button and optional hold duration through the input fields. The aliases ok, center, and enter all map to select. Times out after 90s.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | No | iOS device UDID selector. | |
| debug | No | Enable debug diagnostics. | |
| runId | No | Lease run identifier. | |
| button | Yes | ||
| device | No | Device name selector. | |
| serial | No | Android device or Vega VVD serial selector. | |
| target | No | Alias for deviceTarget on commands without a UI target field. Interaction commands reserve target for the UI element. | |
| tenant | No | Remote tenant identifier. | |
| leaseId | No | Existing lease identifier. | |
| session | No | Agent-device session name. | |
| noRecord | No | Do not record this action. | |
| platform | No | Platform selector used to resolve a device. | |
| durationMs | No | Press duration in milliseconds. tvOS and Vega OS use the exact hold duration; Android TV maps any positive value to an ADB longpress (longpress). | |
| includeCost | No | Include per-command agent-cost (cost.wallClockMs, …) in structuredContent. Defaults to off; the default response shape is unchanged. | |
| deviceTarget | No | Device target form. Maps to the CLI --target flag. | |
| responseLevel | No | Response verbosity: token-cheap digest / default (today) / full. Defaults to default; the default response shape is unchanged. | |
| mcpOutputFormat | No | MCP text content format. Defaults to optimized agent-friendly text; use json for JSON text. Structured content is always returned separately. | |
| androidDeviceAllowlist | No | Android serial allowlist used for device resolution. |
Output Schema
| Name | Required | Description |
|---|---|---|
| action | Yes | |
| button | Yes | |
| message | Yes | |
| durationMs | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden. It discloses press vs. long-press capability, that ok/center/enter are aliases for select, and the 90-second timeout. Platform-specific duration behavior is left to the schema, but the description adds meaningful behavioral facts beyond a 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?
Three short sentences with no filler. The core action and platform scope come first, then the input hint, then the alias and timeout facts. Every sentence contributes distinct 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?
For an 18-parameter command with an output schema, the description covers the essential operational context: action, platforms, alias resolution, and timeout. It does not enumerate device selectors or response options, but those are fully documented in the schema, and the output schema covers return-value expectations.
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 94%, so the baseline is 3. The description adds one genuinely non-schema fact: ok, center, and enter all map to select, which is not reflected in the button enum. It otherwise wisely avoids repeating parameter details already documented in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Press or long-press a TV remote or D-pad button' and names the platforms Android TV, tvOS, and Vega OS. This clearly identifies the tool's job and distinguishes it from generic siblings like press/longpress, though it does not explicitly name those alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for when to use the tool: TV remote or D-pad button presses on Android TV, tvOS, or Vega OS. It does not explicitly state when not to use it or name alternatives, so an agent must infer the boundary with press/longpress/click.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
typeA
Append text to the currently focused input. Use fill when the existing field value should be replaced, and focus first when no input is active. Times out after 90s.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Text to type. | |
| udid | No | iOS device UDID selector. | |
| debug | No | Enable debug diagnostics. | |
| runId | No | Lease run identifier. | |
| device | No | Device name selector. | |
| serial | No | Android device or Vega VVD serial selector. | |
| target | No | Alias for deviceTarget on commands without a UI target field. Interaction commands reserve target for the UI element. | |
| tenant | No | Remote tenant identifier. | |
| delayMs | No | Delay between typed characters. | |
| leaseId | No | Existing lease identifier. | |
| session | No | Agent-device session name. | |
| noRecord | No | Do not record this action. | |
| platform | No | Platform selector used to resolve a device. | |
| includeCost | No | Include per-command agent-cost (cost.wallClockMs, …) in structuredContent. Defaults to off; the default response shape is unchanged. | |
| deviceTarget | No | Device target form. Maps to the CLI --target flag. | |
| responseLevel | No | Response verbosity: token-cheap digest / default (today) / full. Defaults to default; the default response shape is unchanged. | |
| mcpOutputFormat | No | MCP text content format. Defaults to optimized agent-friendly text; use json for JSON text. Structured content is always returned separately. | |
| androidDeviceAllowlist | No | Android serial allowlist used for device resolution. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the behavioral burden. It discloses the append behavior and the 90s timeout, but it does not describe error cases, return values, or side effects beyond modifying the input. This is adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise sentences: the primary action, routing to alternatives, and the timeout constraint. Every sentence earns its place and the most important 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?
For a primitive input-action tool with a well-documented schema, the description provides the essential usage context, timeout, and sibling disambiguation. It does not describe output/return behavior, but that is arguably less critical for an action command.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents all parameters. The description adds the important semantic that text is appended rather than replacing, but it does not add detail about the other parameters such as delayMs or device selectors.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action and resource: 'Append text to the currently focused input.' It clearly distinguishes itself from the siblings fill and focus, so an agent can tell this tool apart without ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly provides routing guidance: use fill when replacing, use focus first when no input is active, and use type when appending to an already focused input. This covers the key alternatives and the condition for choosing this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
viewportA
Resize the active web viewport before taking snapshots or screenshots. Useful for fixed-layout or 100vh apps where changing the viewport reveals different content. Times out after 90s.
| Name | Required | Description | Default |
|---|---|---|---|
| udid | No | iOS device UDID selector. | |
| debug | No | Enable debug diagnostics. | |
| runId | No | Lease run identifier. | |
| width | Yes | Viewport width in CSS pixels. | |
| device | No | Device name selector. | |
| height | Yes | Viewport height in CSS pixels. | |
| serial | No | Android device or Vega VVD serial selector. | |
| target | No | Alias for deviceTarget on commands without a UI target field. Interaction commands reserve target for the UI element. | |
| tenant | No | Remote tenant identifier. | |
| leaseId | No | Existing lease identifier. | |
| session | No | Agent-device session name. | |
| noRecord | No | Do not record this action. | |
| platform | No | Platform selector used to resolve a device. | |
| includeCost | No | Include per-command agent-cost (cost.wallClockMs, …) in structuredContent. Defaults to off; the default response shape is unchanged. | |
| deviceTarget | No | Device target form. Maps to the CLI --target flag. | |
| responseLevel | No | Response verbosity: token-cheap digest / default (today) / full. Defaults to default; the default response shape is unchanged. | |
| mcpOutputFormat | No | MCP text content format. Defaults to optimized agent-friendly text; use json for JSON text. Structured content is always returned separately. | |
| androidDeviceAllowlist | No | Android serial allowlist used for device resolution. |
Output Schema
| Name | Required | Description |
|---|---|---|
| width | Yes | |
| height | Yes | |
| message | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden. It discloses that the active web viewport is modified and that the operation times out after 90 seconds. However, it does not state whether the resize persists across subsequent commands, is reversible, or impacts other workflows beyond snapshots/screenshots.
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 only two sentences, front-loads the core action and purpose, and includes a useful timeout detail. Every sentence earns its place with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the tool's purpose, timing, and timeout behavior. The input schema documents all 18 parameters and an output schema exists, so return-value and parameter details are already structured. Minor gaps around persistence and side effects are already reflected in behavioral transparency.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and already documents width and height in CSS pixels. The description adds no additional parameter-specific meaning, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Resize') and resource ('active web viewport') and explains why it matters before snapshots/screenshots. This clearly distinguishes it from sibling tools like screenshot and snapshot.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear contextual guidance: use it before taking snapshots or screenshots, especially for fixed-layout or 100vh apps. It does not explicitly mention alternatives or when not to use it, but the use-case framing is strong enough for an agent to select it appropriately.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
waitA
Wait for a duration, text, snapshot ref, selector, or stable UI. Use text, ref, or selector for a specific readiness condition; stable waits until the UI stays quiet for the requested window. Times out after 90s; a caller-supplied budget extends it.
| Name | Required | Description | Default |
|---|---|---|---|
| raw | No | ||
| ref | No | ||
| kind | No | ||
| text | No | ||
| udid | No | iOS device UDID selector. | |
| debug | No | Enable debug diagnostics. | |
| depth | No | ||
| runId | No | Lease run identifier. | |
| scope | No | ||
| device | No | Device name selector. | |
| serial | No | Android device or Vega VVD serial selector. | |
| stable | No | ||
| target | No | Alias for deviceTarget on commands without a UI target field. Interaction commands reserve target for the UI element. | |
| tenant | No | Remote tenant identifier. | |
| leaseId | No | Existing lease identifier. | |
| quietMs | No | ||
| session | No | Agent-device session name. | |
| noRecord | No | Do not record this action. | |
| platform | No | Platform selector used to resolve a device. | |
| selector | No | ||
| timeoutMs | No | ||
| durationMs | No | ||
| includeCost | No | Include per-command agent-cost (cost.wallClockMs, …) in structuredContent. Defaults to off; the default response shape is unchanged. | |
| deviceTarget | No | Device target form. Maps to the CLI --target flag. | |
| responseLevel | No | Response verbosity: token-cheap digest / default (today) / full. Defaults to default; the default response shape is unchanged. | |
| mcpOutputFormat | No | MCP text content format. Defaults to optimized agent-friendly text; use json for JSON text. Structured content is always returned separately. | |
| androidDeviceAllowlist | No | Android serial allowlist used for device resolution. |
Output Schema
| Name | Required | Description |
|---|---|---|
| hint | No | |
| kind | No | |
| text | No | |
| warning | No | |
| captures | No | |
| selector | No | |
| waitedMs | Yes | |
| nodeCount | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It discloses the default timeout, the ability to extend it, and the distinct semantics of stable waiting versus condition-based waiting. It does not state whether a timeout results in an error or what the return shape is, but the core behavior an agent must understand before calling is present.
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 dense sentences deliver the full purpose, mode guidance, and timeout behavior with no filler. The most important information is front-loaded, and every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite 27 parameters, the description covers the essential wait-specific decisions: which mode to use and the timeout behavior. The output schema exists, so return values need not be spelled out, and many shared parameters are already documented in the schema. It leaves minor gaps around exact parameter names for duration and quiet window, but is complete enough for an agent to invoke the tool correctly in most cases.
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 only 59%, and several wait-critical parameters (kind, durationMs, quietMs, timeoutMs, stable) lack descriptions. The description compensates by explaining what 'duration', 'text', 'ref', 'selector', and 'stable' modes mean, and by relating the quiet window and timeout budget to the wait behavior. It does not explicitly map 'duration' to durationMs or 'budget' to timeoutMs, but it adds meaningful semantic value beyond the raw 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 uses a specific verb ('Wait') and identifies concrete target resources: duration, text, snapshot ref, selector, and stable UI. This clearly distinguishes it from sibling tools like get, snapshot, or is by framing it as a readiness/synchronization operation rather than a query or assertion.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit mode-selection guidance: text, ref, or selector for specific readiness conditions, and stable for waiting until the UI quiets. It also explains the 90-second timeout and how a caller-supplied budget extends it. It does not explicitly contrast this tool with non-wait alternatives like polling via get or snapshot, but the internal usage guidance is clear and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Multiple tools have unclear boundaries: click and press both activate a UI target via ref/selector/coordinates, and gesture explicitly includes swipe while a separate swipe tool also exists. find is also vague about which action it runs, making tool selection risky despite generally detailed descriptions.
All names are lowercase and mostly readable, but the set mixes bare verbs (find, get, wait), noun commands (apps, devices, session), abbreviations (perf, metro), and multiword compounds with inconsistent separators (appstate vs app-switcher vs install-from-source). There is no consistent verb_noun pattern.
57 tools is far beyond the well-scoped 3-15 range and falls into the 50+ extreme-mismatch category. Even though device automation is broad, the count is inflated by overlapping interaction tools and the server feels more like a full CLI than a curated MCP toolset.
The tool surface is quite comprehensive, covering device lifecycle, app management, UI interaction, diagnostics, logging, networking, media capture, React Native/Metro workflows, and scripting. The main gaps are minor—there is no explicit uninstall or clear-app-data tool—but most core workflows have no dead ends.
Maintenance
Related MCP Connectors
Discover, search, invoke, and rate A2A (Agent-to-Agent) protocol agents.
Discover Wiplash and manage owned agents with human OAuth.
Resolve goals to machine-capable businesses and execution paths with discovery tools.
Develop, manage, and debug Railway projects, services, and deployments from within agents.
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceActs as a unified dispatch hub for local coding agent CLIs, supporting capability-based routing, schema validation, and retries via MCP tools.MIT
- FlicenseNot gradedqualityBmaintenancePublic MCP front door for Spala agent discovery, providing onboarding, documentation search, and template/addon listings for planning backend workflows.
- AlicenseNot gradedqualityBmaintenanceDiscovers and manages portable agent capabilities (skills and MCP servers) from configurable collections, providing search, inspection, and local installation via CLI and MCP tools.1MIT
- FlicenseAqualityBmaintenanceActs as a personal AI development environment manager, enabling workspace bootstrapping, headless skill and bundle installation, global caching, and health diagnostics.723
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/callstack/agent-device'
If you have feedback or need assistance with the MCP directory API, please join our Discord server