Skip to main content
Glama
clivejefferies

mobile-debug-mcp

Mobile Debug Tools

A minimal, secure MCP server for AI-assisted mobile development. Build, install, interact and inspect Android/iOS apps from an MCP-compatible client.

Support:

  • KMP

  • Android

  • iOS

  • Flutter - not tested

  • React native - not tested

Requirements

  • Node.js >= 18

  • Android SDK (adb) for Android support

  • Xcode command-line tools for iOS support

  • idb for iOS device support

Related MCP server: xcforge

Environment Setup

The server discovers Android and iOS tools automatically from standard locations by default. Manual environment setup is still supported, but it should be treated as the fallback for non-standard installs, overrides, or reproducible pinned toolchains.

Use explicit paths when:

  • you have multiple SDKs installed

  • the tools live outside standard locations

  • you want deterministic setup across machines

  • automatic discovery does not find the expected binary

Leave the variables unset when:

  • the tools are already on PATH

  • the standard Android and Xcode locations are enough

Common environment variables:

  • ADB_PATH: explicit path to adb

  • ANDROID_SDK_ROOT or ANDROID_HOME: Android SDK root

  • XCRUN_PATH: explicit path to xcrun

  • MCP_IDB_PATH or IDB_PATH: explicit path to idb

  • GRADLE_JAVA_HOME or JAVA_HOME: Java home for Gradle-backed operations

For normal use, call get_system_status first. It reports the detected host, Android, and iOS toolchain state so the client can decide whether automatic discovery is sufficient or whether explicit overrides are needed.

Configuration

Recommended when you want Android only, or when you want to make the Android toolchain explicit.

{
  "mcpServers": {
    "mobile-debug": {
      "command": "npx",
      "args": ["--yes","mobile-debug-mcp","server"],
      "env": {
        "ADB_PATH": "/path/to/adb",
        "ANDROID_SDK_ROOT": "/path/to/android/sdk",
        "GRADLE_JAVA_HOME": "/path/to/jdk"
      }
    }
  }
}

For Android-only setups, XCRUN_PATH and IDB_PATH are not required unless you want to pin them explicitly.

Recommended when you want iOS simulator or device support, or when idb lives in a non-standard location.

{
  "mcpServers": {
    "mobile-debug": {
      "command": "npx",
      "args": ["--yes","mobile-debug-mcp","server"],
      "env": {
        "XCRUN_PATH": "/usr/bin/xcrun",
        "MCP_IDB_PATH": "/path/to/idb",
        "IDB_PATH": "/path/to/idb"
      }
    }
  }
}

For iOS-only setups, ADB_PATH and ANDROID_SDK_ROOT are not required unless you want to pin them explicitly.

Use STDIO

command: npx

args:

  • --yes

  • mobile-debug-mcp

environment variables:

  • ADB_PATH: /path/to/adb

  • XCRUN_PATH: /usr/bin/xcrun

  • IDB_PATH: /path/to/idb

  • MCP_IDB_PATH: /path/to/idb

  • ANDROID_SDK_ROOT: /path/to/android/sdk

  • GRADLE_JAVA_HOME: /path/to/jdk

  • JAVA_HOME: /path/to/jdk

If you are unsure whether the environment is configured correctly, run get_system_status first. It reports the detected host, Android, and iOS toolchain state in a structured form.

Usage

Examples:

Crash fixing:

I have a crash on the app, can you diagnose it, fix and validate using the mcp tools available

Feature building:

Add a button, hook into the repository and confirm API request successful

Docs

  • Tools: Tools — full input/response examples

  • Changelog: Changelog

  • Agents: AGENTS.md — cold-start guidance for autonomous agents entering the public repo

  • Skills: skills/README.md — portable Markdown skill packages for agents such as Copilot, Codex, Claude, or custom systems

License

MIT

Available Tools

33 tools
adjust_controlA

Purpose: Adjust a numeric control value with verification.

This is the initial adjustable-control surface for slider-like controls and other controls that expose a numeric value or value_range.

Inputs:

  • exactly one of selector or element_id

  • property (defaults to "value")

  • targetValue

  • tolerance (optional; discrete default is 0, continuous default is max(step / 2, 1% of range) when omitted)

  • maxAttempts (optional; defaults to 5)

  • platform/deviceId (optional)

Output Structure:

  • action_id, timestamp (ISO 8601), action_type

  • lifecycle_state: post-dispatch lifecycle state (pending_verification or failed)

  • source_module: runtime source of the action envelope

  • target_state / actual_state / within_tolerance / converged / attempts / adjustment_mode

  • target.selector = original selector or element handle

  • success = true when the control converges within tolerance

Verification Guidance:

  • Prefer direct platform adjustment when the runtime exposes it; then verified increment/decrement actions; use coordinate fallback only as degraded mode

  • Use expect_state for the control value readback

  • Do not use derived semantic metadata as proof of success

Failure Handling:

  • ELEMENT_NOT_FOUND → re-resolve the control

  • ELEMENT_NOT_INTERACTABLE → the control cannot be adjusted through the current runtime

  • CONTROL_CONVERGENCE_FAILED → the control did not converge within bounded retries or the requested value is out of range

  • UNKNOWN → capture a snapshot and stop

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceIdNoOptional device serial/udid
platformNoOptional platform override
propertyNoReadable numeric state property to adjust.value
selectorNo
toleranceNoAccepted numeric tolerance around the target value. Defaults are derived from the readable control domain.
element_idNoOptional previously resolved element identifier.
maxAttemptsNoMaximum adjustment attempts.
targetValueYesTarget numeric value.

TDQS

A4.6/5.0
Behavior5/5

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

With no annotations, the description fully carries behavioral disclosure. It details verification process, output structure, lifecycle states, and failure handling with specific error codes, leaving little ambiguity about tool behavior.

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

Conciseness4/5

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

Well-organized into sections (Purpose, Inputs, Output, Verification, Failure), but somewhat verbose. Every sentence is informative, though some redundancy exists (e.g., repeated default values).

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

Completeness5/5

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

Covers inputs, outputs, verification guidance, failure handling, and edge cases (tolerance defaults for discrete/continuous). Without an output schema, the description provides sufficient structure for understanding return values. Complete for the tool's complexity.

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

Parameters4/5

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

Schema coverage is 88%, so baseline is 3. The description adds value by explaining default tolerance for discrete vs continuous controls, default maxAttempts, and the requirement of exactly one of selector or element_id, which aids correct parameter usage.

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

Purpose5/5

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

The description clearly states it adjusts a numeric control value with verification, specifying it's for slider-like controls with numeric values or value ranges. This distinguishes it from sibling tools like tap, swipe, or type_text.

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

Usage Guidelines4/5

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

Provides verification guidance on preferred adjustment methods (direct platform, then increment/decrement, coordinate fallback as degraded) and advises using expect_state for readback. Does not explicitly list when not to use, but context implies it's for numeric controls.

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

build_appA

Build a project for Android or iOS and return the built artifact path. Does not install. platform and projectType are required.

ParametersJSON Schema
NameRequiredDescriptionDefault
variantNoOptional build variant (e.g., Debug/Release)
platformYesPlatform to build for (required).
projectPathYesPath to project directory (contains gradlew or xcodeproj/xcworkspace)
projectTypeYesProject type to guide build tool selection (required).

TDQS

A3.8/5.0
Behavior2/5

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

No annotations are provided, so the description carries full burden. It mentions core behavior but omits details like side effects, failure handling, or whether it modifies project files. Insufficient for safe autonomous use.

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

Conciseness5/5

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

Two sentences, front-loaded with purpose. Every sentence earns its place. No unnecessary words.

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

Completeness4/5

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

With no output schema, the description explains the return value (artifact path) but lacks format details. It covers the required inputs but could mention prerequisites like project structure. Generally adequate.

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

Parameters3/5

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

Schema coverage is 100%, so baseline is 3. The description merely repeats that platform and projectType are required, adding no extra meaning beyond the schema's existing descriptions.

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

Purpose5/5

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

The description clearly states the tool builds a project for Android or iOS and returns the artifact path. It distinguishes from siblings like install_app by explicitly noting 'Does not install.'

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

Usage Guidelines4/5

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

The description indicates when not to use (if installation needed) and specifies required parameters. It does not explicitly name alternative tools but context from siblings makes it clear.

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

capture_debug_snapshotB

Capture a complete debug snapshot (raw observation layer plus optional derived semantic layer). Returns structured JSON with snapshot_revision, captured_at_ms, snapshot_delta, and loading_state when detectable.

ParametersJSON Schema
NameRequiredDescriptionDefault
appIdNoOptional appId to scope logs (package/bundle id)
reasonNoOptional reason for snapshot
deviceIdNoOptional device serial/udid
logLinesNoMaximum number of log lines to include
platformNoOptional platform override
sessionIdNoOptional log stream session id to prefer
includeLogsNoWhether to include logs

TDQS

B3.3/5.0
Behavior2/5

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

No annotations exist, so description must carry the burden. It mentions output fields but does not disclose side effects, auth needs, or whether it is read-only. Some behavior is implied but insufficient.

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

Conciseness5/5

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

Two efficient sentences, front-loaded with action and output format. No wasted words.

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

Completeness3/5

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

