Skip to main content
Glama

iOS WebDriverAgent setup and control

qa_wda

Sets up and manages iOS WebDriverAgent to support structured iOS tap, type, and snapshot automation, reusing builds and exposing status, logs, and diagnostics.

Instructions

Set up and manage iOS WebDriverAgent (WDA), needed for structured iOS tap/type/snapshot; start with action:"setup": it reuses a running WDA, else builds (if no build exists) and starts it as one consent-gated job (poll qa_job_status, then qa_wda attach). build/start are consent-gated; attach takes an external webDriverAgentUrl; status/doctor/diagnose/logs/tune inspect.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "sessionId": "<sessionId>",
      "action": "<action>"
    },
    "name": "qa_wda"
  }
}

Input Schema

NameRequiredDescriptionDefault
udidNoDeprecated alias of device.
actionYesbuild: background job, reuses a build unless rebuild:true. start: waits up to 45 s, then status:"starting" (poll qa_wait for:"wda_ready").
deviceNoSimulator UDID (default: session device).
schemeNoDefault WebDriverAgentRunner.
approveNo
rebuildNobuild/setup: run build-for-testing even when a previous build (.xctestrun) exists.
bundleIdNoDefault: the session appId.
consentIdNo
sessionIdYes
wdaProjectPathNoWebDriverAgent.xcodeproj (default: Appium WDA if found).
derivedDataPathNoxcodebuild -derivedDataPath for reuse.
allowNonLoopbackNoRequired to use a non-loopback external WDA URL.
webDriverAgentUrlNoDefault: this session's WDA (attached, or the last start / reuse), else ios.wda.url (http://127.0.0.1:8100). Non-loopback needs allowNonLoopback + consent.

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv0.1.0

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare non-read-only, non-idempotent, non-destructive behavior, so the description does not need to prove safety. It adds genuinely new context: setup runs as one consent-gated background job, build/start are consent-gated, non-loopback attach requires allowNonLoopback plus consent, and the agent must poll before attaching. It stops short of saying what happens to a device already running a runner, or what stop tears down.

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?

It is a single dense paragraph with no wasted sentences, and the ordering advice is front-loaded. However, the telegraphic tail ('status/doctor/diagnose/logs/tune inspect') is compressed to the point of ambiguity, and the mid-sentence branching makes it harder to parse than it needs to be.

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 ten-action, thirteen-parameter mutation tool with no output schema, the description covers the critical path (setup, build reuse, consent, polling, attach) and the inspection actions. The gap is return-value expectations for the inspection actions and any indication of what 'tune' does, which the agent must infer from the enum alone.

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 77%, which already carries most parameter meaning through the action enum and field descriptions. The description contributes only two semantic notes beyond it: that attach takes an external webDriverAgentUrl, and that setup/build reuse existing artifacts. The other ten parameters, notably consentId and approve, get no additional explanation here.

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 states a specific verb and resource ('Set up and manage iOS WebDriverAgent (WDA)') and ties it to a downstream capability ('needed for structured iOS tap/type/snapshot'), so the agent knows why it exists. It also routes the agent to qa_job_status and qa_wait rather than sibling iOS tools, though the ten-action sprawl keeps the single-sentence purpose from being instantly scannable.

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?

It gives an explicit recommended entry point ('start with action:"setup"') and explains the alternative paths: attach for an external webDriverAgentUrl, and status/doctor/diagnose/logs/tune for inspection. It also warns that setup reuses a running WDA before building. What it lacks is any statement of when NOT to use this tool, e.g. for non-iOS sessions or when a flow tool already handles the step.

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