Adequate for an all-optional parameter tool with no required inputs, but lacks usage guidelines and detailed behavioral context. Could be improved with when-to-use advice or clarification of 'derived semantic layer'.

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

Parameters3/5

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

Schema coverage is 100% with descriptions for all 7 parameters. The tool description adds no additional parameter meaning, so baseline score of 3 is appropriate.

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

Purpose5/5

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

The description clearly states the tool captures a complete debug snapshot with raw and optional derived layers, and lists specific return fields. This distinguishes it from siblings like get_logs or capture_screenshot.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives like start_log_stream or get_ui_tree. The description lacks context for decision-making.

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

capture_screenshotA

Capture a screenshot from an Android device or iOS simulator. Returns device metadata and the screenshot image.

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceIdNoDevice UDID (iOS) or Serial (Android). Defaults to booted/connected.
platformYes

TDQS

A3.6/5.0
Behavior2/5

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

No annotations provided, so description carries full burden. Only mentions return value, not behavioral traits like side effects, permissions, or whether it affects device state. Missing critical disclosure for a 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.

Conciseness5/5

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

Single sentence, front-loaded with purpose, no fluff. Efficiently communicates main goal and return value.

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

Completeness4/5

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

For a simple screen capture with 2 params and no output schema, description adequately states purpose and output. Minor gap: no mention of image format or metadata structure, but not critical given tool simplicity.

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

Parameters3/5

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

Schema covers both parameters with descriptions for deviceId and enum for platform. Description adds minimal value beyond schema; platform lacks explicit description but enum clarifies. Schema coverage 50% is compensated by schema itself.

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

Purpose5/5

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

Clear verb ('Capture') and resource ('screenshot') with platform specification ('Android device or iOS simulator'). Returns device metadata and image, distinguishing from siblings like capture_debug_snapshot. Fully describes purpose.

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

Usage Guidelines3/5

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

Implied usage for capturing screenshots, but no explicit guidance on when to use this tool vs alternatives like get_current_screen or capture_debug_snapshot. Lacks exclusions or context.

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

classify_action_outcomeA

Classify the outcome of the most recent action into exactly one of: success, no_op, backend_failure, ui_failure, unknown.

Use the runtime action result's action_type as actionType so the classifier can distinguish local-state actions from side-effect actions. Use this when the intended outcome is not already fully verified by the UI signal alone. For backend/API activity, compare get_screen_fingerprint before and after the action and call get_network_activity immediately after the action if the outcome is still ambiguous.

HOW TO GATHER INPUTS before calling:

  1. Call wait_for_screen_change or compare get_screen_fingerprint before/after — set uiChanged accordingly.

  2. If you checked for a specific element with wait_for_ui, set expectedElementVisible.

  3. Pass actionType from the action response when available.

  4. Only provide networkRequests if you already collected them or want to classify a side-effect action with backend evidence.

RULES (applied in order — stop at first match):

  1. If uiChanged=true OR expectedElementVisible=true → outcome=success

  2. If actionType is missing → outcome=unknown

  3. If any request has status=failure or retryable → outcome=backend_failure

  4. If actionType maps to a local-state action → outcome=no_op; prefer state-based verification and avoid default network fallback

  5. If actionType maps to a side-effect action and no networkRequests were supplied → outcome=unknown

  6. If no requests returned → outcome=no_op

  7. If all requests succeeded → outcome=ui_failure

  8. Otherwise → outcome=unknown

BEHAVIOUR after outcome:

  • success → continue

  • no_op → retry with richer state verification or re-resolve the element

  • backend_failure → stop and report the failing endpoint

  • ui_failure → stop and report failure

  • unknown → take one recovery step (e.g. capture_debug_snapshot), then stop

ParametersJSON Schema
NameRequiredDescriptionDefault
uiChangedYestrue if the screen fingerprint or activity changed after the action. Use wait_for_screen_change or compare get_screen_fingerprint before and after.
actionTypeNoThe runtime action_type from the action response (for example tap, tap_element, swipe, type_text, press_back, start_app).
hasLogErrorsNotrue if structured log errors were observed (e.g. from read_log_stream). Optional — include if you have already read logs.
networkRequestsNoOptional network evidence collected after the action. Use it when the expected outcome is backend/API activity or when the UI signal is ambiguous.
expectedElementVisibleNotrue if the element you expected to appear is now visible (from wait_for_ui). Omit if you did not check for a specific element.

TDQS

A4.7/5.0
Behavior5/5

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

With no annotations, the description fully carries the burden of behavioral disclosure. It details the classification rules (applied in order), post-outcome actions, and pre-call steps. This provides complete transparency into the tool's behavior without contradiction.

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

Conciseness4/5

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

The description is well-organized with clear sections (HOW TO GATHER INPUTS, RULES, BEHAVIOUR) and each sentence serves a purpose. It is detailed but not excessively verbose for the complexity of the tool; a minor reduction could improve conciseness.

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

Completeness5/5

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

Given the tool's complexity and absence of an output schema, the description thoroughly covers all necessary aspects: input gathering, rule application order, output categories, and post-classification behavior. No gaps remain.

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

Parameters5/5

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

Schema coverage is 100%, but the description adds significant meaning by explaining each parameter's role in the classification logic (e.g., uiChanged triggers rule 1, actionType maps to action type categories). This goes beyond the schema definitions.

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

Purpose5/5

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

Description clearly states the tool classifies the outcome of the most recent action into one of five distinct categories. The verb 'classify' combined with the resource 'action outcome' is specific and unambiguous. No sibling tool performs classification, so it distinguishes well.

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

Usage Guidelines4/5

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

Provides explicit guidance on when to use: 'when the intended outcome is not already fully verified by the UI signal alone.' Also details how to gather inputs and includes a rule set. While alternatives are not explicitly excluded, the instruction is clear and context-rich.

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

expect_element_visibleA

Purpose: Deterministically verify that the intended UI outcome of an action has occurred by confirming a target element is visible.

Inputs:

  • selector: required selector used to resolve the target element

  • element_id: optional previously resolved element identifier used only as context

Output Structure:

  • success: true when the element is visible

  • selector: selector used for verification

  • element_id: resolved element identifier when available

  • element: minimal resolved element info when visible

  • failure_code: TIMEOUT or UNKNOWN when verification fails

  • retryable: true when failure_code=TIMEOUT

Recommended Usage:

  1. Define the expected element state before executing the action

  2. Resolve the target element or triggering control

  3. Call an action tool such as tap_element

  4. If needed, wait for UI availability using wait_for_*

  5. Call expect_element_visible as the final verification step

  6. If success=false, follow the action tool retry guidance

Verification Guidance:

  • Primary and authoritative verification tool for expected element appearance or visibility

  • Use this when the screen should stay the same but the UI should reveal or update a specific element

  • selector is the primary input; element_id is an optional optimization only

  • The tool resolves the selector internally when needed

Constraints:

  • Returns structured binary success/failure only

  • Must not rely on natural-language interpretation or reasoning

Failure Handling:

  • TIMEOUT → retry verification once or retry the action after re-resolving

  • UNKNOWN → capture a snapshot and stop

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceIdNoOptional device serial/udid
platformNoOptional platform override
selectorYes
element_idNoOptional previously resolved element identifier.
timeout_msNo
poll_interval_msNo

TDQS

A4.1/5.0
Behavior4/5

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

No annotations are provided, so the description carries the full burden. It discloses internal resolution, deterministic binary output, failure codes (TIMEOUT, UNKNOWN), and constraints (no natural-language interpretation). It could mention that the tool is read-only.

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

Conciseness4/5

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

The description is structured with clear headers (Purpose, Inputs, Output Structure, etc.) and is front-loaded. However, it is somewhat verbose and could be more concise without losing clarity.

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

Completeness4/5

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

Given the lack of output schema, the description covers purpose, usage, behavior, output structure, and failure handling. It does not detail the nested selector properties (text, contains, etc.) but provides sufficient context for an agent to understand the tool's role.

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

Parameters3/5

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

Schema coverage is 50%. The description adds meaning for selector and element_id (e.g., 'required selector used to resolve the target element') but does not explain deviceId, platform, timeout_ms, or poll_interval_ms. Parameters with defaults are not described, leaving gaps.

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

Purpose5/5

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

The description clearly states the tool's purpose: 'deterministically verify that the intended UI outcome of an action has occurred by confirming a target element is visible.' It uses specific verb-resource combination and distinguishes from sibling tools like expect_screen and expect_state.

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

Usage Guidelines4/5

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

The description provides a recommended usage workflow (steps 1-6), verification guidance, and failure handling. It tells when to use ('primary and authoritative verification tool') but does not explicitly state when not to use. The sibling list provides context.

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

expect_screenA

Purpose: Deterministically verify that the intended navigation outcome of an action has occurred.

Inputs:

  • fingerprint: preferred exact-match screen fingerprint

  • screen: exact semantic screen identifier when a fingerprint is not available

Output Structure:

  • success: true when the expected screen matches the observed screen

  • observed_screen: current fingerprint and screen identifier

  • expected_screen: the expected fingerprint and/or screen identifier

  • confidence: 1 for an exact match, otherwise 0

Recommended Usage:

  1. Define the expected screen before executing the action

  2. Resolve the target element or screen state

  3. Call an action tool such as tap_element

  4. If needed, wait for transition using wait_for_*

  5. Call expect_screen as the final verification step

  6. If success=false, treat the outcome as unverified and follow the action tool retry guidance

Verification Guidance:

  • Primary and authoritative verification tool for navigation outcomes

  • Prefer fingerprint whenever you have one

  • Use screen only as a fallback exact match against known identifiers

  • Works best when the expected screen identifier is known ahead of time

  • If the expected screen is not already known, capture or define it before executing the action

Constraints:

  • Returns structured binary success/failure only

  • Must not rely on natural-language interpretation or reasoning

Failure Handling:

  • success=false means the expected screen was not reached; retry or recover using the action tool's failure strategy

ParametersJSON Schema
NameRequiredDescriptionDefault
screenNoExpected exact screen identifier when no fingerprint is available.
deviceIdNoOptional device id/udid to target
platformNoOptional platform override (android|ios)
fingerprintNoExpected screen fingerprint. Preferred verification mechanism.

TDQS

A4.8/5.0
Behavior5/5

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

With no annotations, the description fully discloses output structure, confidence meaning, constraints (no NLP), and failure handling. Behavior is completely transparent.

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

Conciseness5/5

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

Well-structured with clear sections, front-loaded purpose, and every sentence adds value. No redundancy.

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

Completeness5/5

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

Covers inputs, outputs, usage, failure handling, and constraints comprehensively. No output schema exists, but description compensates fully.

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

Parameters5/5

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

Schema coverage is 100% with descriptions, and the description adds meaningful context (preference for fingerprint, fallback to screen) beyond the schema.

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

Purpose5/5

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

The description clearly states the verb 'verify' and the resource 'navigation outcome' with deterministic exact matching. It distinguishes from siblings like get_current_screen and wait_for_screen_change.

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

Usage Guidelines4/5

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

Provides step-by-step recommended usage and guidance on fallback from fingerprint to screen. However, it does not explicitly contrast with alternatives like expect_element_visible or discuss when not to use.

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

expect_stateA

Purpose: Verify a readable UI state property on the currently visible element.

Inputs:

  • selector or element_id

  • property

  • expected

  • platform/deviceId (optional)

Supported properties:

  • checked, selected, focused, expanded, enabled, text_value, value, raw_value

Verification Guidance:

  • Use this when the UI element is visible but its state must also be confirmed

  • Prefer the canonical property names above

  • The tool compares the normalized readable state and returns the observed value when available

Constraints:

  • Returns structured success/failure only

  • Does not infer a state when the property is unavailable

Failure Handling:

  • ELEMENT_NOT_FOUND → re-resolve the element or wait for UI stabilization

  • UNKNOWN → capture a snapshot and stop

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceIdNoOptional device serial/udid
expectedYesExpected normalized state value.
platformNoOptional platform override
propertyYesReadable state property to verify.
selectorNo
element_idNoOptional previously resolved element identifier.

TDQS

A4.4/5.0
Behavior4/5

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

Without annotations, the description fully discloses behavior: it returns structured success/failure only, does not infer state when property is unavailable, and lists failure handling for ELEMENT_NOT_FOUND and UNKNOWN. It does not explicitly state it is non-destructive or require permissions, but verification nature implies read-only. Adds important details beyond typical.

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

Conciseness5/5

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

The description is well-structured with clear sections (Purpose, Inputs, Supported Properties, Verification Guidance, Constraints, Failure Handling). It is front-loaded with the purpose and every sentence contributes value. No unnecessary words or repetitions.

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

Completeness4/5

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

Given no output schema, the description explains that the tool returns 'structured success/failure only' and 'observed value when available'. It covers common failure cases with advice. However, it does not detail the exact structure of the response, which might be needed for parsing. Still, for a verification tool, this is adequate.

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

Parameters4/5

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

Schema coverage is high (83%), so baseline is 3. The description lists input parameters (selector/element_id, property, expected, deviceId/platform) and provides a list of supported property values (e.g., checked, selected, focused), which is not in the schema. This adds meaningful guidance for parameter values.

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

Purpose5/5

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

The description clearly states the tool verifies a readable UI state property on the currently visible element, with a specific verb ('verify') and resource ('UI state property'). This distinguishes it from siblings like expect_element_visible (checks visibility) or expect_screen (checks screen).

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

Usage Guidelines4/5

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

The description provides a 'Verification Guidance' section explaining when to use this tool ('when the UI element is visible but its state must also be confirmed'). It also advises to prefer canonical property names. However, it does not explicitly state when not to use or list alternatives, though context is clear.

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

find_elementA

Find a UI element by semantic query (text, content-desc, resource-id, class).

Returns the best match plus resolution metadata when available, including confidence, selection reason, and fallback alternates.

ParametersJSON Schema
NameRequiredDescriptionDefault
exactNoRequire exact match (true/false)
queryYesSearch query (text or label)
deviceIdNoOptional device serial/udid
platformNoOptional platform override
timeoutMsNoTimeout in ms to keep searching

TDQS

A3.8/5.0
Behavior3/5

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

The description discloses return metadata (confidence, selection reason, fallback alternates) and implies a search with timeout. However, it does not mention side effects, permissions needed, or whether it modifies state. Since no annotations exist, this is partial transparency.

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

Conciseness5/5

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

Two well-structured sentences, front-loaded with action and resource. No fluff; every sentence adds value.

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

Completeness4/5

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

Despite no output schema or annotations, the description covers input purpose and output structure. Could mention that it requires a device/app context, but given sibling tools, the domain is clear. Reasonably complete for a find operation.

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

Parameters4/5

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

The schema has 100% coverage, but the description adds semantic context like 'by semantic query' and lists specific attribute types (text, content-desc, etc.) not in the schema. It also clarifies return type, enhancing parameter understanding.

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

Purpose5/5

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

The description clearly states the tool finds a UI element by semantic query using attributes like text, content-desc, resource-id, class, and specifies that it returns best match with metadata. This distinguishes it from siblings like tap_element (tap) or get_ui_tree (tree dump).

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives such as wait_for_ui or expect_element_visible. Does not specify preconditions (e.g., screen loaded) or scenarios where it should be avoided.

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

get_current_screenB

Get the currently visible activity on an Android device. Returns package and activity name.

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceIdNoDevice Serial (Android). Defaults to connected/booted device.

TDQS

B3.4/5.0
Behavior2/5

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

No annotations are provided, and the description does not disclose behavioral traits such as side effects, prerequisites (e.g., requires a running app), or error conditions. The description only states what it returns, leaving the agent uninformed about important behavioral aspects.

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

Conciseness5/5

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

The description is concise with two sentences, front-loaded with the primary action and return value. Every sentence is informative and there is no redundancy.

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

Completeness4/5

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

For a simple query tool with no required parameters and a clear return value, the description is largely complete. However, given the absence of an output schema, a brief note on the structure of the returned package and activity name could enhance completeness.

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

Parameters3/5

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

Schema description coverage is 100% for the single parameter. The description adds 'Defaults to connected/booted device' which is already implied in the schema. No additional semantic value is provided beyond what the schema already conveys.

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

Purpose5/5

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

The description clearly states the tool gets the currently visible activity on an Android device and returns package and activity name. It uses a specific verb and resource, distinguishing it from sibling tools like get_screen_fingerprint or get_ui_tree.

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

Usage Guidelines2/5

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

No guidelines are provided on when to use this tool versus alternatives such as get_screen_fingerprint or get_ui_tree. The description lacks context on appropriate usage scenarios.

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

get_logsB

Get recent logs from Android or iOS simulator. Returns device metadata and structured logs suitable for AI consumption.

ParametersJSON Schema
NameRequiredDescriptionDefault
pidNoFilter by process id
tagNoFilter by tag (Android) or subsystem/category (iOS)
appIdNoFilter by Android package name or iOS bundle id
levelNoLog level filter (VERBOSE, DEBUG, INFO, WARN, ERROR)
limitNoOverride default number of returned lines
linesNoLegacy - number of log lines (android only)
containsNoSubstring to match in log message
deviceIdNoDevice UDID (iOS) or Serial (Android). Defaults to booted/connected.
platformYes
since_secondsNoOnly return logs from the last N seconds

TDQS

B3.3/5.0
Behavior2/5

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

No annotations are provided, so the description must fully disclose behavioral traits. It mentions 'recent logs' but does not state whether the tool is read-only, whether logs are cleared, or any side effects. Lacks details on authentication needs, rate limits, or default behavior for deviceId.

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

Conciseness5/5

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

Two sentences, front-loaded with the core purpose. No extraneous words. Both sentences add distinct value: what the tool does and what it returns.

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

Completeness3/5

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

Despite high parameter coverage, the description lacks explanation of the return format ('structured logs suitable for AI consumption' is vague) and does not clarify the 'device metadata'. More context on output would improve completeness for a tool with 10 parameters and no output schema.

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

Parameters3/5

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

Schema description coverage is high (90%), so baseline is 3. The description does not add meaningful nuance beyond what the schema already provides; it only summarizes the tool's purpose.

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

Purpose5/5

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

The description clearly states the action (Get), the resource (recent logs), and the target platforms (Android or iOS simulator). It distinguishes from siblings like read_log_stream by emphasizing one-time retrieval and returning device metadata and structured logs.

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

Usage Guidelines2/5

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

No explicit guidance on when to use this tool versus alternatives like start_log_stream or read_log_stream. Missing prerequisites, context for one-time vs streaming, and when not to use.

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

get_network_activityA

Returns structured network events captured from platform logs since the last action.

Call this immediately after an action when you want backend evidence for a side-effect flow, only if the result is still ambiguous. Do not call more than once per action.

Events are filtered to significant (non-background) requests only. Each event includes endpoint, method, statusCode, networkError, status, and durationMs.

status values:

  • success: HTTP 2xx or request detected with no error signal

  • failure: HTTP 4xx

  • retryable: HTTP 5xx, network error (timeout, dns_error, tls_error, etc.)

Returns { requests: [], count: 0 } when no credible network signals are found.

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceIdNoDevice Serial (Android) or UDID (iOS). Defaults to connected/booted device.
platformYesPlatform to read network logs from

TDQS

A4.9/5.0
Behavior5/5

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

With no annotations, the description fully discloses behavior: events are filtered to significant requests, explains status values with HTTP code ranges, and describes the return shape including empty response. No contradictions.

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

Conciseness5/5

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

Description is concise with no wasted words. It uses bullet points for status values, front-loads the main purpose, and each sentence adds necessary information.

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

Completeness5/5

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

Given 2 parameters with good schema coverage and no output schema, the description sufficiently explains the return format (requests array, count, empty case) and the filtering behavior. Complete for a read-only network log tool.

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

Parameters4/5

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

Schema coverage is 100%, but description adds value by explaining defaulting behavior for deviceId and the purpose of platform. The additional context on defaults improves usability beyond the schema alone.

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

Purpose5/5

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

The description clearly states it returns structured network events from platform logs since the last action. The verb 'returns' and resource 'network events' are specific, and it distinguishes from siblings like get_logs by focusing on network activity.

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

Usage Guidelines5/5

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

Explicitly states when to call: immediately after an action when backend evidence is needed and result is ambiguous. Also instructs not to call more than once per action, providing clear usage boundaries.

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

get_screen_fingerprintB

Generate a stable fingerprint representing the current visible screen (activity + visible UI elements).

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceIdNoOptional device id/udid to target
platformNoOptional platform override (android|ios)

TDQS

B3.2/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden but only states it generates a fingerprint. It does not disclose whether the tool is read-only, if it has side effects, or what behavior to expect beyond the surface description.

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

Conciseness5/5

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

Single sentence, 14 words, front-loaded with the key action and output. No wasted words; every part is essential.

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

Completeness2/5

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

While the tool is simple with two optional parameters and no output schema, the description fails to explain the return value format or provide context on when to use it among many sibling UI tools. An AI agent would benefit from more behavioral and usage details.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema documents both parameters adequately. The description adds no additional parameter information beyond what is already in the schema, meriting a baseline score of 3.

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

Purpose5/5

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

Description uses specific verb 'generate' and resource 'stable fingerprint', and clarifies it represents the current visible screen including activity and UI elements. This clearly distinguishes it from sibling tools like get_ui_tree or get_current_screen.

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

Usage Guidelines2/5

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

No explicit guidance on when to use this tool versus alternatives. While the purpose is clear, there is no mention of when not to use it or what distinguishes it from similar tools like get_current_screen or wait_for_screen_change.

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

get_system_statusA

Quick healthcheck of local mobile debugging environment (adb, devices, logs, env, iOS).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.9/5.0
Behavior3/5

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 indicates a non-destructive read operation via 'healthcheck', but lacks details on permissions, failure modes, or what exactly is checked in each listed area.

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

Conciseness5/5

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

The description is a single concise sentence that front-loads the key purpose and includes specific details. Every word adds value, with no redundancy.

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

Completeness3/5

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

Given no output schema and many siblings, the description adequately explains the tool's purpose and scope. However, it does not describe the output format or confirm that the healthcheck returns actionable status information, leaving some ambiguity.

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

Parameters4/5

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

The tool has zero parameters, so schema coverage is 100%. The description does not need to add parameter information. A baseline of 4 is appropriate for a parameterless tool.

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

Purpose5/5

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

The description clearly states the tool performs a 'quick healthcheck' of the 'local mobile debugging environment', listing specific aspects (adb, devices, logs, env, iOS). This verb+resource combination is distinct from sibling tools like list_devices or get_logs, which cover individual components.

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

Usage Guidelines3/5

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

The description does not explicitly state when to use this tool versus alternatives. The phrase 'quick healthcheck' implies it should be used for an overview before more detailed checks, but no exclusions or guidance are provided.

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

get_ui_treeB

Get the current UI hierarchy from an Android device or iOS simulator. Returns a structured JSON representation of the screen content with snapshot metadata and incremental delta signals when available.

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceIdNoDevice Serial (Android) or UDID (iOS). Defaults to connected/booted device.
platformYesPlatform to get UI tree for

TDQS

B3.3/5.0
Behavior2/5

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

With no annotations, the description bears full transparency burden. It mentions incremental delta signals (hinting at optimization) but fails to disclose whether the operation is read-only, requires a running app, or has performance implications. The term 'Get' implies a read, but specifics are lacking.

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

Conciseness5/5

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

Two sentences, front-loaded with purpose. No wasted words. Every word serves a purpose, and the structure supports quick comprehension.

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

Completeness3/5

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

Given no output schema, the description is moderately complete. It specifies the return format (structured JSON with snapshot metadata and delta signals) but lacks depth on the tree's composition or performance expectations. For a complex tool, more context (e.g., size, filtering) would help.

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

Parameters3/5

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

Schema coverage is 100%, so the baseline is 3. The description adds no extra meaning beyond the schema's parameter descriptions (e.g., deviceId defaults, platform enum). No elaboration on parameter usage or constraints.

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

Purpose4/5

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

The description clearly states it retrieves the current UI hierarchy from Android/iOS, returning a structured JSON. It distinguishes itself from siblings like 'get_current_screen' (which likely returns a simpler identifier) and 'get_screen_fingerprint' (a hash), but does not explicitly differentiate.

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

Usage Guidelines3/5

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

No explicit when-to-use or when-not is provided. It implies usage for obtaining the full UI tree but does not mention prerequisites, alternatives, or contraindications. Among siblings, clearer guidance would help, e.g., when to use this vs the more granular finding elements tools.

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

install_appB

Install an app on Android or iOS. Accepts a built binary (apk/.ipa/.app) or a project directory to build then install. platform and projectType are required.

ParametersJSON Schema
NameRequiredDescriptionDefault
appPathYesPath to APK, .app, .ipa, or project directory
deviceIdNoDevice UDID (iOS) or Serial (Android). Defaults to booted/connected.
platformYesPlatform to install to (required).
projectTypeYesProject type to guide build/install tool selection (required).

TDQS

B3.2/5.0
Behavior2/5

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

With no annotations, the description carries full burden. It mentions accepting binary or project directory and building then installing, but does not disclose failure modes, prerequisites (e.g., device connection), permissions, or whether previous app versions are replaced.

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

Conciseness5/5

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

Two sentences, no redundancy. Efficiently conveys core functionality and requirements.

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

Completeness2/5

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

Lacks information about return values, success indicators, or error handling. No mention of output or follow-up actions, which is notable given no output schema is provided.

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

Parameters3/5

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

Schema coverage is 100%, so the schema already documents all parameters. The description adds minimal extra meaning beyond clarifying that appPath can be a binary or project directory, which the schema already implies.

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

Purpose5/5

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

The description clearly states the tool installs an app on Android or iOS, specifies it accepts both built binaries and project directories, and requires platform and projectType. This distinguishes it from sibling tools like build_app.

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

Usage Guidelines2/5

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

No explicit guidance on when to use this tool versus alternatives like build_app. The description only states required parameters but does not provide context for when to use this among sibling tools.

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

list_devicesA

List connected devices and their metadata (android + ios).

ParametersJSON Schema
NameRequiredDescriptionDefault
platformNo

TDQS

A3.5/5.0
Behavior2/5

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

No annotations exist, so the description bears full burden. It only states it 'List connected devices and their metadata' without disclosing whether authentication is needed, if data is cached, or performance implications. Minimal behavioral insight.

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

Conciseness5/5

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

The description is a single, front-loaded sentence with no wasted words. It is highly concise and structured.

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

Completeness3/5

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

Given no output schema and no annotations, the description is adequate but incomplete. It lacks details on return format, scope of metadata, and behavior when platform is omitted.

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

Parameters3/5

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

Schema coverage is 0% (no parameter description), so description must compensate. It adds context by mentioning platforms (android + ios) which relates to the 'platform' parameter, but does not explain the parameter fully or describe metadata contents.

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

Purpose5/5

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

The description clearly states the action 'List' and the resource 'connected devices' with metadata, and specifies scope (android + ios). It distinguishes from sibling tools which are action-oriented (e.g., start_app, tap).

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

Usage Guidelines3/5

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

The description implies usage for listing devices, but does not explicitly state when to use this tool versus alternatives or when to filter by platform. No exclusions or context provided.

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

press_backA

Purpose: Dispatch the Android Back action.

Inputs:

  • platform/deviceId (optional)

Output Structure:

  • action_id, timestamp (ISO 8601), action_type

  • lifecycle_state: post-dispatch lifecycle state (pending_verification or failed)

  • source_module: runtime source of the action envelope

  • target.selector = { key: "back" }

  • success = true when the back action was dispatched

  • failure_code/retryable when dispatch fails

  • ui_fingerprint_before/ui_fingerprint_after when available

Recommended Usage:

  1. Call press_back

  2. If needed, wait for transition using wait_for_*

  3. Verify with expect_screen when a known destination is expected

  4. If verification fails, retry once or recover explicitly

Verification Guidance:

  • Back outcomes can vary by screen, so verify against the intended destination when possible

  • Follow RESOLVE → ACT → WAIT (if needed) → EXPECT

  • Do not use wait_for_* alone as final verification when an applicable expect_* tool exists

Failure Handling:

  • TIMEOUT → retry once

  • UNKNOWN → capture a snapshot and stop

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceIdNoDevice Serial/UDID. Defaults to connected/booted device.
platformNoPlatform (currently only android supported)

TDQS

A4.4/5.0
Behavior5/5

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

No annotations provided, so description carries full burden. It thoroughly explains output structure, success/failure behavior, failure codes, retryability, and UI fingerprints.

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

Conciseness4/5

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

Well-structured with sections and front-loaded purpose, but somewhat verbose (e.g., detailed output structure). Minor redundancy.

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

Completeness5/5

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

No output schema, but description covers inputs, outputs, usage steps, failure handling, and verification guidance. Complete for a simple action tool.

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

Parameters3/5

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

Schema coverage is 100% with detailed descriptions. The description merely restates the parameters (platform/deviceId) without adding new meaning, thus baseline 3.

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

Purpose5/5

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

The description clearly states 'Dispatch the Android Back action', using a specific verb and resource. This distinguishes it from sibling tools like tap, swipe, and type_text.

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

Usage Guidelines4/5

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

Provides a recommended usage sequence and verification guidance, but does not explicitly state when not to use the tool or compare it to alternatives.

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

read_log_streamC

Read accumulated log stream entries for the active session.

ParametersJSON Schema
NameRequiredDescriptionDefault
sessionIdNo

TDQS

C2.7/5.0
Behavior2/5

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

With no annotations, the description must fully disclose behavior. It only mentions 'accumulated' and 'active session', but fails to explain what happens if no session exists, if the stream was not started, or whether reading clears the buffer. Minimal behavioral information.

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

Conciseness5/5

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

The description is a single, short sentence with no extraneous words. It conveys the core action efficiently.

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

Completeness2/5

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

Given the lack of output schema and parameter descriptions, the description is too minimal. It does not cover return format, error behavior, or relationship to other tools like start_log_stream. The tool has 1 parameter but no elaboration.

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

Parameters1/5

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

Schema description coverage is 0%, so the description should add meaning to the sessionId parameter. It does not mention the parameter at all. 'Active session' is implied but not linked to the parameter, leaving the agent to guess its role.

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

Purpose4/5

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

The description clearly states the verb 'read' and the resource 'accumulated log stream entries'. It distinguishes from sibling tools like start_log_stream and stop_log_stream by focusing on reading. However, 'active session' is somewhat vague, preventing a perfect score.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives. It does not mention prerequisites like calling start_log_stream first, nor does it exclude scenarios. The description lacks any context for appropriate usage.

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

reset_app_dataC

Reset app data (clear storage) for a mobile app on Android or iOS simulator

ParametersJSON Schema
NameRequiredDescriptionDefault
appIdYesAndroid package name or iOS bundle id
deviceIdNoDevice UDID (iOS) or Serial (Android). Defaults to booted/connected.
platformYes

TDQS

C2.8/5.0
Behavior2/5

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

With no annotations, the description bears full responsibility for behavioral disclosure. It only says 'clear storage' but does not elaborate on what data is removed (e.g., cache, user defaults), whether the app is terminated, or if the action is reversible. The description is insufficient given the potentially destructive nature of the operation.

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

Conciseness3/5

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

The description is very concise (one sentence), but it sacrifices important details for brevity. It would benefit from additional context about the action's impact, which could be added without becoming overly verbose.

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

Completeness2/5

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

The tool has moderate complexity with three parameters and no output schema. The description omits important context such as what happens after the reset (e.g., app restarts, data is lost permanently) and prerequisites (e.g., app must be installed). This gap leads to an incomplete understanding for the agent.

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

Parameters3/5

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

Schema description coverage is 67% (two of three parameters have descriptions). The tool description adds no further parameter semantics beyond the schema, but the existing schema descriptions are adequate. Baseline score of 3 is appropriate.

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

Purpose4/5

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

The description clearly states the action 'reset app data (clear storage)' and the target 'mobile app on Android or iOS simulator'. It uses a specific verb and resource, distinguishing it from sibling tools like start_app or get_logs.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives such as reinstalling the app or using other reset methods. It does not mention that this is a destructive action or suggest use cases like simulating a fresh install.

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

restart_appA

Purpose: Restart a mobile app on Android or iOS.

Inputs:

  • platform

  • appId

  • deviceId (optional)

Output Structure:

  • action_id, timestamp (ISO 8601), action_type

  • lifecycle_state: post-dispatch lifecycle state (pending_verification or failed)

  • source_module: runtime source of the action envelope

  • target.selector = { appId }

  • success = true when the restart command completed

  • failure_code/retryable when restart dispatch fails

  • ui_fingerprint_before/ui_fingerprint_after when available

Recommended Usage:

  1. Define the expected landing screen when it is known

  2. Call restart_app

  3. If needed, wait for transition using wait_for_*

  4. Verify with expect_screen

  5. If verification fails, retry once or capture a snapshot

Verification Guidance:

  • Follow RESOLVE → ACT → WAIT (if needed) → EXPECT

  • expect_screen is the authoritative verification step when the reopened screen is known

  • Do not treat timing or screen change alone as final verification

Failure Handling:

  • TIMEOUT → retry once

  • UNKNOWN → inspect snapshot/logs before retrying

ParametersJSON Schema
NameRequiredDescriptionDefault
appIdYesAndroid package name or iOS bundle id
deviceIdNoDevice UDID (iOS) or Serial (Android). Defaults to booted/connected.
platformYes

TDQS

A4.4/5.0
Behavior5/5

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

No annotations exist, but the description fully covers behavioral traits: output structure, success/failure conditions, lifecycle state, and integration with verification steps. It also includes failure handling for TIMEOUT and UNKNOWN cases.

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

Conciseness4/5

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

Well-structured with clear sections (Purpose, Inputs, Output, Recommended Usage, etc.). While verbose, every section adds value for an AI agent, and the purpose is front-loaded.

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

Completeness5/5

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

Despite no output schema, the description provides a detailed output structure and workflow integration with sibling tools. It is complete for the tool's complexity and the given context signals.

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

Parameters3/5

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

Schema coverage is 67%, and the description lists parameter names but adds minimal additional meaning beyond the schema's descriptions. The baseline for this coverage is 3, and the description does not significantly elevate it.

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

Purpose5/5

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

The description clearly states the verb 'restart' and the resource 'mobile app on Android or iOS'. It distinguishes itself from sibling tools like start_app, terminate_app, etc.

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

Usage Guidelines4/5

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

Provides a step-by-step recommended usage pattern including waiting and verification with other tools. Does not explicitly state when not to use it or alternatives, but the guidance is clear and context-aware.

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

scroll_to_elementA

Purpose: Scroll until a target element becomes visible.

Inputs:

  • platform

  • selector

  • direction, maxScrolls, scrollAmount, deviceId (optional)

Output Structure:

  • action_id, timestamp (ISO 8601), action_type

  • lifecycle_state: post-dispatch lifecycle state (pending_verification or failed)

  • source_module: runtime source of the action envelope

  • target.selector = original selector

  • target.resolved = minimal resolved element info when found

  • success = true when scrolling produced a visible target element

  • failure_code/retryable when the target was not reached

  • ui_fingerprint_before/ui_fingerprint_after when available

Recommended Usage:

  1. Resolve the target selector

  2. Call scroll_to_element

  3. If needed, wait for UI stabilization using wait_for_*

  4. Verify with expect_element_visible when the expected element visibility is known

  5. If success=false, follow failure handling before retrying

Verification Guidance:

  • Follow RESOLVE → ACT → WAIT (if needed) → EXPECT

  • Use expect_element_visible when you need an explicit post-scroll confirmation

  • Do not use wait_for_* alone as final verification when an applicable expect_* tool exists

Failure Handling:

  • NAVIGATION_NO_CHANGE → adjust scroll direction or stop

  • TIMEOUT → retry with refined selector or larger scroll budget

  • UNKNOWN → capture a snapshot and stop

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceIdNoDevice UDID (iOS) or Serial (Android). Defaults to booted/connected.
platformYesPlatform to operate on (required)
selectorYes
directionNodown
maxScrollsNo
scrollAmountNo

TDQS

A4.2/5.0
Behavior4/5

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

Despite no annotations, the description details the post-dispatch lifecycle state, success conditions, failure codes, and optional fingerprint fields. It does not mention potential side effects like scroll causing layout changes, but overall it is transparent.

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

Conciseness4/5

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

The description is well-structured with clear sections and front-loaded purpose. However, the output structure section is very verbose and could be more concise, especially since there is no output schema to offload detail.

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

Completeness4/5

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

Given the complexity (6 parameters, nested object, enums) and no output schema, the description covers usage workflow, success criteria, and failure modes. It lacks detail on the resolved element info output, but is otherwise thorough.

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

Parameters2/5

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

The description lists parameters but does not explain their meaning beyond the input schema. Schema coverage is only 33%, and the description does not add value for the undocumented parameters (direction, maxScrolls, scrollAmount). For example, 'scrollAmount' could be a fraction or absolute value, but no clues are given.

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

Purpose5/5

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

The purpose is clearly stated as 'Scroll until a target element becomes visible.' This is a specific verb+resource action that distinguishes the tool from siblings like tap, swipe, and find_element.

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

Usage Guidelines5/5

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

The description provides explicit usage guidance including a recommended workflow (RESOLVE → ACT → WAIT → EXPECT), verification guidance (when to use expect_element_visible vs wait_for_*), and failure handling instructions for specific error types.

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

start_appA

Purpose: Launch a mobile app on Android or iOS.

Inputs:

  • platform

  • appId

  • deviceId (optional)

Output Structure:

  • action_id, timestamp (ISO 8601), action_type

  • lifecycle_state: post-dispatch lifecycle state (pending_verification or failed)

  • source_module: runtime source of the action envelope

  • target.selector = { appId }

  • success = true when launch was dispatched successfully

  • failure_code/retryable when launch dispatch fails

  • ui_fingerprint_before/ui_fingerprint_after when available

Recommended Usage:

  1. Define the expected landing screen when it is known

  2. Call start_app

  3. If needed, wait for transition using wait_for_*

  4. Verify with expect_screen

  5. If verification fails, retry once or capture a snapshot

Verification Guidance:

  • Follow RESOLVE → ACT → WAIT (if needed) → EXPECT

  • expect_screen is the authoritative verification step when the landing screen is known

  • Do not treat timing or screen change alone as final verification

Failure Handling:

  • TIMEOUT → retry once

  • UNKNOWN → inspect snapshot/logs before retrying

ParametersJSON Schema
NameRequiredDescriptionDefault
appIdYesAndroid package name or iOS bundle id
deviceIdNoDevice UDID (iOS) or Serial (Android). Defaults to booted/connected.
platformYes

TDQS

A4.9/5.0
Behavior5/5

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

With no annotations, the description fully discloses behavior: dispatches launch, lifecycle states, success/failure codes, and UI fingerprints. No contradictions.

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

Conciseness4/5

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

Well-structured with sections (Purpose, Inputs, Output, Usage, Failure). Slightly verbose but all content is valuable and efficient.

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

Completeness5/5

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

Given no output schema, the description fully explains output structure, usage workflow, and failure handling. Sufficient for an app launch action.

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

Parameters5/5

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

Adds meaning beyond schema: appId as 'Android package name or iOS bundle id', deviceId defaulting to 'booted/connected'. Covers all three parameters clearly.

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

Purpose5/5

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

The description clearly states 'Launch a mobile app on Android or iOS' with specific verb and resource, and the parameter list distinguishes it from sibling tools like terminate_app or restart_app.

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

Usage Guidelines5/5

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

Provides explicit step-by-step usage (define landing screen, call, wait, verify, retry) and failure handling guidance (TIMEOUT, UNKNOWN). Clearly differentiates from other tools.

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

start_log_streamA

Start streaming logs for a target application on Android or iOS. For Android this uses adb logcat --pid=; for iOS it streams xcrun simctl spawn <device> log stream with a predicate.

ParametersJSON Schema
NameRequiredDescriptionDefault
levelNoerror
deviceIdNoDevice Serial (Android) or UDID (iOS). Defaults to connected/booted device.
platformNoandroid
sessionIdNoSession identifier for the log stream
packageNameYesAndroid package name or iOS bundle id

TDQS

A3.8/5.0
Behavior2/5

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

No annotations are provided, so the description must fully disclose behavior. It mentions the underlying commands (adb logcat, xcrun) but omits lifecycle details, resource usage, or whether the stream runs continuously until stopped. The sessionId parameter hints at manageability but is not explained.

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

Conciseness5/5

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

Two sentences efficiently convey the action and platform details without extraneous information. The structure is front-loaded with the core purpose.

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

Completeness4/5

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

Given the tool has 5 parameters and no output schema or annotations, the description covers the main purpose and platform differences. It lacks details on return values, lifecycle management, and potential side effects, but is sufficient for a start action.

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

Parameters4/5

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

Schema coverage is 60%, with some parameters defaulted. The description adds context by explaining platform-specific commands (adb logcat, xcrun) and the default device behavior. However, it does not elaborate on each parameter's semantics beyond the schema.

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

Purpose5/5

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

The description clearly states the tool starts streaming logs for an app on Android or iOS, with specific commands for each platform. It distinguishes from siblings like get_logs and stop_log_stream by focusing on starting the stream.

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

Usage Guidelines3/5

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

The description implies real-time log streaming but does not explicitly state when to use this tool over alternatives like get_logs or read_log_stream. No usage exclusions or prerequisites are provided.

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

stop_log_streamC

Stop an active log stream for the session.

ParametersJSON Schema
NameRequiredDescriptionDefault
sessionIdNo

TDQS

C2.8/5.0
Behavior2/5

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

No annotations are provided, so the description must fully disclose behavior. It only states the action 'stop' without detailing side effects (e.g., whether logs are discarded, if all streams are stopped, or if it requires an active stream). This is insufficient for a tool with potential destructive implications.

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

Conciseness4/5

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

The description is only 8 words in a single sentence, which is efficient and front-loaded. However, it sacrifices essential detail for brevity.

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

Completeness3/5

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

For a simple tool with one parameter and no output schema or annotations, the description covers the basic purpose but lacks behavioral details and parameter guidance. It is minimally adequate but not fully complete.

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

Parameters2/5

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

Schema description coverage is 0%, and the description does not explain the sessionId parameter. The parameter name is somewhat self-explanatory, but format, required status, or typical usage is missing, leaving the agent to guess.

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

Purpose4/5

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

The description clearly states the tool stops an active log stream for the session, using a verb+resource pattern. It is distinguishable from sibling tools like start_log_stream and read_log_stream, though it does not explicitly differentiate.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives such as get_logs or read_log_stream. No mention of prerequisites or conditions like requiring an active stream.

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

swipeA

Purpose: Dispatch a swipe gesture on Android or iOS.

Inputs:

  • start and end coordinates

  • duration

  • platform/deviceId (optional)

Output Structure:

  • action_id, timestamp (ISO 8601), action_type

  • lifecycle_state: post-dispatch lifecycle state (pending_verification or failed)

  • source_module: runtime source of the action envelope

  • target.selector = { x1, y1, x2, y2, duration }

  • success = true when the swipe was dispatched

  • failure_code/retryable when dispatch fails

  • ui_fingerprint_before/ui_fingerprint_after when available

Recommended Usage:

  1. Determine swipe coordinates

  2. Call swipe

  3. If needed, wait for transition using wait_for_*

  4. Verify with expect_screen or expect_element_visible when a deterministic outcome is expected

Verification Guidance:

  • Swipe outcomes are less predictable; choose the most specific verifier available for the intended effect

  • Follow RESOLVE → ACT → WAIT (if needed) → EXPECT

  • Do not use wait_for_* alone as final verification when an applicable expect_* tool exists

Failure Handling:

  • TIMEOUT → retry once

  • UNKNOWN → capture a snapshot and stop

ParametersJSON Schema
NameRequiredDescriptionDefault
x1YesStart X coordinate
x2YesEnd X coordinate
y1YesStart Y coordinate
y2YesEnd Y coordinate
deviceIdNoDevice Serial/UDID. Defaults to connected/booted device.
durationYesDuration in ms
platformNoPlatform to swipe on (android or ios)

TDQS

A4.8/5.0
Behavior5/5

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

Discloses output structure, lifecycle states, failure codes, and notes that swipe outcomes are less predictable. No annotations contradict.

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

Conciseness4/5

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

Well-structured with clear sections, front-loaded with purpose. Slightly long but every sentence earns its place.

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

Completeness5/5

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

Covers output structure, usage, verification, failure handling, and parameter details. Complete care for a 7-parameter tool with no output schema.

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

Parameters4/5

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

Input section adds context beyond 100% schema coverage, e.g., defaults for deviceId. Schema already detailed, but description adds value.

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

Purpose5/5

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

Clearly states 'Dispatch a swipe gesture on Android or iOS.' Distinguishes from sibling tools like tap, scroll_to_element.

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

Usage Guidelines5/5

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

Provides explicit 'Recommended Usage' steps, 'Verification Guidance' (e.g., Do not use wait_for_* alone), and 'Failure Handling' strategy.

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

tapA

Purpose: Dispatch a tap at specific screen coordinates.

Inputs:

  • x, y coordinates

  • platform (optional)

  • deviceId (optional)

Output Structure:

  • action_id, timestamp (ISO 8601), action_type

  • lifecycle_state: post-dispatch lifecycle state (pending_verification or failed)

  • source_module: runtime source of the action envelope

  • target.selector = { x, y }

  • success = true when the tap was dispatched

  • failure_code/retryable when dispatch fails

  • ui_fingerprint_before/ui_fingerprint_after when available

Recommended Usage:

  1. Resolve coordinates deterministically

  2. Call tap

  3. If needed, wait for transition using wait_for_*

  4. Verify with expect_screen or expect_element_visible depending on the intended outcome

Verification Guidance:

  • Prefer tap_element over tap when an element can be resolved

  • Follow RESOLVE → ACT → WAIT (if needed) → EXPECT

  • Use expect_screen for navigation and expect_element_visible for local UI changes

  • Do not use wait_for_* alone as final verification when an applicable expect_* tool exists

Failure Handling:

  • TIMEOUT → retry once

  • UNKNOWN → capture a snapshot and stop

ParametersJSON Schema
NameRequiredDescriptionDefault
xYesX coordinate
yYesY coordinate
deviceIdNoDevice Serial/UDID. Defaults to connected/booted device.
platformNoPlatform to tap on

TDQS

A4.8/5.0
Behavior5/5

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

With no annotations provided, the description carries full burden. It details the output structure (action_id, timestamp, lifecycle_state, success flag, failure codes, UI fingerprints) and failure handling (retries, snapshot capture). This is comprehensive and transparent.

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

Conciseness4/5

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

The description is well-structured with clear sections (Purpose, Inputs, Output, Usage, Failure). While lengthy, each section adds necessary guidance. Minor redundancy could be trimmed but overall efficient.

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

Completeness5/5

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

Given no output schema, the description compensates by detailing the output structure thoroughly. It also covers the recommended workflow, failure handling, and reference to sibling tools (tap_element, wait_for_*, expect_*). Complete for the tool's complexity.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3. The description adds context by summarizing parameters (x, y coordinates, optional platform and deviceId) and implying defaults. It does not repeat exact schema details but adds value by grouping optional fields.

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

Purpose5/5

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

The description clearly states the tool dispatches a tap at specific screen coordinates, distinguishing it from tap_element which should be preferred when an element is available. The verb 'dispatch' and resource 'tap at coordinates' are specific.

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

Usage Guidelines5/5

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

The description includes a Recommended Usage section with a clear sequence (RESOLVE → ACT → WAIT → EXPECT) and explicit guidance to prefer tap_element over tap. It also provides Verification Guidance and Failure Handling, detailing when and how to use the tool.

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

tap_elementA

Purpose: Tap a previously resolved UI element using its elementId.

Inputs:

  • elementId: a resolved UI element identifier returned by wait_for_ui

Output Structure:

  • action_id: unique timestamp-based action identifier

  • timestamp: ISO 8601 timestamp for the action attempt

  • action_type: "tap_element"

  • lifecycle_state: post-dispatch lifecycle state (pending_verification or failed)

  • source_module: runtime source of the action envelope

  • target.selector: original target handle ({ elementId })

  • target.resolved: minimal resolved element info used for the tap

  • success: true when the tap was dispatched

  • failure_code: present when success=false

  • retryable: present when failure_code exists

  • ui_fingerprint_before/ui_fingerprint_after: optional fingerprints captured around the action

Recommended Usage:

  1. Resolve the target with wait_for_ui or another deterministic resolver

  2. Call tap_element

  3. If needed, wait for transition using wait_for_*

  4. Verify outcome using expect_*

    • use expect_screen when navigation is expected

    • use expect_element_visible when the UI change is local

  5. If verification fails, inspect failure_code and follow the retry strategy below

Verification Guidance:

  • Follow RESOLVE → ACT → WAIT (if needed) → EXPECT

  • Prefer expect_screen for navigation or modal transitions

  • Prefer expect_element_visible when the tap should reveal or update a specific element

  • wait_for_* may be used for resolution and synchronization, but not as the final verification step when an applicable expect_* tool exists

  • Do not treat tap_element.success as outcome success; it only means the tap was executed

Failure Handling:

  • STALE_REFERENCE → re-resolve the element, then retry

  • ELEMENT_NOT_INTERACTABLE → wait or refine the target, then retry

  • UNKNOWN → capture a snapshot and stop

This tool reports execution success only. Verification must be done with a separate expect_* tool.

ParametersJSON Schema
NameRequiredDescriptionDefault
elementIdYesA unique element identifier returned by wait_for_ui

TDQS

A4.6/5.0
Behavior5/5

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

No annotations provided, so description carries full burden. It details output structure, failure codes (STALE_REFERENCE, ELEMENT_NOT_INTERACTABLE, UNKNOWN), retry logic, and clarifies that success only means execution, not outcome. Very transparent.

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

Conciseness4/5

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

Well-structured with sections (Purpose, Inputs, Output Structure, Recommended Usage, etc.). It is relatively long but every sentence adds value given the tool's complexity.

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

Completeness5/5

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

Comprehensive coverage: usage flow, verification guidance, failure handling, and output details. Without output schema, the description compensates fully by listing expected fields.

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

Parameters4/5

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

Schema coverage is 100% (1 parameter, elementId). The description adds meaning by explaining how to obtain elementId from wait_for_ui and its purpose, going beyond the schema's brief description.

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

Purpose5/5

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

The description clearly states the tool's purpose: 'Tap a previously resolved UI element using its elementId.' This is specific and distinguishes it from siblings like generic 'tap' by requiring a resolved elementId from wait_for_ui.

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

Usage Guidelines4/5

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

The 'Recommended Usage' section provides a clear workflow (RESOLVE → ACT → WAIT → EXPECT) and when to use expect_screen vs expect_element_visible. However, it does not explicitly exclude usage scenarios compared to siblings like tap.

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

terminate_appB

Terminate a mobile app on Android or iOS simulator

ParametersJSON Schema
NameRequiredDescriptionDefault
appIdYesAndroid package name or iOS bundle id
deviceIdNoDevice UDID (iOS) or Serial (Android). Defaults to booted/connected.
platformYes

TDQS

B3.1/5.0
Behavior2/5

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

No annotations are provided, and the description does not disclose behavioral traits such as whether termination is graceful or forceful, if it triggers confirmation dialogs, or what happens to app state. The agent lacks insight into side effects or constraints beyond the obvious terminal action.

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

Conciseness5/5

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

The description is a single, clear sentence with no unnecessary words. It efficiently conveys the core purpose and platform scope, making it easy to parse quickly.

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

Completeness2/5

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

Given the 3 parameters (2 required) and no output schema, the description is too minimal. It omits behavioral details, usage context, and error scenarios. The agent would need to consult other documentation or trial-and-error to use this tool reliably alongside the listed siblings.

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

Parameters2/5

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

The description adds no additional meaning to the parameters beyond what the input schema already provides. While the schema covers 'appId' and 'deviceId' with descriptions, the 'platform' parameter is only listed via enum and has no separate description; the description does not compensate for this gap or clarify parameter relationships.

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

Purpose5/5

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

The description clearly states the action ('terminate'), the resource ('a mobile app'), and the context ('on Android or iOS simulator'). It effectively distinguishes this tool from sibling tools like start_app, restart_app, or stop_log_stream by specifying the exact operation and platform.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives (e.g., restart_app, press_back, or force stop via system settings). The description lacks context about prerequisites, session states, or typical use cases, leaving the agent to infer without support.

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

type_textA

Purpose: Type text into the currently focused Android input field.

Inputs:

  • text

  • platform/deviceId (optional)

Output Structure:

  • action_id, timestamp (ISO 8601), action_type

  • lifecycle_state: post-dispatch lifecycle state (pending_verification or failed)

  • source_module: runtime source of the action envelope

  • target.selector = { text }

  • success = true when text input was dispatched

  • failure_code/retryable when dispatch fails

  • ui_fingerprint_before/ui_fingerprint_after when available

Recommended Usage:

  1. Resolve or focus the target input first

  2. Call type_text

  3. If needed, wait for UI stabilization using wait_for_*

  4. Verify with expect_element_visible or expect_screen, depending on the intended outcome

Verification Guidance:

  • Prefer verifying the next expected element or screen state instead of inferring success from the text action alone

  • Follow RESOLVE → ACT → WAIT (if needed) → EXPECT

  • Do not use wait_for_* alone as final verification when an applicable expect_* tool exists

Failure Handling:

  • TIMEOUT → retry once

  • UNKNOWN → re-focus the input or capture a snapshot

ParametersJSON Schema
NameRequiredDescriptionDefault
textYesThe text to type
deviceIdNoDevice Serial/UDID. Defaults to connected/booted device.
platformNoPlatform to type on (currently only android supported)

TDQS

A4.9/5.0
Behavior5/5

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

No annotations provided, so description carries full burden. It discloses typing into focused input, optional deviceId/platform, output structure including success, failure, lifecycle states, and ui fingerprints. No contradictions.

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

Conciseness5/5

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

Well-structured with clear sections (Purpose, Inputs, Output Structure, Recommended Usage, etc.). Every sentence adds value, no fluff.

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

Completeness5/5

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

Comprehensive for a tool with no annotations and moderate complexity. Includes output structure, failure handling, and verification steps, fully covering agent needs.

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

Parameters4/5

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

Schema coverage is 100%, but description adds behavioral context (e.g., 'currently focused input', default device connection) beyond the schema descriptions.

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

Purpose5/5

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

The description clearly states 'Type text into the currently focused Android input field.' This is a specific verb and resource, and it distinguishes from sibling tools like tap, swipe, and press_back.

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

Usage Guidelines5/5

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

Provides explicit step-by-step usage flow (RESOLVE → ACT → WAIT → EXPECT), verification guidance, and failure handling. Helps the agent decide when and how to use the tool.

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

wait_for_screen_changeA

Purpose: Detect that a screen transition has occurred by waiting for the current fingerprint to differ from a previous fingerprint.

Capabilities:

  • Synchronization for uncertain navigation timing

  • Detection that something changed on screen

Constraints:

  • Does not verify correctness of the resulting state

  • Must not be used alone to confirm action success when an applicable expect_* tool exists

  • For backend/API activity without a visible UI change, pass the runtime action_type into classify_action_outcome and collect network evidence only if the result remains ambiguous

Recommended Usage:

  1. Capture or define the expected outcome

  2. Call an action tool

  3. Use wait_for_screen_change when transition timing is uncertain

  4. Follow with expect_screen when the expected destination is known

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceIdNoOptional device id/udid to target
platformNoOptional platform override (android|ios)
timeoutMsNoTimeout in ms to wait for change (default 5000)
pollIntervalMsNoPolling interval in ms (default 300)
previousFingerprintYesThe fingerprint to compare against (required)

TDQS

A4.3/5.0
Behavior5/5

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

Discloses key behavioral traits: it only detects change, not correctness, and does not verify resulting state. Constraints are clearly listed. Without annotations, this description carries the full burden and does it well.

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

Conciseness4/5

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

Well-structured with sections (Purpose, Capabilities, Constraints, Recommended Usage). Front-loaded with purpose. Slightly verbose but every sentence adds value. Could be trimmed slightly.

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

Completeness4/5

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

Covers purpose, capabilities, constraints, and usage workflow. No output schema exists, but behavior (wait, detect change) is clear. Could mention timeout behavior more explicitly, but overall complete.

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

Parameters3/5

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

Schema coverage is 100%, so baseline is 3. The description does not add significant meaning beyond the schema; it only mentions previousFingerprint as required. No extra explanation of other parameters.

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

Purpose4/5

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

The description clearly states the tool's purpose: detecting screen transitions via fingerprint comparison. It distinguishes from expect_* tools but does not explicitly differentiate from sibling 'wait_for_ui_change', leaving some ambiguity.

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

Usage Guidelines5/5

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

Provides explicit when-to-use and when-not-to-use guidance, including a note not to use alone when an expect_* tool exists, and alternative for backend/API activity. The 'Recommended Usage' section offers a clear workflow.

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

wait_for_uiA

Purpose: Resolve elements and/or detect that a UI transition or availability condition has occurred.

Capabilities:

  • Deterministic element resolution

  • Synchronization when element timing or availability is uncertain

Constraints:

  • Does not verify correctness of the resulting state

  • Must not be used alone to confirm action success when an applicable expect_* tool exists

Recommended Usage:

  1. Use wait_for_ui to resolve an element before acting or to wait for UI readiness

  2. Call the action tool

  3. If the expected outcome is known, follow with expect_* as final verification

ParametersJSON Schema
NameRequiredDescriptionDefault
matchNo
retryNo
deviceIdNoOptional device serial/udid
platformNoOptional platform override
selectorNo
conditionNoexists
timeout_msNo
poll_interval_msNo

TDQS

A4.1/5.0
Behavior4/5

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

Without annotations, the description discloses that it does not verify correctness of the resulting state and is deterministic. This adds behavioral context beyond the schema, though it lacks edge-case or error behavior details.

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

Conciseness4/5

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

The description is well-structured into clear sections (Purpose, Capabilities, Constraints, Recommended Usage) with no redundancy. Minor inefficiency: the phrase about deterministic element resolution appears twice.

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

Completeness3/5

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

Given 8 parameters, nested objects, and no output schema, the description provides high-level purpose and constraints but lacks details on parameter interplay, return value, and error conditions, leaving significant gaps.

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

Parameters2/5

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

Schema description coverage is only 25% (only 'contains' subfield described). The description does not explain parameters like match, retry, selector, condition, or timeout beyond their schema defaults, failing to compensate for low coverage.

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

Purpose5/5

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

The description clearly states the tool resolves elements and detects UI transitions/conditions, with a specific verb and resource. It distinguishes from siblings like wait_for_screen_change by focusing on element-level synchronization.

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

Usage Guidelines5/5

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

Explicit recommended usage steps are provided: resolve element, call action, then verify with expect_*. Also states a constraint: not to be used alone when expect_* exists, providing clear when-to-use and when-not.

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

wait_for_ui_changeA

Purpose: Wait for a non-navigation UI mutation or in-place update to become stable.

Inputs:

  • expected_change (optional): hierarchy_diff, text_change, or state_change

  • timeout_ms (optional)

  • stability_window_ms (optional)

  • scope (optional): screen or subtree

  • target (optional): element_id when scope=subtree

Guidance:

  • Prefer wait_for_screen_change for navigation transitions.

  • Prefer wait_for_ui_change for in-place mutations and non-navigation updates.

  • Use the returned snapshot_revision as the observed synchronization point when available.

  • Scoped waits return scope-aware stability metadata and a lightweight change summary.

Failure Handling:

  • TIMEOUT means the UI did not change in a stable way within the allotted time.

ParametersJSON Schema
NameRequiredDescriptionDefault
scopeNoSynchronization scope for the waitscreen
targetNoTarget element_id when scope is subtree
deviceIdNoOptional device id/udid to target
platformNoOptional platform override (android|ios)
timeout_msNoTimeout in ms to wait for change (default 60000)
expected_changeNoOptional type of UI change to wait for
stability_window_msNoHow long the change must remain stable before success (default 300)

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations, description carries full burden. It explains the wait behavior, mentions returned 'snapshot_revision', scope-aware metadata, and failure handling. Lacks details on authorization or side effects, but as a wait tool, those are less critical.

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

Conciseness5/5

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

Well-organized with sections (Purpose, Inputs, Guidance, Failure Handling). Every sentence is informative. Front-loaded with purpose. No redundancy or fluff.

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

Completeness5/5

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

Given 7 parameters fully described in schema, no output schema, and many siblings, the description provides sufficient context: purpose, parameter roles, usage preferences, and failure handling. An agent can effectively decide when and how to use this tool.

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

Parameters3/5

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

Schema coverage is 100%, so baseline 3. The 'Inputs' section lists parameters but adds little beyond the schema definitions. Some guidance is given (e.g., 'target is for subtree'), but no additional semantic depth.

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

Purpose5/5

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

The description explicitly states it waits for a non-navigation UI mutation or in-place update to become stable, and later distinguishes from wait_for_screen_change. The verb 'wait' and resource 'UI change' are specific, and the scope is clarified.

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

Usage Guidelines5/5

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

Provides clear when-to-use guidance: 'Prefer wait_for_screen_change for navigation transitions. Prefer wait_for_ui_change for in-place mutations.' Also includes a Failure Handling section describing TIMEOUT behavior.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 33 tool updatesv0.31.0
    • First observedadjust_control
    • First observedbuild_app
    • First observedcapture_debug_snapshot
    • First observedcapture_screenshot
    • First observedclassify_action_outcome
    • First observedexpect_element_visible
    • First observedexpect_screen
    • First observedexpect_state
    • First observedfind_element
    • First observedget_current_screen
    • First observedget_logs
    • First observedget_network_activity
    • First observedget_screen_fingerprint
    • First observedget_system_status
    • First observedget_ui_tree
    • First observedinstall_app
    • First observedlist_devices
    • First observedpress_back
    • First observedread_log_stream
    • First observedreset_app_data
    • First observedrestart_app
    • First observedscroll_to_element
    • First observedstart_app
    • First observedstart_log_stream
    • First observedstop_log_stream
    • First observedswipe
    • First observedtap
    • First observedtap_element
    • First observedterminate_app
    • First observedtype_text
    • First observedwait_for_screen_change
    • First observedwait_for_ui
    • First observedwait_for_ui_change

TDQS

A3.6/5.0
Disambiguation4/5

Most tools have distinct purposes, but there is some overlap among wait_* and expect_* tools. However, descriptions clearly differentiate them (e.g., wait_for_screen_change vs wait_for_ui_change). Overall, confusion is minimal.

Naming Consistency5/5

All tools use consistent snake_case with a verb_noun pattern (e.g., start_app, get_logs, tap_element). No mixing of conventions, making names predictable and easy to follow.

Tool Count3/5

With 33 tools, the set is extensive. While the domain of mobile debugging is broad, this count is on the higher end for MCP servers. Some tools like read_log_stream and stop_log_stream could potentially be merged, but overall the count is borderline.

Completeness4/5

The tool surface covers app lifecycle, UI interaction, queries, expectations, logs, network, and screenshots. Minor gaps exist (e.g., no explicit deep link navigation or device management beyond listing), but core workflows are well supported.

Maintenance

ActivitySlowing
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    B
    maintenance
    An MCP server that enables AI assistants to build, test, and debug Android applications by interacting directly with the Android development environment. It provides tools for managing emulators, executing Gradle tasks, running ADB commands, and performing UI automation via accessibility trees.
    14
    121
    16
    MIT

Latest Blog Posts

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/clivejefferies/mobile-debug-tools'

If you have feedback or need assistance with the MCP directory API, please join our Discord server